contable 0.0.5 → 0.0.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (119) hide show
  1. package/dist/client/client/client.js +240 -0
  2. package/dist/client/{menu.js → client/menu.js} +1 -1
  3. package/dist/client/client/redux-formulario.js +379 -0
  4. package/dist/client/client/render-components.js +750 -0
  5. package/dist/client/client/render-formulario.js +56 -0
  6. package/dist/client/client/render-general.js +197 -0
  7. package/dist/client/client/render-handlers.js +69 -0
  8. package/dist/client/client/tipos.js +13 -0
  9. package/dist/client/{tsconfig.json → client/tsconfig.json} +3 -4
  10. package/dist/{unlogged → client/unlogged}/tsconfig.json +1 -3
  11. package/dist/server/client/tipos.d.ts +119 -0
  12. package/dist/server/client/tipos.js +13 -0
  13. package/dist/server/{app-contable.d.ts → server/app-contable.d.ts} +63 -3
  14. package/dist/server/server/app-contable.js +192 -0
  15. package/dist/server/server/def-config.d.ts +1 -0
  16. package/dist/server/server/def-config.js +101 -0
  17. package/dist/server/server/procedures-contable.js +508 -0
  18. package/dist/server/server/server-contable.js +15 -0
  19. package/dist/server/server/table-categorias_producto.js +29 -0
  20. package/dist/server/server/table-clientes.js +56 -0
  21. package/dist/server/server/table-condicion_iva.js +29 -0
  22. package/dist/server/server/table-estados_pedido.js +33 -0
  23. package/dist/server/server/table-estados_presupuesto.js +34 -0
  24. package/dist/server/server/table-insumos.js +44 -0
  25. package/dist/server/server/table-items_pedido.js +48 -0
  26. package/dist/server/server/table-items_presupuesto.js +48 -0
  27. package/dist/server/server/table-iva_productos.js +29 -0
  28. package/dist/server/server/table-parametros.js +38 -0
  29. package/dist/server/server/table-pedidos.js +48 -0
  30. package/dist/server/server/table-pedidos_pendientes.js +28 -0
  31. package/dist/server/server/table-pedidos_vencidos.js +28 -0
  32. package/dist/server/server/table-presupuestos.js +56 -0
  33. package/dist/server/server/table-productos.js +70 -0
  34. package/dist/server/server/table-productos_clientes.js +22 -0
  35. package/dist/server/server/table-productos_generales.js +22 -0
  36. package/dist/server/server/table-productos_insumos.js +47 -0
  37. package/dist/server/server/table-usuarios.js +44 -0
  38. package/dist/server/{types-contable.d.ts → server/types-contable.d.ts} +14 -3
  39. package/dist/server/server/types-contable.js +28 -0
  40. package/dist/unlogged/unlogged/adapt.js +8 -0
  41. package/dist/unlogged/unlogged/css/styles.styl +88 -0
  42. package/dist/unlogged/unlogged/img/login-logo-icon.png +0 -0
  43. package/dist/unlogged/unlogged/img/logo.png +0 -0
  44. package/dist/unlogged/unlogged/tsconfig.json +13 -0
  45. package/dist/unlogged/unlogged/unlogged.js +13 -0
  46. package/package.json +22 -5
  47. package/dist/client/client.js +0 -182
  48. package/dist/client/redux-formulario.js +0 -326
  49. package/dist/client/render-components.js +0 -617
  50. package/dist/client/render-formulario.js +0 -56
  51. package/dist/client/render-general.js +0 -172
  52. package/dist/client/render-handlers.js +0 -29
  53. package/dist/client/tipos.js +0 -13
  54. package/dist/server/app-contable.js +0 -192
  55. package/dist/server/def-config.d.ts +0 -1
  56. package/dist/server/def-config.js +0 -100
  57. package/dist/server/procedures-contable.js +0 -508
  58. package/dist/server/server-contable.js +0 -17
  59. package/dist/server/table-categorias_producto.js +0 -29
  60. package/dist/server/table-clientes.js +0 -56
  61. package/dist/server/table-condicion_iva.js +0 -29
  62. package/dist/server/table-estados_pedido.js +0 -33
  63. package/dist/server/table-estados_presupuesto.js +0 -34
  64. package/dist/server/table-insumos.js +0 -44
  65. package/dist/server/table-items_pedido.js +0 -48
  66. package/dist/server/table-items_presupuesto.js +0 -48
  67. package/dist/server/table-iva_productos.js +0 -29
  68. package/dist/server/table-parametros.js +0 -38
  69. package/dist/server/table-pedidos.js +0 -48
  70. package/dist/server/table-pedidos_pendientes.js +0 -28
  71. package/dist/server/table-pedidos_vencidos.js +0 -28
  72. package/dist/server/table-presupuestos.js +0 -56
  73. package/dist/server/table-productos.js +0 -70
  74. package/dist/server/table-productos_clientes.js +0 -22
  75. package/dist/server/table-productos_generales.js +0 -22
  76. package/dist/server/table-productos_insumos.js +0 -47
  77. package/dist/server/table-usuarios.js +0 -44
  78. package/dist/server/tsconfig.json +0 -10
  79. package/dist/server/types-contable.js +0 -28
  80. package/dist/unlogged/adapt.js +0 -8
  81. package/dist/unlogged/unlogged.js +0 -118
  82. /package/dist/client/{client.d.ts → client/client.d.ts} +0 -0
  83. /package/dist/client/{img → client/img}/bannersuperior.png +0 -0
  84. /package/dist/client/{menu.d.ts → client/menu.d.ts} +0 -0
  85. /package/dist/client/{redux-formulario.d.ts → client/redux-formulario.d.ts} +0 -0
  86. /package/dist/client/{render-components.d.ts → client/render-components.d.ts} +0 -0
  87. /package/dist/client/{render-components.tsx → client/render-components.tsx} +0 -0
  88. /package/dist/client/{render-formulario.d.ts → client/render-formulario.d.ts} +0 -0
  89. /package/dist/client/{render-formulario.tsx → client/render-formulario.tsx} +0 -0
  90. /package/dist/client/{render-general.d.ts → client/render-general.d.ts} +0 -0
  91. /package/dist/client/{render-general.tsx → client/render-general.tsx} +0 -0
  92. /package/dist/client/{render-handlers.d.ts → client/render-handlers.d.ts} +0 -0
  93. /package/dist/client/{tipos.d.ts → client/tipos.d.ts} +0 -0
  94. /package/dist/{unlogged → client/unlogged}/css/styles.styl +0 -0
  95. /package/dist/{unlogged/img/login-logo-icon.png.png → client/unlogged/img/login-logo-icon.png} +0 -0
  96. /package/dist/{unlogged → client/unlogged}/img/logo.png +0 -0
  97. /package/dist/server/{procedures-contable.d.ts → server/procedures-contable.d.ts} +0 -0
  98. /package/dist/server/{server-contable.d.ts → server/server-contable.d.ts} +0 -0
  99. /package/dist/server/{table-categorias_producto.d.ts → server/table-categorias_producto.d.ts} +0 -0
  100. /package/dist/server/{table-clientes.d.ts → server/table-clientes.d.ts} +0 -0
  101. /package/dist/server/{table-condicion_iva.d.ts → server/table-condicion_iva.d.ts} +0 -0
  102. /package/dist/server/{table-estados_pedido.d.ts → server/table-estados_pedido.d.ts} +0 -0
  103. /package/dist/server/{table-estados_presupuesto.d.ts → server/table-estados_presupuesto.d.ts} +0 -0
  104. /package/dist/server/{table-insumos.d.ts → server/table-insumos.d.ts} +0 -0
  105. /package/dist/server/{table-items_pedido.d.ts → server/table-items_pedido.d.ts} +0 -0
  106. /package/dist/server/{table-items_presupuesto.d.ts → server/table-items_presupuesto.d.ts} +0 -0
  107. /package/dist/server/{table-iva_productos.d.ts → server/table-iva_productos.d.ts} +0 -0
  108. /package/dist/server/{table-parametros.d.ts → server/table-parametros.d.ts} +0 -0
  109. /package/dist/server/{table-pedidos.d.ts → server/table-pedidos.d.ts} +0 -0
  110. /package/dist/server/{table-pedidos_pendientes.d.ts → server/table-pedidos_pendientes.d.ts} +0 -0
  111. /package/dist/server/{table-pedidos_vencidos.d.ts → server/table-pedidos_vencidos.d.ts} +0 -0
  112. /package/dist/server/{table-presupuestos.d.ts → server/table-presupuestos.d.ts} +0 -0
  113. /package/dist/server/{table-productos.d.ts → server/table-productos.d.ts} +0 -0
  114. /package/dist/server/{table-productos_clientes.d.ts → server/table-productos_clientes.d.ts} +0 -0
  115. /package/dist/server/{table-productos_generales.d.ts → server/table-productos_generales.d.ts} +0 -0
  116. /package/dist/server/{table-productos_insumos.d.ts → server/table-productos_insumos.d.ts} +0 -0
  117. /package/dist/server/{table-usuarios.d.ts → server/table-usuarios.d.ts} +0 -0
  118. /package/dist/unlogged/{adapt.d.ts → unlogged/adapt.d.ts} +0 -0
  119. /package/dist/unlogged/{unlogged.d.ts → unlogged/unlogged.d.ts} +0 -0
@@ -1,182 +0,0 @@
1
- (function (factory) {
2
- if (typeof module === "object" && typeof module.exports === "object") {
3
- var v = factory(require, exports);
4
- if (v !== undefined) module.exports = v;
5
- }
6
- else if (typeof define === "function" && define.amd) {
7
- define(["require", "exports", "js-to-html", "myOwn", "typed-controls", "./redux-formulario"], factory);
8
- }
9
- })(function (require, exports) {
10
- "use strict";
11
- Object.defineProperty(exports, "__esModule", { value: true });
12
- const js_to_html_1 = require("js-to-html");
13
- const myOwn = require("myOwn");
14
- const TypedControls = require("typed-controls");
15
- const redux_formulario_1 = require("./redux-formulario");
16
- var my = myOwn;
17
- myOwn.wScreens.tablero = function (_addrParams) {
18
- var mainLayout = document.getElementById('main_layout');
19
- mainLayout.appendChild(js_to_html_1.html.h1(`Tablero de control`).create());
20
- ['vencidos', 'pendientes'].forEach((element) => {
21
- mainLayout.appendChild(js_to_html_1.html.h2(`Pedidos ${element}`).create());
22
- var myDiv = js_to_html_1.html.div().create();
23
- mainLayout.appendChild(myDiv);
24
- my.tableGrid(`pedidos_${element}`, myDiv, {});
25
- });
26
- };
27
- my.clientSides.verCliente = {
28
- update: false,
29
- prepare: function (depot, fieldName) {
30
- var td = depot.rowControls[fieldName];
31
- var boton = js_to_html_1.html.button({}, 'ver').create();
32
- td.appendChild(boton);
33
- td.onclick = async function () {
34
- desplegarCliente(depot);
35
- };
36
- },
37
- };
38
- function colorearEstado(depot, pedidoOpresupuestoString) {
39
- depot.rowControls['estado'].style.backgroundColor = depot.rowControls[`estados_${pedidoOpresupuestoString}__color`].getTypedValue();
40
- }
41
- my.clientSides.accionesPresupuesto = {
42
- prepare: () => null,
43
- update: function (depot, fieldName) {
44
- let td = depot.rowControls[fieldName];
45
- td.innerHTML = '';
46
- colorearEstado(depot, 'presupuesto');
47
- let td = depot.rowControls[fieldName];
48
- let boton = my.createForkeableButton({ menuType: 'presupuesto', name: `gestionar,presupuesto`, label: "abrir" }, {});
49
- boton.href = boton.href + '&' + 'presupuesto' + '=' + depot.row.presupuesto.toString();
50
- td.appendChild(boton);
51
- let puedeEditarPresupuesto = depot.rowControls['estados_presupuesto__permite_editar'].getTypedValue();
52
- if (puedeEditarPresupuesto) {
53
- let boton = my.createForkeableButton({ menuType: 'pedido', name: 'gestionar,pedido', label: "aceptar" }, {});
54
- boton.href = boton.href + '&presupuesto=' + depot.row['presupuesto'].toString();
55
- td.appendChild(boton);
56
- }
57
- let presupuesto = depot.rowControls['presupuesto'].getTypedValue();
58
- ['anular', 'rechazar'].forEach((accion) => {
59
- if (puedeEditarPresupuesto) {
60
- let boton = js_to_html_1.html.button({}, accion).create();
61
- boton.onclick = async () => {
62
- await confirmPromise(`¿está por ${accion} el presupuesto? Esta acción no se podrá deshacer`);
63
- try {
64
- await my.ajax[`presupuesto_${accion}`]({
65
- presupuesto
66
- });
67
- }
68
- catch (err) {
69
- alertPromise(err.message);
70
- }
71
- finally {
72
- let grid = depot.manager;
73
- await grid.retrieveRowAndRefresh(depot);
74
- }
75
- };
76
- td.appendChild(boton);
77
- }
78
- });
79
- },
80
- };
81
- my.clientSides.accionesPedido = {
82
- prepare: () => null,
83
- update: function (depot, fieldName) {
84
- let td = depot.rowControls[fieldName];
85
- td.innerHTML = '';
86
- colorearEstado(depot, 'pedido');
87
- let td = depot.rowControls[fieldName];
88
- let boton = my.createForkeableButton({ menuType: 'pedido', name: `gestionar,pedido`, label: "abrir" }, {});
89
- boton.href = boton.href + '&' + 'pedido' + '=' + depot.row.pedido.toString();
90
- td.appendChild(boton);
91
- }
92
- };
93
- myOwn.wScreens.presupuestos = function (_addrParams) {
94
- var mainLayout = document.getElementById('main_layout');
95
- var myDiv = js_to_html_1.html.div().create();
96
- let boton = my.createForkeableButton({ menuType: 'presupuesto', name: 'gestionar,presupuesto', label: 'nuevo' }, {});
97
- mainLayout.appendChild(boton);
98
- mainLayout.appendChild(myDiv);
99
- boton.onclick = async function () {
100
- my.removeSessionVar(redux_formulario_1.STORAGE_STATE_NAME);
101
- };
102
- my.tableGrid('presupuestos', myDiv, {});
103
- };
104
- myOwn.wScreens.pedidos = function (_addrParams) {
105
- var mainLayout = document.getElementById('main_layout');
106
- var myDiv = js_to_html_1.html.div().create();
107
- let boton = my.createForkeableButton({ menuType: 'pedido', name: 'gestionar,pedido', label: 'nuevo' }, {});
108
- //var boton = html.button({},'nuevo').create();
109
- mainLayout.appendChild(boton);
110
- mainLayout.appendChild(myDiv);
111
- boton.onclick = async function () {
112
- my.removeSessionVar(redux_formulario_1.STORAGE_STATE_NAME);
113
- //history.replaceState(null, null, location.origin+location.pathname+my.menuSeparator+'i=gestionar,pedido');
114
- //my.showPage();
115
- };
116
- my.tableGrid('pedidos', myDiv, {});
117
- };
118
- var validateHexaColor = (string) => /^#[0-9A-F]{6}$/i.test(string);
119
- myOwn.clientSides.parsearColor = {
120
- update: (depot, fieldName) => {
121
- var myColor = depot.rowControls['color'].getTypedValue();
122
- var isValidColor = validateHexaColor(myColor);
123
- if (myColor && !isValidColor) {
124
- alertPromise("color inválido!");
125
- depot.rowControls['color'].setTypedValue(null, true);
126
- }
127
- var colorInput = js_to_html_1.html.input({ type: "color", value: isValidColor ? myColor : '#ffffff' }).create();
128
- colorInput.onchange = () => {
129
- depot.rowControls['color'].setTypedValue(colorInput.value, true);
130
- };
131
- depot.rowControls[fieldName].innerHTML = '';
132
- depot.rowControls[fieldName].appendChild(colorInput);
133
- },
134
- prepare: (depot, fieldName) => { }
135
- };
136
- my.clientSides.clonarProducto = {
137
- update: false,
138
- prepare: function (depot, fieldName) {
139
- var { producto, nombre } = depot.row;
140
- var td = depot.rowControls[fieldName];
141
- var boton = js_to_html_1.html.button({}, 'clonar').create();
142
- td.appendChild(boton);
143
- td.onclick = async function () {
144
- await confirmPromise(`confirma clonado de producto (${producto}) "${nombre}"?`);
145
- var result = await my.ajax.producto_clonar({
146
- producto,
147
- });
148
- var newDepot = depot.manager.createRowInsertElements(depot);
149
- newDepot.manager.depotRefresh(newDepot, { updatedRow: result.productoNuevo, sendedForUpdate: {} });
150
- newDepot.manager.retrieveRowAndRefresh(newDepot);
151
- };
152
- },
153
- };
154
- myOwn.autoSetupFunctions.push(function autoSetupMyTables() {
155
- TypedControls.showLupa = false;
156
- });
157
- });
158
- //EJEMPLO GUARDAR
159
- //my.clientSides.guardar = {
160
- // update: false,
161
- // prepare: function (depot, fieldName) {
162
- // var td = depot.rowControls[fieldName];
163
- // var boton = html.button({},'guardar').create();
164
- // td.appendChild(boton);
165
- // td.onclick=async function(){
166
- // var pkValues = {};
167
- // pkValues['codigo']=depot.rowControls['codigo'].getTypedValue();
168
- // var result = await my.ajax.object_get({
169
- // tablename: 'clientes',
170
- // pk_values: pkValues,
171
- // });
172
- // result.cuit_dni = '12345678';
173
- // result.mail = 'manuel@123.com';
174
- // var result2 = await my.ajax.object_save({
175
- // tablename: 'clientes',
176
- // datos: result,
177
- // });
178
- // console.log(result2);
179
- // }
180
- // },
181
- //}
182
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NsaWVudC9jbGllbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7SUFBQSwyQ0FBeUM7SUFDekMsK0JBQStCO0lBQy9CLGdEQUFnRDtJQUVoRCx5REFBd0Q7SUFHeEQsSUFBSSxFQUFFLEdBQUMsS0FBSyxDQUFDO0lBRWIsS0FBSyxDQUFDLFFBQVEsQ0FBQyxPQUFPLEdBQUMsVUFBUyxXQUFXO1FBQ3ZDLElBQUksVUFBVSxHQUFHLFFBQVEsQ0FBQyxjQUFjLENBQUMsYUFBYSxDQUFFLENBQUM7UUFDekQsVUFBVSxDQUFDLFdBQVcsQ0FBQyxpQkFBSSxDQUFDLEVBQUUsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7UUFDL0QsQ0FBQyxVQUFVLEVBQUUsWUFBWSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsT0FBYyxFQUFDLEVBQUU7WUFDakQsVUFBVSxDQUFDLFdBQVcsQ0FBQyxpQkFBSSxDQUFDLEVBQUUsQ0FBQyxXQUFXLE9BQU8sRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztZQUMvRCxJQUFJLEtBQUssR0FBRyxpQkFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ2hDLFVBQVUsQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDOUIsRUFBRSxDQUFDLFNBQVMsQ0FBQyxXQUFXLE9BQU8sRUFBRSxFQUFDLEtBQUssRUFBQyxFQUFFLENBQUMsQ0FBQztRQUNoRCxDQUFDLENBQUMsQ0FBQTtJQUNOLENBQUMsQ0FBQztJQUVGLEVBQUUsQ0FBQyxXQUFXLENBQUMsVUFBVSxHQUFHO1FBQ3hCLE1BQU0sRUFBRSxLQUFLO1FBQ2IsT0FBTyxFQUFFLFVBQVUsS0FBSyxFQUFFLFNBQVM7WUFDL0IsSUFBSSxFQUFFLEdBQUcsS0FBSyxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMs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QU8sQ0FBQyxZQUFZLENBQUMsUUFBUSxFQUFDLEVBQUMsVUFBVSxFQUFDLE1BQU0sQ0FBQyxhQUFhLEVBQUUsZUFBZSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUM7Z0JBQzlGLFFBQVEsQ0FBQyxPQUFPLENBQUMscUJBQXFCLENBQUMsUUFBUSxDQUFDLENBQUE7WUFDcEQsQ0FBQyxDQUFDO1FBQ04sQ0FBQztLQUNKLENBQUE7SUFFRCxLQUFLLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLFNBQVMsaUJBQWlCO1FBQ3BELGFBQWEsQ0FBQyxRQUFRLEdBQUMsS0FBSyxDQUFDO0lBQ2pDLENBQUMsQ0FBQyxDQUFDOztBQUVILGlCQUFpQjtBQUNqQiw0QkFBNEI7QUFDNUIsb0JBQW9CO0FBQ3BCLDRDQUE0QztBQUM1QyxnREFBZ0Q7QUFDaEQseURBQXlEO0FBQ3pELGdDQUFnQztBQUNoQyxzQ0FBc0M7QUFDdEMsZ0NBQWdDO0FBQ2hDLDZFQUE2RTtBQUM3RSxxREFBcUQ7QUFDckQsd0NBQXdDO0FBQ3hDLHNDQUFzQztBQUN0QyxpQkFBaUI7QUFDakIsMkNBQTJDO0FBQzNDLDZDQUE2QztBQUM3Qyx1REFBdUQ7QUFDdkQsd0NBQXdDO0FBQ3hDLGdDQUFnQztBQUNoQyxpQkFBaUI7QUFDakIsbUNBQW1DO0FBQ25DLFdBQVc7QUFDWCxRQUFRO0FBQ1IsR0FBRyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7aHRtbCwgSHRtbFRhZ30gZnJvbSBcImpzLXRvLWh0bWxcIjtcclxuaW1wb3J0ICogYXMgbXlPd24gZnJvbSBcIm15T3duXCI7XHJcbmltcG9ydCAqIGFzIFR5cGVkQ29udHJvbHMgZnJvbSBcInR5cGVkLWNvbnRyb2xzXCI7XHJcbmltcG9ydCAqIGFzIGxpa2VBciBmcm9tIFwibGlrZS1hclwiO1xyXG5pbXBvcnQgeyBTVE9SQUdFX1NUQVRFX05BTUUgfSBmcm9tIFwiLi9yZWR1eC1mb3JtdWxhcmlvXCI7XHJcbmltcG9ydCB7IEJ1dHRvbiB9IGZyb20gXCJAbWF0ZXJpYWwtdWkvY29yZVwiO1xyXG5cclxudmFyIG15PW15T3duO1xyXG5cclxubXlPd24ud1NjcmVlbnMudGFibGVybz1mdW5jdGlvbihfYWRkclBhcmFtcyl7XHJcbiAgICB2YXIgbWFpbkxheW91dCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtYWluX2xheW91dCcpITtcclxuICAgIG1haW5MYXlvdXQuYXBwZW5kQ2hpbGQoaHRtbC5oMShgVGFibGVybyBkZSBjb250cm9sYCkuY3JlYXRlKCkpO1xyXG4gICAgWyd2ZW5jaWRvcycsICdwZW5kaWVudGVzJ10uZm9yRWFjaCgoZWxlbWVudDpzdHJpbmcpPT57XHJcbiAgICAgICAgbWFpbkxheW91dC5hcHBlbmRDaGlsZChodG1sLmgyKGBQZWRpZG9zICR7ZWxlbWVudH1gKS5jcmVhdGUoKSk7XHJcbiAgICAgICAgdmFyIG15RGl2ID0gaHRtbC5kaXYoKS5jcmVhdGUoKTtcclxuICAgICAgICBtYWluTGF5b3V0LmFwcGVuZENoaWxkKG15RGl2KTtcclxuICAgICAgICBteS50YWJsZUdyaWQoYHBlZGlkb3NfJHtlbGVtZW50fWAsbXlEaXYse30pO1xyXG4gICAgfSlcclxufTtcclxuXHJcbm15LmNsaWVudFNpZGVzLnZlckNsaWVudGUgPSB7XHJcbiAgICB1cGRhdGU6IGZhbHNlLFxyXG4gICAgcHJlcGFyZTogZnVuY3Rpb24gKGRlcG90LCBmaWVsZE5hbWUpIHtcclxuICAgICAgICB2YXIgdGQgPSBkZXBvdC5yb3dDb250cm9sc1tmaWVsZE5hbWVdO1xyXG4gICAgICAgIHZhciBib3RvbiA9IGh0bWwuYnV0dG9uKHt9LCd2ZXInKS5jcmVhdGUoKTtcclxuICAgICAgICB0ZC5hcHBlbmRDaGlsZChib3Rvbik7XHJcbiAgICAgICAgdGQub25jbGljaz1hc3luYyBmdW5jdGlvbigpe1xyXG4gICAgICAgICAgICBkZXNwbGVnYXJDbGllbnRlKGRlcG90KTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG59XHJcblxyXG5mdW5jdGlvbiBjb2xvcmVhckVzdGFkbyhkZXBvdCxwZWRpZG9PcHJlc3VwdWVzdG9TdHJpbmc6J3BlZGlkbyd8J3ByZXN1cHVlc3RvJyApe1xyXG4gICAgZGVwb3Qucm93Q29udHJvbHNbJ2VzdGFkbyddLnN0eWxlLmJhY2tncm91bmRDb2xvcj1kZXBvdC5yb3dDb250cm9sc1tgZXN0YWRvc18ke3BlZGlkb09wcmVzdXB1ZXN0b1N0cmluZ31fX2NvbG9yYF0uZ2V0VHlwZWRWYWx1ZSgpO1xyXG59XHJcblxyXG5teS5jbGllbnRTaWRlcy5hY2Npb25lc1ByZXN1cHVlc3RvID0ge1xyXG4gICAgcHJlcGFyZTogKCk9Pm51bGwsXHJcbiAgICB1cGRhdGU6IGZ1bmN0aW9uIChkZXBvdCwgZmllbGROYW1lKSB7XHJcbiAgICAgICAgbGV0IHRkID0gZGVwb3Qucm93Q29udHJvbHNbZmllbGROYW1lXTtcclxuICAgICAgICB0ZC5pbm5lckhUTUw9Jyc7XHJcbiAgICAgICAgY29sb3JlYXJFc3RhZG8oZGVwb3QsICdwcmVzdXB1ZXN0bycpO1xyXG4gICAgICAgIGxldCB0ZCA9IGRlcG90LnJvd0NvbnRyb2xzW2ZpZWxkTmFtZV07XHJcbiAgICAgICAgbGV0IGJvdG9uID0gbXkuY3JlYXRlRm9ya2VhYmxlQnV0dG9uKHttZW51VHlwZToncHJlc3VwdWVzdG8nLCBuYW1lOmBnZXN0aW9uYXIscHJlc3VwdWVzdG9gICwgbGFiZWw6XCJhYnJpclwifSwge30pO1xyXG4gICAgICAgIGJvdG9uLmhyZWYgPSBib3Rvbi5ocmVmICsgJyYnKyAncHJlc3VwdWVzdG8nKyc9JytkZXBvdC5yb3cucHJlc3VwdWVzdG8udG9TdHJpbmcoKVxyXG4gICAgICAgIHRkLmFwcGVuZENoaWxkKGJvdG9uKTtcclxuICAgICAgICBsZXQgcHVlZGVFZGl0YXJQcmVzdXB1ZXN0byA9IGRlcG90LnJvd0NvbnRyb2xzWydlc3RhZG9zX3ByZXN1cHVlc3RvX19wZXJtaXRlX2VkaXRhciddLmdldFR5cGVkVmFsdWUoKTtcclxuICAgICAgICBpZihwdWVkZUVkaXRhclByZXN1cHVlc3RvKXtcclxuICAgICAgICAgICAgbGV0IGJvdG9uID0gbXkuY3JlYXRlRm9ya2VhYmxlQnV0dG9uKHttZW51VHlwZToncGVkaWRvJywgbmFtZTonZ2VzdGlvbmFyLHBlZGlkbycsIGxhYmVsOlwiYWNlcHRhclwifSwge30pO1xyXG4gICAgICAgICAgICBib3Rvbi5ocmVmID0gYm90b24uaHJlZiArICcmcHJlc3VwdWVzdG89JytkZXBvdC5yb3dbJ3ByZXN1cHVlc3RvJ10udG9TdHJpbmcoKVxyXG4gICAgICAgICAgICB0ZC5hcHBlbmRDaGlsZChib3Rvbik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxldCBwcmVzdXB1ZXN0byA9IGRlcG90LnJvd0NvbnRyb2xzWydwcmVzdXB1ZXN0byddLmdldFR5cGVkVmFsdWUoKTtcclxuICAgICAgICBbJ2FudWxhcicsICdyZWNoYXphciddLmZvckVhY2goKGFjY2lvbik9PntcclxuICAgICAgICAgICAgaWYocHVlZGVFZGl0YXJQcmVzdXB1ZXN0byl7XHJcbiAgICAgICAgICAgICAgICBsZXQgYm90b24gPSBodG1sLmJ1dHRvbih7fSxhY2Npb24pLmNyZWF0ZSgpO1xyXG4gICAgICAgICAgICAgICAgYm90b24ub25jbGljayA9IGFzeW5jICgpPT57XHJcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgY29uZmlybVByb21pc2UoYMK/ZXN0w6EgcG9yICR7YWNjaW9ufSBlbCBwcmVzdXB1ZXN0bz8gRXN0YSBhY2Npw7NuIG5vIHNlIHBvZHLDoSBkZXNoYWNlcmApO1xyXG4gICAgICAgICAgICAgICAgICAgIHRyeXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgbXkuYWpheFtgcHJlc3VwdWVzdG9fJHthY2Npb259YF0oe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJlc3VwdWVzdG9cclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfWNhdGNoKGVycil7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFsZXJ0UHJvbWlzZShlcnIubWVzc2FnZSlcclxuICAgICAgICAgICAgICAgICAgICB9ZmluYWxseXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGdyaWQ9ZGVwb3QubWFuYWdlcjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgZ3JpZC5yZXRyaWV2ZVJvd0FuZFJlZnJlc2goZGVwb3QpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICB0ZC5hcHBlbmRDaGlsZChib3Rvbik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG4gICAgfSxcclxufVxyXG5cclxubXkuY2xpZW50U2lkZXMuYWNjaW9uZXNQZWRpZG8gPSB7XHJcbiAgICBwcmVwYXJlOiAoKT0+bnVsbCxcclxuICAgIHVwZGF0ZTogZnVuY3Rpb24gKGRlcG90LCBmaWVsZE5hbWUpIHtcclxuICAgICAgICBsZXQgdGQgPSBkZXBvdC5yb3dDb250cm9sc1tmaWVsZE5hbWVdO1xyXG4gICAgICAgIHRkLmlubmVySFRNTD0nJztcclxuICAgICAgICBjb2xvcmVhckVzdGFkbyhkZXBvdCwgJ3BlZGlkbycpO1xyXG4gICAgICAgIGxldCB0ZCA9IGRlcG90LnJvd0NvbnRyb2xzW2ZpZWxkTmFtZV07XHJcbiAgICAgICAgbGV0IGJvdG9uID0gbXkuY3JlYXRlRm9ya2VhYmxlQnV0dG9uKHttZW51VHlwZToncGVkaWRvJywgbmFtZTpgZ2VzdGlvbmFyLHBlZGlkb2AgLCBsYWJlbDpcImFicmlyXCJ9LCB7fSk7XHJcbiAgICAgICAgYm90b24uaHJlZiA9IGJvdG9uLmhyZWYgKyAnJicrICdwZWRpZG8nKyc9JytkZXBvdC5yb3cucGVkaWRvLnRvU3RyaW5nKClcclxuICAgICAgICB0ZC5hcHBlbmRDaGlsZChib3Rvbik7XHJcbiAgICB9XHJcbn1cclxuXHJcbm15T3duLndTY3JlZW5zLnByZXN1cHVlc3Rvcz1mdW5jdGlvbihfYWRkclBhcmFtcyl7XHJcbiAgICB2YXIgbWFpbkxheW91dCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtYWluX2xheW91dCcpITtcclxuICAgIHZhciBteURpdiA9IGh0bWwuZGl2KCkuY3JlYXRlKCk7XHJcbiAgICBsZXQgYm90b24gPSBteS5jcmVhdGVGb3JrZWFibGVCdXR0b24oe21lbnVUeXBlOidwcmVzdXB1ZXN0bycsIG5hbWU6J2dlc3Rpb25hcixwcmVzdXB1ZXN0bycsIGxhYmVsOidudWV2byd9LHt9KTtcclxuICAgIG1haW5MYXlvdXQuYXBwZW5kQ2hpbGQoYm90b24pO1xyXG4gICAgbWFpbkxheW91dC5hcHBlbmRDaGlsZChteURpdik7XHJcbiAgICBib3Rvbi5vbmNsaWNrPWFzeW5jIGZ1bmN0aW9uKCl7XHJcbiAgICAgICAgbXkucmVtb3ZlU2Vzc2lvblZhcihTVE9SQUdFX1NUQVRFX05BTUUpO1xyXG4gICAgfVxyXG4gICAgbXkudGFibGVHcmlkKCdwcmVzdXB1ZXN0b3MnLG15RGl2LHt9KTtcclxufTtcclxuXHJcbm15T3duLndTY3JlZW5zLnBlZGlkb3M9ZnVuY3Rpb24oX2FkZHJQYXJhbXMpe1xyXG4gICAgdmFyIG1haW5MYXlvdXQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbWFpbl9sYXlvdXQnKSE7XHJcbiAgICB2YXIgbXlEaXYgPSBodG1sLmRpdigpLmNyZWF0ZSgpO1xyXG4gICAgbGV0IGJvdG9uID0gbXkuY3JlYXRlRm9ya2VhYmxlQnV0dG9uKHttZW51VHlwZToncGVkaWRvJywgbmFtZTonZ2VzdGlvbmFyLHBlZGlkbycsIGxhYmVsOidudWV2byd9LHt9KTtcclxuICAgIC8vdmFyIGJvdG9uID0gaHRtbC5idXR0b24oe30sJ251ZXZvJykuY3JlYXRlKCk7XHJcbiAgICBtYWluTGF5b3V0LmFwcGVuZENoaWxkKGJvdG9uKTtcclxuICAgIG1haW5MYXlvdXQuYXBwZW5kQ2hpbGQobXlEaXYpO1xyXG4gICAgYm90b24ub25jbGljaz1hc3luYyBmdW5jdGlvbigpe1xyXG4gICAgICAgIG15LnJlbW92ZVNlc3Npb25WYXIoU1RPUkFHRV9TVEFURV9OQU1FKTtcclxuICAgICAgICAvL2hpc3RvcnkucmVwbGFjZVN0YXRlKG51bGwsIG51bGwsIGxvY2F0aW9uLm9yaWdpbitsb2NhdGlvbi5wYXRobmFtZStteS5tZW51U2VwYXJhdG9yKydpPWdlc3Rpb25hcixwZWRpZG8nKTtcclxuICAgICAgICAvL215LnNob3dQYWdlKCk7XHJcbiAgICB9XHJcbiAgICBteS50YWJsZUdyaWQoJ3BlZGlkb3MnLG15RGl2LHt9KTtcclxufTtcclxuXHJcbnZhciB2YWxpZGF0ZUhleGFDb2xvcj0oc3RyaW5nOnN0cmluZyk9PiAvXiNbMC05QS1GXXs2fSQvaS50ZXN0KHN0cmluZyk7XHJcblxyXG5teU93bi5jbGllbnRTaWRlcy5wYXJzZWFyQ29sb3I9e1xyXG4gICAgdXBkYXRlOiAoZGVwb3QsIGZpZWxkTmFtZSk9PntcclxuICAgICAgICB2YXIgbXlDb2xvciA9IGRlcG90LnJvd0NvbnRyb2xzWydjb2xvciddLmdldFR5cGVkVmFsdWUoKTtcclxuICAgICAgICB2YXIgaXNWYWxpZENvbG9yPXZhbGlkYXRlSGV4YUNvbG9yKG15Q29sb3IpO1xyXG4gICAgICAgIGlmKG15Q29sb3IgJiYgIWlzVmFsaWRDb2xvcil7XHJcbiAgICAgICAgICAgIGFsZXJ0UHJvbWlzZShcImNvbG9yIGludsOhbGlkbyFcIik7XHJcbiAgICAgICAgICAgIGRlcG90LnJvd0NvbnRyb2xzWydjb2xvciddLnNldFR5cGVkVmFsdWUobnVsbCwgdHJ1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciBjb2xvcklucHV0ID0gaHRtbC5pbnB1dCh7dHlwZTpcImNvbG9yXCIsIHZhbHVlOmlzVmFsaWRDb2xvcj9teUNvbG9yOicjZmZmZmZmJ30pLmNyZWF0ZSgpO1xyXG4gICAgICAgIGNvbG9ySW5wdXQub25jaGFuZ2U9KCk9PntcclxuICAgICAgICAgICAgZGVwb3Qucm93Q29udHJvbHNbJ2NvbG9yJ10uc2V0VHlwZWRWYWx1ZShjb2xvcklucHV0LnZhbHVlLCB0cnVlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZGVwb3Qucm93Q29udHJvbHNbZmllbGROYW1lXS5pbm5lckhUTUw9Jyc7XHJcbiAgICAgICAgZGVwb3Qucm93Q29udHJvbHNbZmllbGROYW1lXS5hcHBlbmRDaGlsZChjb2xvcklucHV0KTtcclxuICAgIH0sXHJcbiAgICBwcmVwYXJlOiAoZGVwb3QsIGZpZWxkTmFtZSk9Pnt9XHJcbn1cclxuXHJcbm15LmNsaWVudFNpZGVzLmNsb25hclByb2R1Y3RvID0ge1xyXG4gICAgdXBkYXRlOiBmYWxzZSxcclxuICAgIHByZXBhcmU6IGZ1bmN0aW9uIChkZXBvdCwgZmllbGROYW1lKSB7XHJcbiAgICAgICAgdmFyIHtwcm9kdWN0bywgbm9tYnJlfSA9IGRlcG90LnJvdztcclxuICAgICAgICB2YXIgdGQgPSBkZXBvdC5yb3dDb250cm9sc1tmaWVsZE5hbWVdO1xyXG4gICAgICAgIHZhciBib3RvbiA9IGh0bWwuYnV0dG9uKHt9LCdjbG9uYXInKS5jcmVhdGUoKTtcclxuICAgICAgICB0ZC5hcHBlbmRDaGlsZChib3Rvbik7XHJcbiAgICAgICAgdGQub25jbGljaz1hc3luYyBmdW5jdGlvbigpe1xyXG4gICAgICAgICAgICBhd2FpdCBjb25maXJtUHJvbWlzZShgY29uZmlybWEgY2xvbmFkbyBkZSBwcm9kdWN0byAoJHtwcm9kdWN0b30pIFwiJHtub21icmV9XCI/YCk7XHJcbiAgICAgICAgICAgIHZhciByZXN1bHQgPSBhd2FpdCBteS5hamF4LnByb2R1Y3RvX2Nsb25hcih7XHJcbiAgICAgICAgICAgICAgICBwcm9kdWN0byxcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIHZhciBuZXdEZXBvdCA9IGRlcG90Lm1hbmFnZXIuY3JlYXRlUm93SW5zZXJ0RWxlbWVudHMoZGVwb3QpO1xyXG4gICAgICAgICAgICBuZXdEZXBvdC5tYW5hZ2VyLmRlcG90UmVmcmVzaChuZXdEZXBvdCx7dXBkYXRlZFJvdzpyZXN1bHQucHJvZHVjdG9OdWV2bywgc2VuZGVkRm9yVXBkYXRlOnt9fSk7XHJcbiAgICAgICAgICAgIG5ld0RlcG90Lm1hbmFnZXIucmV0cmlldmVSb3dBbmRSZWZyZXNoKG5ld0RlcG90KSAgICAgICAgXHJcbiAgICAgICAgfTtcclxuICAgIH0sXHJcbn1cclxuXHJcbm15T3duLmF1dG9TZXR1cEZ1bmN0aW9ucy5wdXNoKGZ1bmN0aW9uIGF1dG9TZXR1cE15VGFibGVzKCl7XHJcbiAgICBUeXBlZENvbnRyb2xzLnNob3dMdXBhPWZhbHNlO1xyXG59KTtcclxuXHJcbi8vRUpFTVBMTyBHVUFSREFSXHJcbi8vbXkuY2xpZW50U2lkZXMuZ3VhcmRhciA9IHtcclxuLy8gICAgdXBkYXRlOiBmYWxzZSxcclxuLy8gICAgcHJlcGFyZTogZnVuY3Rpb24gKGRlcG90LCBmaWVsZE5hbWUpIHtcclxuLy8gICAgICAgIHZhciB0ZCA9IGRlcG90LnJvd0NvbnRyb2xzW2ZpZWxkTmFtZV07XHJcbi8vICAgICAgICB2YXIgYm90b24gPSBodG1sLmJ1dHRvbih7fSwnZ3VhcmRhcicpLmNyZWF0ZSgpO1xyXG4vLyAgICAgICAgdGQuYXBwZW5kQ2hpbGQoYm90b24pO1xyXG4vLyAgICAgICAgdGQub25jbGljaz1hc3luYyBmdW5jdGlvbigpe1xyXG4vLyAgICAgICAgICAgIHZhciBwa1ZhbHVlcyA9IHt9O1xyXG4vLyAgICAgICAgICAgIHBrVmFsdWVzWydjb2RpZ28nXT1kZXBvdC5yb3dDb250cm9sc1snY29kaWdvJ10uZ2V0VHlwZWRWYWx1ZSgpO1xyXG4vLyAgICAgICAgICAgIHZhciByZXN1bHQgPSBhd2FpdCBteS5hamF4Lm9iamVjdF9nZXQoe1xyXG4vLyAgICAgICAgICAgICAgICB0YWJsZW5hbWU6ICdjbGllbnRlcycsXHJcbi8vICAgICAgICAgICAgICAgIHBrX3ZhbHVlczogcGtWYWx1ZXMsXHJcbi8vICAgICAgICAgICAgfSk7XHJcbi8vICAgICAgICAgICAgcmVzdWx0LmN1aXRfZG5pID0gJzEyMzQ1Njc4JztcclxuLy8gICAgICAgICAgICByZXN1bHQubWFpbCA9ICdtYW51ZWxAMTIzLmNvbSc7XHJcbi8vICAgICAgICAgICAgdmFyIHJlc3VsdDIgPSBhd2FpdCBteS5hamF4Lm9iamVjdF9zYXZlKHtcclxuLy8gICAgICAgICAgICAgICAgdGFibGVuYW1lOiAnY2xpZW50ZXMnLFxyXG4vLyAgICAgICAgICAgICAgICBkYXRvczogcmVzdWx0LFxyXG4vLyAgICAgICAgICAgIH0pO1xyXG4vLyAgICAgICAgICAgIGNvbnNvbGUubG9nKHJlc3VsdDIpO1xyXG4vLyAgICAgICAgfVxyXG4vLyAgICB9LFxyXG4vL30iXX0=
@@ -1,326 +0,0 @@
1
- (function (factory) {
2
- if (typeof module === "object" && typeof module.exports === "object") {
3
- var v = factory(require, exports);
4
- if (v !== undefined) module.exports = v;
5
- }
6
- else if (typeof define === "function" && define.amd) {
7
- define(["require", "exports", "redux", "redux-typed-reducer", "best-globals"], factory);
8
- }
9
- })(function (require, exports) {
10
- "use strict";
11
- Object.defineProperty(exports, "__esModule", { value: true });
12
- exports.inicializarPedido = exports.dispatchers = exports.STORAGE_STATE_NAME = void 0;
13
- exports.crearItem = crearItem;
14
- exports.calcularTotalLinea = calcularTotalLinea;
15
- exports.calcularTotales = calcularTotales;
16
- exports.traerEstructura = traerEstructura;
17
- exports.guardarPresupuesto = guardarPresupuesto;
18
- exports.guardarPedido = guardarPedido;
19
- exports.createInitialStatePresupuesto = createInitialStatePresupuesto;
20
- exports.createInitialStatePedido = createInitialStatePedido;
21
- exports.crearStore = crearStore;
22
- const redux_1 = require("redux");
23
- const redux_typed_reducer_1 = require("redux-typed-reducer");
24
- const best_globals_1 = require("best-globals");
25
- const ESTADO_INICIAL_PEDIDO = "preparacion";
26
- var my = myOwn;
27
- exports.STORAGE_STATE_NAME = 'contable_state';
28
- function crearItem() {
29
- return {
30
- cantidad: 1,
31
- descuento: 0
32
- };
33
- }
34
- function calcularTotalLinea(item) {
35
- if (item.cantidad && item.precio_unitario) {
36
- let subtotal = item.cantidad * item.precio_unitario;
37
- let descuento = parseFloat((item.porcentaje_descuento ? subtotal / 100 * item.porcentaje_descuento : 0).toFixed(2));
38
- let total = parseFloat((subtotal - descuento).toFixed(2));
39
- return { descuento, total };
40
- }
41
- else {
42
- return { descuento: undefined, total: undefined };
43
- }
44
- }
45
- function calcularTotales(items, datos, datosDesde) {
46
- let pedidoOpresupuestoIndex = datosDesde == "datosPedido" ? 'pedido' : 'presupuesto';
47
- //@ts-ignore estoy seguro que llega bien
48
- let pedidoOpresupuesto = datos[pedidoOpresupuestoIndex];
49
- pedidoOpresupuesto.subtotal = items.reduce((acum, item) => acum + (item.total || 0), 0);
50
- pedidoOpresupuesto.descuento = pedidoOpresupuesto.descuento || 0;
51
- pedidoOpresupuesto.total = pedidoOpresupuesto.subtotal - (pedidoOpresupuesto.descuento || 0);
52
- }
53
- var reducers = {
54
- SET_OPCION: (payload) => function (state) {
55
- return {
56
- ...state,
57
- opciones: {
58
- ...state.opciones,
59
- [payload.opcion]: payload.valor
60
- }
61
- };
62
- },
63
- SET_CLIENTE: (payload) => function (state) {
64
- return {
65
- ...state,
66
- [payload.datosDesde]: {
67
- ...state[payload.datosDesde],
68
- cliente: payload.cliente
69
- }
70
- };
71
- },
72
- ADD_ITEM: (payload) => function (state) {
73
- var items = state[payload.datosDesde].items;
74
- items.push(crearItem());
75
- calcularTotales(items, state[payload.datosDesde], payload.datosDesde);
76
- return {
77
- ...state,
78
- [payload.datosDesde]: {
79
- ...state[payload.datosDesde],
80
- items: items
81
- }
82
- };
83
- },
84
- REMOVE_ITEM: (payload) => function (state) {
85
- var items = state[payload.datosDesde].items;
86
- items.splice(payload.index, 1);
87
- calcularTotales(items, state[payload.datosDesde], payload.datosDesde);
88
- if (items.length == 0) {
89
- items.push(crearItem());
90
- }
91
- return {
92
- ...state,
93
- [payload.datosDesde]: {
94
- ...state[payload.datosDesde],
95
- items: items
96
- }
97
- };
98
- },
99
- SET_PRODUCTO_ITEM: (payload) => function (state) {
100
- let { index, producto } = payload;
101
- let items = state[payload.datosDesde].items;
102
- items[index].producto = producto ? producto.producto : undefined;
103
- items[index].nombre = producto ? producto.nombre : undefined;
104
- items[index].descripcion = producto ? producto.descripcion : undefined;
105
- items[index].precio_unitario = producto ? producto.precio : undefined;
106
- let { descuento, total } = calcularTotalLinea(items[index]);
107
- items[index].descuento = descuento;
108
- items[index].total = total;
109
- calcularTotales(items, state[payload.datosDesde], payload.datosDesde);
110
- return {
111
- ...state,
112
- [payload.datosDesde]: {
113
- ...state[payload.datosDesde],
114
- items: items
115
- }
116
- };
117
- },
118
- SET_FIELD_CUSTOM_ITEM: (payload) => function (state) {
119
- let { index, campo, valor } = payload;
120
- let items = state[payload.datosDesde].items;
121
- // @ts-ignore sé que el indice y el campo existen
122
- items[index][campo] = valor;
123
- let { descuento, total } = calcularTotalLinea(items[index]);
124
- items[index].descuento = descuento;
125
- items[index].total = total;
126
- calcularTotales(items, state[payload.datosDesde], payload.datosDesde);
127
- return {
128
- ...state,
129
- [payload.datosDesde]: {
130
- ...state[payload.datosDesde],
131
- items: items
132
- }
133
- };
134
- },
135
- SET_CANTIDAD_ITEM: (payload) => function (state) {
136
- let { index, cantidad } = payload;
137
- let items = state[payload.datosDesde].items;
138
- items[index].cantidad = cantidad || undefined;
139
- let { descuento, total } = calcularTotalLinea(items[index]);
140
- items[index].descuento = descuento;
141
- items[index].total = total;
142
- calcularTotales(items, state[payload.datosDesde], payload.datosDesde);
143
- return {
144
- ...state,
145
- [payload.datosDesde]: {
146
- ...state[payload.datosDesde],
147
- items: items
148
- }
149
- };
150
- },
151
- SET_DESCUENTO_ITEM: (payload) => function (state) {
152
- let { index, porcentaje } = payload;
153
- let items = state[payload.datosDesde].items;
154
- items[index].porcentaje_descuento = porcentaje;
155
- let { descuento, total } = calcularTotalLinea(items[index]);
156
- items[index].descuento = descuento;
157
- items[index].total = total;
158
- calcularTotales(items, state[payload.datosDesde], payload.datosDesde);
159
- return {
160
- ...state,
161
- [payload.datosDesde]: {
162
- ...state[payload.datosDesde],
163
- items: items
164
- }
165
- };
166
- },
167
- SET_DESCUENTO_PRESUPUESTO: (payload) => function (state) {
168
- var { descuento } = payload;
169
- var items = state.datosPresupuesto.items;
170
- var myState = {
171
- ...state,
172
- datosPresupuesto: {
173
- ...state.datosPresupuesto,
174
- presupuesto: {
175
- ...state.datosPresupuesto.presupuesto,
176
- descuento: descuento
177
- }
178
- }
179
- };
180
- calcularTotales(items, myState.datosPresupuesto, 'datosPresupuesto');
181
- return myState;
182
- },
183
- SET_DESCUENTO_PEDIDO: (payload) => function (state) {
184
- var { descuento } = payload;
185
- var items = state.datosPedido.items;
186
- var myState = {
187
- ...state,
188
- datosPedido: {
189
- ...state.datosPedido,
190
- pedido: {
191
- ...state.datosPedido.pedido,
192
- descuento: descuento
193
- }
194
- }
195
- };
196
- calcularTotales(items, myState.datosPedido, 'datosPedido');
197
- return myState;
198
- },
199
- SET_CAMPO_PRESUPUESTO: (payload) => function (state) {
200
- var { campo, valor } = payload;
201
- return {
202
- ...state,
203
- datosPresupuesto: {
204
- ...state.datosPresupuesto,
205
- presupuesto: {
206
- ...state.datosPresupuesto.presupuesto,
207
- [campo]: valor
208
- }
209
- }
210
- };
211
- },
212
- SET_CAMPO_PEDIDO: (payload) => function (state) {
213
- var { campo, valor } = payload;
214
- return {
215
- ...state,
216
- datosPedido: {
217
- ...state.datosPedido,
218
- pedido: {
219
- ...state.datosPedido.pedido,
220
- [campo]: valor
221
- }
222
- }
223
- };
224
- },
225
- RESET_OPCIONES: (_payload) => function (state) {
226
- return {
227
- ...state,
228
- opciones: {
229
- ...state.opciones,
230
- }
231
- };
232
- },
233
- };
234
- /* FIN ACCIONES */
235
- exports.dispatchers = (0, redux_typed_reducer_1.createDispatchers)(reducers);
236
- async function traerEstructura() {
237
- var estructura = await my.ajax.estructura_crear();
238
- return estructura;
239
- }
240
- async function guardarPresupuesto(cliente, presupuesto, items) {
241
- return await my.ajax.presupuesto_guardar({ cliente, presupuesto, items });
242
- }
243
- async function guardarPedido(cliente, pedido, items) {
244
- return await my.ajax.pedido_guardar({ cliente, pedido, items });
245
- }
246
- async function createInitialStatePresupuesto() {
247
- var estructura = await traerEstructura();
248
- var initialState = {
249
- estructura,
250
- datosPresupuesto: {
251
- cliente: {},
252
- items: [crearItem()],
253
- presupuesto: {
254
- estado: "espera",
255
- fecha: best_globals_1.datetime.now().toYmd(),
256
- //@ts-ignore se puede llamar
257
- valido_hasta: (best_globals_1.datetime.now().add((0, best_globals_1.timeInterval)({ days: 7 }))).toYmd(),
258
- }
259
- },
260
- opciones: {},
261
- };
262
- return initialState;
263
- }
264
- const inicializarPedido = () => {
265
- return {
266
- estado: ESTADO_INICIAL_PEDIDO,
267
- fecha: best_globals_1.datetime.now().toYmd(),
268
- //@ts-ignore se puede llamar
269
- fecha_entrega: (best_globals_1.datetime.now().add((0, best_globals_1.timeInterval)({ days: 7 }))).toYmd(),
270
- observaciones: null
271
- };
272
- };
273
- exports.inicializarPedido = inicializarPedido;
274
- async function createInitialStatePedido() {
275
- var estructura = await traerEstructura();
276
- var initialState = {
277
- estructura,
278
- datosPedido: {
279
- cliente: {},
280
- items: [crearItem()],
281
- pedido: (0, exports.inicializarPedido)()
282
- },
283
- opciones: {},
284
- };
285
- return initialState;
286
- }
287
- async function crearStore(opts, createInitialState) {
288
- opts.useSessionStorage = opts.useSessionStorage || false;
289
- var loadState = async function loadState() {
290
- var presupuestoState = opts.useSessionStorage ? my.getSessionVar(exports.STORAGE_STATE_NAME) : my.getLocalVar(exports.STORAGE_STATE_NAME);
291
- if (presupuestoState) {
292
- initialState = await createInitialState();
293
- presupuestoState = { ...initialState, ...presupuestoState };
294
- presupuestoState.estructura = { ...initialState.estructura };
295
- }
296
- else {
297
- var initialState = await createInitialState();
298
- presupuestoState = initialState;
299
- }
300
- if (opts.datosPresupuesto) {
301
- presupuestoState.datosPresupuesto = { ...presupuestoState.datosPresupuesto, ...opts.datosPresupuesto };
302
- }
303
- if (opts.datosPedido) {
304
- presupuestoState.datosPedido = { ...presupuestoState.datosPedido, ...opts.datosPedido };
305
- }
306
- return presupuestoState;
307
- };
308
- var saveState = function saveState(state) {
309
- opts.useSessionStorage ? my.setSessionVar(exports.STORAGE_STATE_NAME, state) : my.setLocalVar(exports.STORAGE_STATE_NAME, state);
310
- };
311
- /* DEFINICION CONTROLADOR */
312
- var initialState = await loadState();
313
- const reducer = (0, redux_typed_reducer_1.createReducer)(reducers, initialState);
314
- /* FIN DEFINICION CONTROLADOR */
315
- /* CARGA Y GUARDADO DE STATE */
316
- /* CREACION STORE */
317
- const store = (0, redux_1.createStore)(reducer, initialState);
318
- saveState(store.getState());
319
- store.subscribe(function () {
320
- saveState(store.getState());
321
- });
322
- /* FIN CREACION STORE */
323
- return store;
324
- }
325
- });
326
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVkdXgtZm9ybXVsYXJpby5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jbGllbnQvcmVkdXgtZm9ybXVsYXJpby50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7SUFlQSw4QkFLQztJQUVELGdEQVNDO0lBRUQsMENBT0M7SUEwTUQsMENBR0M7SUFFRCxnREFFQztJQUVELHNDQUVDO0lBRUQsc0VBaUJDO0lBWUQsNERBYUM7SUFFRCxnQ0EyQ0M7SUF0VkQsaUNBQW9DO0lBRXBDLDZEQUFvRjtJQUlwRiwrQ0FBMkQ7SUFHM0QsTUFBTSxxQkFBcUIsR0FBRyxhQUFhLENBQUM7SUFFNUMsSUFBSSxFQUFFLEdBQUMsS0FBSyxDQUFDO0lBRUEsUUFBQSxrQkFBa0IsR0FBRSxnQkFBZ0IsQ0FBQztJQUVsRCxTQUFnQixTQUFTO1FBQ3JCLE9BQU87WUFDSCxRQUFRLEVBQUMsQ0FBQztZQUNWLFNBQVMsRUFBQyxDQUFDO1NBQ2QsQ0FBQTtJQUNMLENBQUM7SUFFRCxTQUFnQixrQkFBa0IsQ0FBQyxJQUFTO1FBQ3hDLElBQUcsSUFBSSxDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUMsZUFBZSxFQUFDLENBQUM7WUFDdEMsSUFBSSxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsR0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDO1lBQ2xELElBQUksU0FBUyxHQUFHLFVBQVUsQ0FBQyxDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQSxDQUFDLENBQUEsUUFBUSxHQUFDLEdBQUcsR0FBQyxJQUFJLENBQUMsb0JBQW9CLENBQUEsQ0FBQyxDQUFBLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzVHLElBQUksS0FBSyxHQUFHLFVBQVUsQ0FBQyxDQUFDLFFBQVEsR0FBRyxTQUFTLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUMxRCxPQUFPLEVBQUMsU0FBUyxFQUFFLEtB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Q0FBQTtRQUNELElBQUksU0FBUyxHQUFHLFNBQVMsU0FBUyxDQUFDLEtBQVc7WUFDMUMsSUFBSSxDQUFDLGlCQUFpQixDQUFBLENBQUMsQ0FBQSxFQUFFLENBQUMsYUFBYSxDQUFDLDBCQUFrQixFQUFFLEtBQUssQ0FBQyxDQUFBLENBQUMsQ0FBQSxFQUFFLENBQUMsV0FBVyxDQUFDLDBCQUFrQixFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ2pILENBQUMsQ0FBQTtRQUNELDRCQUE0QjtRQUM1QixJQUFJLFlBQVksR0FBUyxNQUFNLFNBQVMsRUFBRSxDQUFDO1FBQzNDLE1BQU0sT0FBTyxHQUFHLElBQUEsbUNBQWEsRUFBQyxRQUFRLEVBQUUsWUFBWSxDQUFDLENBQUM7UUFDdEQsZ0NBQWdDO1FBQ2hDLCtCQUErQjtRQUMvQixvQkFBb0I7UUFDcEIsTUFBTSxLQUFLLEdBQUcsSUFBQSxtQkFBVyxFQUFDLE9BQU8sRUFBRSxZQUFZLENBQUMsQ0FBQztRQUNqRCxTQUFTLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7UUFDNUIsS0FBSyxDQUFDLFNBQVMsQ0FBQztZQUNaLFNBQVMsQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztRQUNoQyxDQUFDLENBQUMsQ0FBQztRQUNILHdCQUF3QjtRQUN4QixPQUFPLEtBQUssQ0FBQztJQUNqQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY3JlYXRlU3RvcmUgfSBmcm9tIFwicmVkdXhcIjtcclxuaW1wb3J0IHsgZGVlcEZyZWV6ZSB9IGZyb20gXCJiZXN0LWdsb2JhbHNcIjtcclxuaW1wb3J0IHsgY3JlYXRlUmVkdWNlciwgY3JlYXRlRGlzcGF0Y2hlcnMsIEFjdGlvbnNGcm9tIH0gZnJvbSBcInJlZHV4LXR5cGVkLXJlZHVjZXJcIjtcclxuaW1wb3J0IHtTdGF0ZSwgRXN0cnVjdHVyYSwgSXRlbSwgUHJlc3VwdWVzdG8sIERhdG9zUHJlc3VwdWVzdG8sIFBlZGlkbywgRGF0b3NQZWRpZG8sIERhdG9zRGVzZGV9IGZyb20gXCIuL3RpcG9zXCJcclxuaW1wb3J0ICogYXMgSlNPTjRhbGwgZnJvbSBcImpzb240YWxsXCI7XHJcbmltcG9ydCAqIGFzIGxpa2VBciBmcm9tIFwibGlrZS1hclwiO1xyXG5pbXBvcnQge2RhdGV0aW1lLCBkYXRlLCB0aW1lSW50ZXJ2YWwgfSBmcm9tICdiZXN0LWdsb2JhbHMnO1xyXG5pbXBvcnQgeyBDbGllbnRlLCBQcm9kdWN0bywgQ29uZGljaW9uSXZhIH0gZnJvbSBcIi4vdGlwb3NcIjtcclxuICAgIFxyXG5jb25zdCBFU1RBRE9fSU5JQ0lBTF9QRURJRE8gPSBcInByZXBhcmFjaW9uXCI7XHJcblxyXG52YXIgbXk9bXlPd247XHJcblxyXG5leHBvcnQgY29uc3QgU1RPUkFHRV9TVEFURV9OQU1FID0nY29udGFibGVfc3RhdGUnO1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGNyZWFySXRlbSgpOkl0ZW17XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIGNhbnRpZGFkOjEsXHJcbiAgICAgICAgZGVzY3VlbnRvOjBcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGNhbGN1bGFyVG90YWxMaW5lYShpdGVtOkl0ZW0pe1xyXG4gICAgaWYoaXRlbS5jYW50aWRhZCAmJiBpdGVtLnByZWNpb191bml0YXJpbyl7XHJcbiAgICAgICAgbGV0IHN1YnRvdGFsID0gaXRlbS5jYW50aWRhZCppdGVtLnByZWNpb191bml0YXJpbztcclxuICAgICAgICBsZXQgZGVzY3VlbnRvID0gcGFyc2VGbG9hdCgoaXRlbS5wb3JjZW50YWplX2Rlc2N1ZW50bz9zdWJ0b3RhbC8xMDAqaXRlbS5wb3JjZW50YWplX2Rlc2N1ZW50bzowKS50b0ZpeGVkKDIpKTtcclxuICAgICAgICBsZXQgdG90YWwgPSBwYXJzZUZsb2F0KChzdWJ0b3RhbCAtIGRlc2N1ZW50bykudG9GaXhlZCgyKSk7XHJcbiAgICAgICAgcmV0dXJuIHtkZXNjdWVudG8sIHRvdGFsfTtcclxuICAgIH1lbHNle1xyXG4gICAgICAgIHJldHVybiB7ZGVzY3VlbnRvOnVuZGVmaW5lZCwgdG90YWw6dW5kZWZpbmVkfVxyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gY2FsY3VsYXJUb3RhbGVzKGl0ZW1zOkl0ZW1bXSwgZGF0b3M6RGF0b3NQZWRpZG98RGF0b3NQcmVzdXB1ZXN0bywgZGF0b3NEZXNkZTpEYXRvc0Rlc2RlKTp2b2lke1xyXG4gICAgbGV0IHBlZGlkb09wcmVzdXB1ZXN0b0luZGV4OidwZWRpZG8nfCdwcmVzdXB1ZXN0byc9ZGF0b3NEZXNkZT09XCJkYXRvc1BlZGlkb1wiPydwZWRpZG8nOidwcmVzdXB1ZXN0byc7XHJcbiAgICAvL0B0cy1pZ25vcmUgZXN0b3kgc2VndXJvIHF1ZSBsbGVnYSBiaWVuXHJcbiAgICBsZXQgcGVkaWRvT3ByZXN1cHVlc3RvOlBlZGlkb3xQcmVzdXB1ZXN0bz1kYXRvc1twZWRpZG9PcHJlc3VwdWVzdG9JbmRleF07XHJcbiAgICBwZWRpZG9PcHJlc3VwdWVzdG8uc3VidG90YWw9aXRlbXMucmVkdWNlKChhY3VtLCBpdGVtKSA9PiBhY3VtICsgKGl0ZW0udG90YWwgfHwgMCksIDApO1xyXG4gICAgcGVkaWRvT3ByZXN1cHVlc3RvLmRlc2N1ZW50bz1wZWRpZG9PcHJlc3VwdWVzdG8uZGVzY3VlbnRvIHx8IDA7XHJcbiAgICBwZWRpZG9PcHJlc3VwdWVzdG8udG90YWw9cGVkaWRvT3ByZXN1cHVlc3RvLnN1YnRvdGFsLShwZWRpZG9PcHJlc3VwdWVzdG8uZGVzY3VlbnRvfHwwKTtcclxufVxyXG5cclxudmFyIHJlZHVjZXJzPXtcclxuICAgIFNFVF9PUENJT046IChwYXlsb2FkOiB7b3BjaW9uOmtleW9mIFN0YXRlWydvcGNpb25lcyddLCB2YWxvcjphbnl9KSA9PiBcclxuICAgICAgICBmdW5jdGlvbihzdGF0ZTogU3RhdGUpe1xyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgLi4uc3RhdGUsXHJcbiAgICAgICAgICAgICAgICBvcGNpb25lczp7XHJcbiAgICAgICAgICAgICAgICAgICAgLi4uc3RhdGUub3BjaW9uZXMsXHJcbiAgICAgICAgICAgICAgICAgICAgW3BheWxvYWQub3BjaW9uXTogcGF5bG9hZC52YWxvclxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgIFNFVF9DTElFTlRFOiAocGF5bG9hZDoge2NsaWVudGU6Q2xpZW50ZSwgZGF0b3NEZXNkZTpEYXRvc0Rlc2RlfSkgPT4gXHJcbiAgICAgICAgZnVuY3Rpb24oc3RhdGU6IFN0YXRlKXtcclxuICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgIC4uLnN0YXRlLFxyXG4gICAgICAgICAgICAgICAgW3BheWxvYWQuZGF0b3NEZXNkZV06e1xyXG4gICAgICAgICAgICAgICAgICAgIC4uLnN0YXRlW3BheWxvYWQuZGF0b3NEZXNkZV0sXHJcbiAgICAgICAgICAgICAgICAgICAgY2xpZW50ZTogcGF5bG9hZC5jbGllbnRlXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgQUREX0lURU06IChwYXlsb2FkOiB7ZGF0b3NEZXNkZTpEYXRvc0Rlc2RlfSkgPT4gXHJcbiAgICAgICAgZnVuY3Rpb24oc3RhdGU6IFN0YXRlKXtcclxuICAgICAgICAgICAgdmFyIGl0ZW1zPXN0YXRlW3BheWxvYWQuZGF0b3NEZXNkZV0uaXRlbXM7XHJcbiAgICAgICAgICAgIGl0ZW1zLnB1c2goY3JlYXJJdGVtKCkpO1xyXG4gICAgICAgICAgICBjYWxjdWxhclRvdGFsZXMoaXRlbXMsIHN0YXRlW3BheWxvYWQuZGF0b3NEZXNkZV0sIHBheWxvYWQuZGF0b3NEZXNkZSk7XHJcbiAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAuLi5zdGF0ZSxcclxuICAgICAgICAgICAgICAgIFtwYXlsb2FkLmRhdG9zRGVzZGVdOntcclxuICAgICAgICAgICAgICAgICAgICAuLi5zdGF0ZVtwYXlsb2FkLmRhdG9zRGVzZGVdLFxyXG4gICAgICAgICAgICAgICAgICAgIGl0ZW1zOml0ZW1zXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgUkVNT1ZFX0lURU06IChwYXlsb2FkOiB7aW5kZXg6bnVtYmVyLCBkYXRvc0Rlc2RlOkRhdG9zRGVzZGV9KSA9PiBcclxuICAgICAgICBmdW5jdGlvbihzdGF0ZTogU3RhdGUpe1xyXG4gICAgICAgICAgICB2YXIgaXRlbXM9c3RhdGVbcGF5bG9hZC5kYXRvc0Rlc2RlXS5pdGVtcztcclxuICAgICAgICAgICAgaXRlbXMuc3BsaWNlKHBheWxvYWQuaW5kZXgsIDEpO1xyXG4gICAgICAgICAgICBjYWxjdWxhclRvdGFsZXMoaXRlbXMsIHN0YXRlW3BheWxvYWQuZGF0b3NEZXNkZV0sIHBheWxvYWQuZGF0b3NEZXNkZSk7XHJcbiAgICAgICAgICAgIGlmKGl0ZW1zLmxlbmd0aD09MCl7XHJcbiAgICAgICAgICAgICAgICBpdGVtcy5wdXNoKGNyZWFySXRlbSgpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgLi4uc3RhdGUsXHJcbiAgICAgICAgICAgICAgICBbcGF5bG9hZC5kYXRvc0Rlc2RlXTp7XHJcbiAgICAgICAgICAgICAgICAgICAgLi4uc3RhdGVbcGF5bG9hZC5kYXRvc0Rlc2RlXSxcclxuICAgICAgICAgICAgICAgICAgICBpdGVtczppdGVtc1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgIFNFVF9QUk9EVUNUT19JVEVNOiAocGF5bG9hZDoge2luZGV4Om51bWJlciwgcHJvZHVjdG86UHJvZHVjdG98bnVsbCwgZGF0b3NEZXNkZTpEYXRvc0Rlc2RlfSkgPT4gXHJcbiAgICAgICAgZnVuY3Rpb24oc3RhdGU6IFN0YXRlKXtcclxuICAgICAgICAgICAgbGV0IHtpbmRleCwgcHJvZHVjdG99ID0gcGF5bG9hZDtcclxuICAgICAgICAgICAgbGV0IGl0ZW1zPXN0YXRlW3BheWxvYWQuZGF0b3NEZXNkZV0uaXRlbXM7XHJcbiAgICAgICAgICAgIGl0ZW1zW2luZGV4XS5wcm9kdWN0bz1wcm9kdWN0bz9wcm9kdWN0by5wcm9kdWN0bzp1bmRlZmluZWQ7XHJcbiAgICAgICAgICAgIGl0ZW1zW2luZGV4XS5ub21icmU9cHJvZHVjdG8/cHJvZHVjdG8ubm9tYnJlOnVuZGVmaW5lZDtcclxuICAgICAgICAgICAgaXRlbXNbaW5kZXhdLmRlc2NyaXBjaW9uPXByb2R1Y3RvP3Byb2R1Y3RvLmRlc2NyaXBjaW9uOnVuZGVmaW5lZDtcclxuICAgICAgICAgICAgaXRlbXNbaW5kZXhdLnByZWNpb191bml0YXJpbz1wcm9kdWN0bz9wcm9kdWN0by5wcmVjaW86dW5kZWZpbmVkO1xyXG4gICAgICAgICAgICBsZXQge2Rlc2N1ZW50bywgdG90YWx9ID0gY2FsY3VsYXJUb3RhbExpbmVhKGl0ZW1zW2luZGV4XSk7XHJcbiAgICAgICAgICAgIGl0ZW1zW2luZGV4XS5kZXNjdWVudG89ZGVzY3VlbnRvO1xyXG4gICAgICAgICAgICBpdGVtc1tpbmRleF0udG90YWw9dG90YWw7XHJcbiAgICAgICAgICAgIGNhbGN1bGFyVG90YWxlcyhpdGVtcywgc3RhdGVbcGF5bG9hZC5kYXRvc0Rlc2RlXSwgcGF5bG9hZC5kYXRvc0Rlc2RlKTtcclxuICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgIC4uLnN0YXRlLFxyXG4gICAgICAgICAgICAgICAgW3BheWxvYWQuZGF0b3NEZXNkZV06e1xyXG4gICAgICAgICAgICAgICAgICAgIC4uLnN0YXRlW3BheWxvYWQuZGF0b3NEZXNkZV0sXHJcbiAgICAgICAgICAgICAgICAgICAgaXRlbXM6aXRlbXNcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICBTRVRfRklFTERfQ1VTVE9NX0lURU06IChwYXlsb2FkOiB7aW5kZXg6bnVtYmVyLCBjYW1wbzprZXlvZiBJdGVtLCB2YWxvcjpudW1iZXJ8c3RyaW5nfG51bGwsIGRhdG9zRGVzZGU6RGF0b3NEZXNkZX0pID0+IFxyXG4gICAgICAgIGZ1bmN0aW9uKHN0YXRlOiBTdGF0ZSl7XHJcbiAgICAgICAgICAgIGxldCB7aW5kZXgsIGNhbXBvLCB2YWxvcn0gPSBwYXlsb2FkO1xyXG4gICAgICAgICAgICBsZXQgaXRlbXM9c3RhdGVbcGF5bG9hZC5kYXRvc0Rlc2RlXS5pdGVtcztcclxuICAgICAgICAgICAgLy8gQHRzLWlnbm9yZSBzw6kgcXVlIGVsIGluZGljZSB5IGVsIGNhbXBvIGV4aXN0ZW5cclxuICAgICAgICAgICAgaXRlbXNbaW5kZXhdW2NhbXBvXT12YWxvcjtcclxuICAgICAgICAgICAgbGV0IHtkZXNjdWVudG8sIHRvdGFsfSA9IGNhbGN1bGFyVG90YWxMaW5lYShpdGVtc1tpbmRleF0pO1xyXG4gICAgICAgICAgICBpdGVtc1tpbmRleF0uZGVzY3VlbnRvPWRlc2N1ZW50bztcclxuICAgICAgICAgICAgaXRlbXNbaW5kZXhdLnRvdGFsPXRvdGFsO1xyXG4gICAgICAgICAgICBjYWxjdWxhclRvdGFsZXMoaXRlbXMsIHN0YXRlW3BheWxvYWQuZGF0b3NEZXNkZV0sIHBheWxvYWQuZGF0b3NEZXNkZSk7XHJcbiAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAuLi5zdGF0ZSxcclxuICAgICAgICAgICAgICAgIFtwYXlsb2FkLmRhdG9zRGVzZGVdOntcclxuICAgICAgICAgICAgICAgICAgICAuLi5zdGF0ZVtwYXlsb2FkLmRhdG9zRGVzZGVdLFxyXG4gICAgICAgICAgICAgICAgICAgIGl0ZW1zOml0ZW1zXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgU0VUX0NBTlRJREFEX0lURU06IChwYXlsb2FkOiB7aW5kZXg6bnVtYmVyLCBjYW50aWRhZDpudW1iZXJ8bnVsbCwgZGF0b3NEZXNkZTpEYXRvc0Rlc2RlfSkgPT4gXHJcbiAgICAgICAgZnVuY3Rpb24oc3RhdGU6IFN0YXRlKXtcclxuICAgICAgICAgICAgbGV0IHtpbmRleCwgY2FudGlkYWR9ID0gcGF5bG9hZDtcclxuICAgICAgICAgICAgbGV0IGl0ZW1zPXN0YXRlW3BheWxvYWQuZGF0b3NEZXNkZV0uaXRlbXM7XHJcbiAgICAgICAgICAgIGl0ZW1zW2luZGV4XS5jYW50aWRhZD1jYW50aWRhZHx8dW5kZWZpbmVkO1xyXG4gICAgICAgICAgICBsZXQge2Rlc2N1ZW50bywgdG90YWx9ID0gY2FsY3VsYXJUb3RhbExpbmVhKGl0ZW1zW2luZGV4XSk7XHJcbiAgICAgICAgICAgIGl0ZW1zW2luZGV4XS5kZXNjdWVudG89ZGVzY3VlbnRvO1xyXG4gICAgICAgICAgICBpdGVtc1tpbmRleF0udG90YWw9dG90YWw7XHJcbiAgICAgICAgICAgIGNhbGN1bGFyVG90YWxlcyhpdGVtcywgc3RhdGVbcGF5bG9hZC5kYXRvc0Rlc2RlXSwgcGF5bG9hZC5kYXRvc0Rlc2RlKTtcclxuICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgIC4uLnN0YXRlLFxyXG4gICAgICAgICAgICAgICAgW3BheWxvYWQuZGF0b3NEZXNkZV06e1xyXG4gICAgICAgICAgICAgICAgICAgIC4uLnN0YXRlW3BheWxvYWQuZGF0b3NEZXNkZV0sXHJcbiAgICAgICAgICAgICAgICAgICAgaXRlbXM6aXRlbXNcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICBTRVRfREVTQ1VFTlRPX0lURU06IChwYXlsb2FkOiB7aW5kZXg6bnVtYmVyLCBwb3JjZW50YWplOm51bWJlcnxudWxsLCBkYXRvc0Rlc2RlOkRhdG9zRGVzZGV9KSA9PiBcclxuICAgICAgICBmdW5jdGlvbihzdGF0ZTogU3RhdGUpe1xyXG4gICAgICAgICAgICBsZXQge2luZGV4LCBwb3JjZW50YWplfSA9IHBheWxvYWQ7XHJcbiAgICAgICAgICAgIGxldCBpdGVtcz1zdGF0ZVtwYXlsb2FkLmRhdG9zRGVzZGVdLml0ZW1zO1xyXG4gICAgICAgICAgICBpdGVtc1tpbmRleF0ucG9yY2VudGFqZV9kZXNjdWVudG89cG9yY2VudGFqZTtcclxuICAgICAgICAgICAgbGV0IHtkZXNjdWVudG8sIHRvdGFsfSA9IGNhbGN1bGFyVG90YWxMaW5lYShpdGVtc1tpbmRleF0pO1xyXG4gICAgICAgICAgICBpdGVtc1tpbmRleF0uZGVzY3VlbnRvPWRlc2N1ZW50bztcclxuICAgICAgICAgICAgaXRlbXNbaW5kZXhdLnRvdGFsPXRvdGFsO1xyXG4gICAgICAgICAgICBjYWxjdWxhclRvdGFsZXMoaXRlbXMsIHN0YXRlW3BheWxvYWQuZGF0b3NEZXNkZV0sIHBheWxvYWQuZGF0b3NEZXNkZSk7XHJcbiAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAuLi5zdGF0ZSxcclxuICAgICAgICAgICAgICAgIFtwYXlsb2FkLmRhdG9zRGVzZGVdOntcclxuICAgICAgICAgICAgICAgICAgICAuLi5zdGF0ZVtwYXlsb2FkLmRhdG9zRGVzZGVdLFxyXG4gICAgICAgICAgICAgICAgICAgIGl0ZW1zOml0ZW1zXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgU0VUX0RFU0NVRU5UT19QUkVTVVBVRVNUTzogKHBheWxvYWQ6IHtkZXNjdWVudG86bnVtYmVyfSkgPT4gXHJcbiAgICAgICAgZnVuY3Rpb24oc3RhdGU6IFN0YXRlKXtcclxuICAgICAgICAgICAgdmFyIHtkZXNjdWVudG99ID0gcGF5bG9hZDtcclxuICAgICAgICAgICAgdmFyIGl0ZW1zPXN0YXRlLmRhdG9zUHJlc3VwdWVzdG8uaXRlbXM7XHJcbiAgICAgICAgICAgIHZhciBteVN0YXRlID0ge1xyXG4gICAgICAgICAgICAgICAgLi4uc3RhdGUsXHJcbiAgICAgICAgICAgICAgICBkYXRvc1ByZXN1cHVlc3RvOntcclxuICAgICAgICAgICAgICAgICAgICAuLi5zdGF0ZS5kYXRvc1ByZXN1cHVlc3RvLFxyXG4gICAgICAgICAgICAgICAgICAgIHByZXN1cHVlc3RvOntcclxuICAgICAgICAgICAgICAgICAgICAgICAgLi4uc3RhdGUuZGF0b3NQcmVzdXB1ZXN0by5wcmVzdXB1ZXN0byxcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3VlbnRvOiBkZXNjdWVudG9cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIGNhbGN1bGFyVG90YWxlcyhpdGVtcywgbXlTdGF0ZS5kYXRvc1ByZXN1cHVlc3RvLCAnZGF0b3NQcmVzdXB1ZXN0bycpO1xyXG4gICAgICAgICAgICByZXR1cm4gbXlTdGF0ZTtcclxuICAgICAgICB9LFxyXG4gICAgU0VUX0RFU0NVRU5UT19QRURJRE86IChwYXlsb2FkOiB7ZGVzY3VlbnRvOm51bWJlcn0pID0+IFxyXG4gICAgICAgIGZ1bmN0aW9uKHN0YXRlOiBTdGF0ZSl7XHJcbiAgICAgICAgICAgIHZhciB7ZGVzY3VlbnRvfSA9IHBheWxvYWQ7XHJcbiAgICAgICAgICAgIHZhciBpdGVtcz1zdGF0ZS5kYXRvc1BlZGlkby5pdGVtcztcclxuICAgICAgICAgICAgdmFyIG15U3RhdGUgPSB7XHJcbiAgICAgICAgICAgICAgICAuLi5zdGF0ZSxcclxuICAgICAgICAgICAgICAgIGRhdG9zUGVkaWRvOntcclxuICAgICAgICAgICAgICAgICAgICAuLi5zdGF0ZS5kYXRvc1BlZGlkbyxcclxuICAgICAgICAgICAgICAgICAgICBwZWRpZG86e1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAuLi5zdGF0ZS5kYXRvc1BlZGlkby5wZWRpZG8sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlc2N1ZW50bzogZGVzY3VlbnRvXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICBjYWxjdWxhclRvdGFsZXMoaXRlbXMsIG15U3RhdGUuZGF0b3NQZWRpZG8sICdkYXRvc1BlZGlkbycpO1xyXG4gICAgICAgICAgICByZXR1cm4gbXlTdGF0ZTtcclxuICAgICAgICB9LFxyXG4gICAgU0VUX0NBTVBPX1BSRVNVUFVFU1RPOiAocGF5bG9hZDoge2NhbXBvOmtleW9mIFByZXN1cHVlc3RvLCB2YWxvcjpzdHJpbmd8bnVtYmVyfGJvb2xlYW58bnVsbH0pID0+IFxyXG4gICAgICAgIGZ1bmN0aW9uKHN0YXRlOiBTdGF0ZSl7XHJcbiAgICAgICAgICAgIHZhciB7Y2FtcG8sIHZhbG9yfSA9IHBheWxvYWQ7XHJcbiAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAuLi5zdGF0ZSxcclxuICAgICAgICAgICAgICAgIGRhdG9zUHJlc3VwdWVzdG86e1xyXG4gICAgICAgICAgICAgICAgICAgIC4uLnN0YXRlLmRhdG9zUHJlc3VwdWVzdG8sXHJcbiAgICAgICAgICAgICAgICAgICAgcHJlc3VwdWVzdG86e1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAuLi5zdGF0ZS5kYXRvc1ByZXN1cHVlc3RvLnByZXN1cHVlc3RvLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbY2FtcG9dOiB2YWxvclxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9LFxyXG4gICAgU0VUX0NBTVBPX1BFRElETzogKHBheWxvYWQ6IHtjYW1wbzprZXlvZiBQZWRpZG8sIHZhbG9yOnN0cmluZ3xudW1iZXJ8Ym9vbGVhbnxudWxsfSkgPT4gXHJcbiAgICAgICAgZnVuY3Rpb24oc3RhdGU6IFN0YXRlKXtcclxuICAgICAgICAgICAgdmFyIHtjYW1wbywgdmFsb3J9ID0gcGF5bG9hZDtcclxuICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgIC4uLnN0YXRlLFxyXG4gICAgICAgICAgICAgICAgZGF0b3NQZWRpZG86e1xyXG4gICAgICAgICAgICAgICAgICAgIC4uLnN0YXRlLmRhdG9zUGVkaWRvLFxyXG4gICAgICAgICAgICAgICAgICAgIHBlZGlkbzp7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLnN0YXRlLmRhdG9zUGVkaWRvLnBlZGlkbyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2NhbXBvXTogdmFsb3JcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfSxcclxuICAgIFJFU0VUX09QQ0lPTkVTOiAoX3BheWxvYWQ6IHt9KSA9PiBcclxuICAgICAgICBmdW5jdGlvbihzdGF0ZTogU3RhdGUpe1xyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgLi4uc3RhdGUsXHJcbiAgICAgICAgICAgICAgICBvcGNpb25lczp7XHJcbiAgICAgICAgICAgICAgICAgICAgLi4uc3RhdGUub3BjaW9uZXMsXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG59XHJcblxyXG5leHBvcnQgdHlwZSBBY3Rpb25Gb3JtdWxhcmlvU3RhdGUgPSBBY3Rpb25zRnJvbTx0eXBlb2YgcmVkdWNlcnM+O1xyXG4vKiBGSU4gQUNDSU9ORVMgKi9cclxuXHJcbmV4cG9ydCBjb25zdCBkaXNwYXRjaGVycyA9IGNyZWF0ZURpc3BhdGNoZXJzKHJlZHVjZXJzKTtcclxuXHJcbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB0cmFlckVzdHJ1Y3R1cmEoKXtcclxuICAgIHZhciBlc3RydWN0dXJhOiBFc3RydWN0dXJhID0gYXdhaXQgbXkuYWpheC5lc3RydWN0dXJhX2NyZWFyKCk7XHJcbiAgICByZXR1cm4gZXN0cnVjdHVyYTtcclxufVxyXG5cclxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGd1YXJkYXJQcmVzdXB1ZXN0byhjbGllbnRlOkNsaWVudGUsIHByZXN1cHVlc3RvOlByZXN1cHVlc3RvLCBpdGVtczpJdGVtW10pe1xyXG4gICAgcmV0dXJuIGF3YWl0IG15LmFqYXgucHJlc3VwdWVzdG9fZ3VhcmRhcih7Y2xpZW50ZSwgcHJlc3VwdWVzdG8sIGl0ZW1zfSk7XHJcbn1cclxuXHJcbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBndWFyZGFyUGVkaWRvKGNsaWVudGU6Q2xpZW50ZSwgcGVkaWRvOlBlZGlkbywgaXRlbXM6SXRlbVtdKXtcclxuICAgIHJldHVybiBhd2FpdCBteS5hamF4LnBlZGlkb19ndWFyZGFyKHtjbGllbnRlLCBwZWRpZG8sIGl0ZW1zfSk7XHJcbn1cclxuXHJcbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjcmVhdGVJbml0aWFsU3RhdGVQcmVzdXB1ZXN0bygpe1xyXG4gICAgdmFyIGVzdHJ1Y3R1cmEgPSBhd2FpdCB0cmFlckVzdHJ1Y3R1cmEoKTtcclxuICAgIHZhciBpbml0aWFsU3RhdGU6U3RhdGUgPSB7XHJcbiAgICAgICAgZXN0cnVjdHVyYSxcclxuICAgICAgICBkYXRvc1ByZXN1cHVlc3RvOntcclxuICAgICAgICAgICAgY2xpZW50ZTp7fSxcclxuICAgICAgICAgICAgaXRlbXM6W2NyZWFySXRlbSgpXSxcclxuICAgICAgICAgICAgcHJlc3VwdWVzdG86e1xyXG4gICAgICAgICAgICAgICAgZXN0YWRvOiBcImVzcGVyYVwiLFxyXG4gICAgICAgICAgICAgICAgZmVjaGE6IGRhdGV0aW1lLm5vdygpLnRvWW1kKCksXHJcbiAgICAgICAgICAgICAgICAvL0B0cy1pZ25vcmUgc2UgcHVlZGUgbGxhbWFyXHJcbiAgICAgICAgICAgICAgICB2YWxpZG9faGFzdGE6IChkYXRldGltZS5ub3coKS5hZGQodGltZUludGVydmFsKHtkYXlzOjd9KSkpLnRvWW1kKCksXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIG9wY2lvbmVzOnt9LFxyXG4gICAgfTtcclxuICAgIHJldHVybiBpbml0aWFsU3RhdGU7XHJcbn1cclxuXHJcbmV4cG9ydCBjb25zdCBpbmljaWFsaXphclBlZGlkbz0oKT0+e1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgICBlc3RhZG86IEVTVEFET19JTklDSUFMX1BFRElETyxcclxuICAgICAgICBmZWNoYTogZGF0ZXRpbWUubm93KCkudG9ZbWQoKSxcclxuICAgICAgICAvL0B0cy1pZ25vcmUgc2UgcHVlZGUgbGxhbWFyXHJcbiAgICAgICAgZmVjaGFfZW50cmVnYTogKGRhdGV0aW1lLm5vdygpLmFkZCh0aW1lSW50ZXJ2YWwoe2RheXM6N30pKSkudG9ZbWQoKSxcclxuICAgICAgICBvYnNlcnZhY2lvbmVzOiBudWxsXHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjcmVhdGVJbml0aWFsU3RhdGVQZWRpZG8oKXtcclxuICAgIFxyXG4gICAgdmFyIGVzdHJ1Y3R1cmEgPSBhd2FpdCB0cmFlckVzdHJ1Y3R1cmEoKTtcclxuICAgIHZhciBpbml0aWFsU3RhdGU6U3RhdGUgPSB7XHJcbiAgICAgICAgZXN0cnVjdHVyYSxcclxuICAgICAgICBkYXRvc1BlZGlkbzp7XHJcbiAgICAgICAgICAgIGNsaWVudGU6e30sXHJcbiAgICAgICAgICAgIGl0ZW1zOltjcmVhckl0ZW0oKV0sXHJcbiAgICAgICAgICAgIHBlZGlkbzogaW5pY2lhbGl6YXJQZWRpZG8oKVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgb3BjaW9uZXM6e30sXHJcbiAgICB9O1xyXG4gICAgcmV0dXJuIGluaXRpYWxTdGF0ZTtcclxufVxyXG5cclxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNyZWFyU3RvcmUoXHJcbiAgICBvcHRzOntcclxuICAgICAgICB1c2VTZXNzaW9uU3RvcmFnZT86Ym9vbGVhbiwgXHJcbiAgICAgICAgZGF0b3NQcmVzdXB1ZXN0bz86RGF0b3NQcmVzdXB1ZXN0byxcclxuICAgICAgICBkYXRvc1BlZGlkbz86RGF0b3NQZWRpZG9cclxuICAgIH0sIFxyXG4gICAgY3JlYXRlSW5pdGlhbFN0YXRlOigpPT5Qcm9taXNlPFN0YXRlPiwgXHJcbil7XHJcbiAgICBvcHRzLnVzZVNlc3Npb25TdG9yYWdlPSBvcHRzLnVzZVNlc3Npb25TdG9yYWdlfHxmYWxzZTtcclxuICAgIHZhciBsb2FkU3RhdGUgPSBhc3luYyBmdW5jdGlvbiBsb2FkU3RhdGUoKTpQcm9taXNlPFN0YXRlPntcclxuICAgICAgICB2YXIgcHJlc3VwdWVzdG9TdGF0ZTpTdGF0ZXxudWxsID0gb3B0cy51c2VTZXNzaW9uU3RvcmFnZT9teS5nZXRTZXNzaW9uVmFyKFNUT1JBR0VfU1RBVEVfTkFNRSk6bXkuZ2V0TG9jYWxWYXIoU1RPUkFHRV9TVEFURV9OQU1FKTtcclxuICAgICAgICBpZihwcmVzdXB1ZXN0b1N0YXRlKXtcclxuICAgICAgICAgICAgaW5pdGlhbFN0YXRlID0gYXdhaXQgY3JlYXRlSW5pdGlhbFN0YXRlKCk7XHJcbiAgICAgICAgICAgIHByZXN1cHVlc3RvU3RhdGUgPSB7Li4uaW5pdGlhbFN0YXRlLCAuLi5wcmVzdXB1ZXN0b1N0YXRlfTtcclxuICAgICAgICAgICAgcHJlc3VwdWVzdG9TdGF0ZS5lc3RydWN0dXJhID0gey4uLmluaXRpYWxTdGF0ZS5lc3RydWN0dXJhfTtcclxuICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgdmFyIGluaXRpYWxTdGF0ZSA9IGF3YWl0IGNyZWF0ZUluaXRpYWxTdGF0ZSgpO1xyXG4gICAgICAgICAgICBwcmVzdXB1ZXN0b1N0YXRlID0gaW5pdGlhbFN0YXRlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZihvcHRzLmRhdG9zUHJlc3VwdWVzdG8pe1xyXG4gICAgICAgICAgICBwcmVzdXB1ZXN0b1N0YXRlLmRhdG9zUHJlc3VwdWVzdG89ey4uLnByZXN1cHVlc3RvU3RhdGUuZGF0b3NQcmVzdXB1ZXN0bywgLi4ub3B0cy5kYXRvc1ByZXN1cHVlc3RvfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZihvcHRzLmRhdG9zUGVkaWRvKXtcclxuICAgICAgICAgICAgcHJlc3VwdWVzdG9TdGF0ZS5kYXRvc1BlZGlkbz17Li4ucHJlc3VwdWVzdG9TdGF0ZS5kYXRvc1BlZGlkbywgLi4ub3B0cy5kYXRvc1BlZGlkb31cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHByZXN1cHVlc3RvU3RhdGU7XHJcbiAgICB9XHJcbiAgICB2YXIgc2F2ZVN0YXRlID0gZnVuY3Rpb24gc2F2ZVN0YXRlKHN0YXRlOlN0YXRlKXtcclxuICAgICAgICBvcHRzLnVzZVNlc3Npb25TdG9yYWdlP215LnNldFNlc3Npb25WYXIoU1RPUkFHRV9TVEFURV9OQU1FLCBzdGF0ZSk6bXkuc2V0TG9jYWxWYXIoU1RPUkFHRV9TVEFURV9OQU1FLCBzdGF0ZSk7XHJcbiAgICB9XHJcbiAgICAvKiBERUZJTklDSU9OIENPTlRST0xBRE9SICovXHJcbiAgICB2YXIgaW5pdGlhbFN0YXRlOlN0YXRlID0gYXdhaXQgbG9hZFN0YXRlKCk7XHJcbiAgICBjb25zdCByZWR1Y2VyID0gY3JlYXRlUmVkdWNlcihyZWR1Y2VycywgaW5pdGlhbFN0YXRlKTtcclxuICAgIC8qIEZJTiBERUZJTklDSU9OIENPTlRST0xBRE9SICovXHJcbiAgICAvKiBDQVJHQSBZIEdVQVJEQURPIERFIFNUQVRFICovXHJcbiAgICAvKiBDUkVBQ0lPTiBTVE9SRSAqL1xyXG4gICAgY29uc3Qgc3RvcmUgPSBjcmVhdGVTdG9yZShyZWR1Y2VyLCBpbml0aWFsU3RhdGUpOyBcclxuICAgIHNhdmVTdGF0ZShzdG9yZS5nZXRTdGF0ZSgpKTtcclxuICAgIHN0b3JlLnN1YnNjcmliZShmdW5jdGlvbigpe1xyXG4gICAgICAgIHNhdmVTdGF0ZShzdG9yZS5nZXRTdGF0ZSgpKTtcclxuICAgIH0pO1xyXG4gICAgLyogRklOIENSRUFDSU9OIFNUT1JFICovXHJcbiAgICByZXR1cm4gc3RvcmU7XHJcbn1cclxuXHJcbiJdfQ==