@prisma/studio-core 0.11.0 → 0.11.1

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 (43) hide show
  1. package/dist/chunk-I4OGOLAT.js +10 -0
  2. package/dist/chunk-J6YP3MM4.js +10 -0
  3. package/dist/data/accelerate/index.d.cts +1 -1
  4. package/dist/data/accelerate/index.d.ts +1 -1
  5. package/dist/data/bff/index.d.cts +1 -1
  6. package/dist/data/bff/index.d.ts +1 -1
  7. package/dist/data/index.d.cts +1 -1
  8. package/dist/data/index.d.ts +1 -1
  9. package/dist/data/mysql-core/index.cjs +2 -2
  10. package/dist/data/mysql-core/index.d.cts +49 -2
  11. package/dist/data/mysql-core/index.d.ts +49 -2
  12. package/dist/data/mysql-core/index.js +3 -3
  13. package/dist/data/mysql2/index.d.cts +1 -1
  14. package/dist/data/mysql2/index.d.ts +1 -1
  15. package/dist/data/node-sqlite/index.d.cts +1 -1
  16. package/dist/data/node-sqlite/index.d.ts +1 -1
  17. package/dist/data/pglite/index.cjs +1 -1
  18. package/dist/data/pglite/index.d.cts +1 -1
  19. package/dist/data/pglite/index.d.ts +1 -1
  20. package/dist/data/pglite/index.js +1 -1
  21. package/dist/data/postgres-core/index.cjs +1 -1
  22. package/dist/data/postgres-core/index.d.cts +1 -1
  23. package/dist/data/postgres-core/index.d.ts +1 -1
  24. package/dist/data/postgres-core/index.js +1 -1
  25. package/dist/data/postgresjs/index.d.cts +1 -1
  26. package/dist/data/postgresjs/index.d.ts +1 -1
  27. package/dist/data/ppg/index.d.cts +1 -1
  28. package/dist/data/ppg/index.d.ts +1 -1
  29. package/dist/data/sqlite-core/index.cjs +2 -2
  30. package/dist/data/sqlite-core/index.d.cts +13 -1
  31. package/dist/data/sqlite-core/index.d.ts +13 -1
  32. package/dist/data/sqlite-core/index.js +2 -2
  33. package/dist/{executor-B5UdD1ZH.d.cts → executor-CFej-Wsy.d.cts} +1 -1
  34. package/dist/{executor-B5UdD1ZH.d.ts → executor-CFej-Wsy.d.ts} +1 -1
  35. package/dist/metafile-cjs.json +1 -1
  36. package/dist/metafile-esm.json +1 -1
  37. package/dist/ui/index.cjs +1 -1
  38. package/dist/ui/index.d.cts +1 -1
  39. package/dist/ui/index.d.ts +1 -1
  40. package/dist/ui/index.js +1 -1
  41. package/package.json +1 -1
  42. package/dist/chunk-DUKJZEWA.js +0 -10
  43. package/dist/chunk-PYMTS4U4.js +0 -10
@@ -1,4 +1,4 @@
1
- import { A as AdapterRequirements, d as Adapter, T as Table, F as FilterOperator, Q as Query, n as AdapterQueryDetails, K as BuilderRequirements, y as AdapterDeleteDetails, u as AdapterInsertDetails, w as AdapterUpdateDetails } from '../../executor-B5UdD1ZH.cjs';
1
+ import { A as AdapterRequirements, d as Adapter, T as Table, F as FilterOperator, Q as Query, n as AdapterQueryDetails, K as BuilderRequirements, y as AdapterDeleteDetails, u as AdapterInsertDetails, w as AdapterUpdateDetails } from '../../executor-CFej-Wsy.cjs';
2
2
  import * as kysely from 'kysely';
3
3
 
4
4
  type SQLIteAdapterRequirements = AdapterRequirements;
@@ -74,6 +74,7 @@ declare function getTablesQuery(requirements?: Omit<BuilderRequirements, "Adapte
74
74
  columns: {
75
75
  name: string;
76
76
  pk: number;
77
+ default: string | null;
77
78
  datatype: string;
78
79
  fk_table: string | null;
79
80
  fk_column: string | null;
@@ -90,6 +91,7 @@ declare function mockTablesQuery(): [{
90
91
  readonly columns: [{
91
92
  readonly name: "id";
92
93
  readonly datatype: "INTEGER";
94
+ readonly default: null;
93
95
  readonly pk: 1;
94
96
  readonly computed: 0;
95
97
  readonly nullable: 0;
@@ -98,6 +100,7 @@ declare function mockTablesQuery(): [{
98
100
  }, {
99
101
  readonly name: "name";
100
102
  readonly datatype: "TEXT";
103
+ readonly default: null;
101
104
  readonly pk: 0;
102
105
  readonly computed: 0;
103
106
  readonly nullable: 1;
@@ -110,6 +113,7 @@ declare function mockTablesQuery(): [{
110
113
  readonly columns: [{
111
114
  readonly name: "id";
112
115
  readonly datatype: "UUID";
116
+ readonly default: null;
113
117
  readonly pk: 1;
114
118
  readonly computed: 0;
115
119
  readonly nullable: 0;
@@ -118,6 +122,7 @@ declare function mockTablesQuery(): [{
118
122
  }, {
119
123
  readonly name: "created_at";
120
124
  readonly datatype: "TIMESTAMP";
125
+ readonly default: null;
121
126
  readonly pk: 0;
122
127
  readonly computed: 0;
123
128
  readonly nullable: 1;
@@ -126,6 +131,7 @@ declare function mockTablesQuery(): [{
126
131
  }, {
127
132
  readonly name: "deleted_at";
128
133
  readonly datatype: "TIMESTAMP";
134
+ readonly default: null;
129
135
  readonly pk: 0;
130
136
  readonly computed: 0;
131
137
  readonly nullable: 1;
@@ -134,6 +140,7 @@ declare function mockTablesQuery(): [{
134
140
  }, {
135
141
  readonly name: "role";
136
142
  readonly datatype: "varchar";
143
+ readonly default: null;
137
144
  readonly pk: 0;
138
145
  readonly computed: 0;
139
146
  readonly nullable: 1;
@@ -142,6 +149,7 @@ declare function mockTablesQuery(): [{
142
149
  }, {
143
150
  readonly name: "name";
144
151
  readonly datatype: "varchar";
152
+ readonly default: null;
145
153
  readonly pk: 0;
146
154
  readonly computed: 0;
147
155
  readonly nullable: 1;
@@ -150,6 +158,7 @@ declare function mockTablesQuery(): [{
150
158
  }, {
151
159
  readonly name: "name_role";
152
160
  readonly datatype: "text";
161
+ readonly default: null;
153
162
  readonly pk: 0;
154
163
  readonly computed: 0;
155
164
  readonly nullable: 1;
@@ -162,6 +171,7 @@ declare function mockTablesQuery(): [{
162
171
  readonly columns: [{
163
172
  readonly name: "id";
164
173
  readonly datatype: "UUID";
174
+ readonly default: null;
165
175
  readonly pk: 1;
166
176
  readonly computed: 0;
167
177
  readonly nullable: 0;
@@ -170,6 +180,7 @@ declare function mockTablesQuery(): [{
170
180
  }, {
171
181
  readonly name: "name";
172
182
  readonly datatype: "TEXT";
183
+ readonly default: null;
173
184
  readonly pk: 2;
174
185
  readonly computed: 0;
175
186
  readonly nullable: 1;
@@ -178,6 +189,7 @@ declare function mockTablesQuery(): [{
178
189
  }, {
179
190
  readonly name: "created_at";
180
191
  readonly datatype: "timestamp";
192
+ readonly default: null;
181
193
  readonly pk: 0;
182
194
  readonly computed: 0;
183
195
  readonly nullable: 1;
@@ -1,4 +1,4 @@
1
- import { A as AdapterRequirements, d as Adapter, T as Table, F as FilterOperator, Q as Query, n as AdapterQueryDetails, K as BuilderRequirements, y as AdapterDeleteDetails, u as AdapterInsertDetails, w as AdapterUpdateDetails } from '../../executor-B5UdD1ZH.js';
1
+ import { A as AdapterRequirements, d as Adapter, T as Table, F as FilterOperator, Q as Query, n as AdapterQueryDetails, K as BuilderRequirements, y as AdapterDeleteDetails, u as AdapterInsertDetails, w as AdapterUpdateDetails } from '../../executor-CFej-Wsy.js';
2
2
  import * as kysely from 'kysely';
3
3
 
4
4
  type SQLIteAdapterRequirements = AdapterRequirements;
@@ -74,6 +74,7 @@ declare function getTablesQuery(requirements?: Omit<BuilderRequirements, "Adapte
74
74
  columns: {
75
75
  name: string;
76
76
  pk: number;
77
+ default: string | null;
77
78
  datatype: string;
78
79
  fk_table: string | null;
79
80
  fk_column: string | null;
@@ -90,6 +91,7 @@ declare function mockTablesQuery(): [{
90
91
  readonly columns: [{
91
92
  readonly name: "id";
92
93
  readonly datatype: "INTEGER";
94
+ readonly default: null;
93
95
  readonly pk: 1;
94
96
  readonly computed: 0;
95
97
  readonly nullable: 0;
@@ -98,6 +100,7 @@ declare function mockTablesQuery(): [{
98
100
  }, {
99
101
  readonly name: "name";
100
102
  readonly datatype: "TEXT";
103
+ readonly default: null;
101
104
  readonly pk: 0;
102
105
  readonly computed: 0;
103
106
  readonly nullable: 1;
@@ -110,6 +113,7 @@ declare function mockTablesQuery(): [{
110
113
  readonly columns: [{
111
114
  readonly name: "id";
112
115
  readonly datatype: "UUID";
116
+ readonly default: null;
113
117
  readonly pk: 1;
114
118
  readonly computed: 0;
115
119
  readonly nullable: 0;
@@ -118,6 +122,7 @@ declare function mockTablesQuery(): [{
118
122
  }, {
119
123
  readonly name: "created_at";
120
124
  readonly datatype: "TIMESTAMP";
125
+ readonly default: null;
121
126
  readonly pk: 0;
122
127
  readonly computed: 0;
123
128
  readonly nullable: 1;
@@ -126,6 +131,7 @@ declare function mockTablesQuery(): [{
126
131
  }, {
127
132
  readonly name: "deleted_at";
128
133
  readonly datatype: "TIMESTAMP";
134
+ readonly default: null;
129
135
  readonly pk: 0;
130
136
  readonly computed: 0;
131
137
  readonly nullable: 1;
@@ -134,6 +140,7 @@ declare function mockTablesQuery(): [{
134
140
  }, {
135
141
  readonly name: "role";
136
142
  readonly datatype: "varchar";
143
+ readonly default: null;
137
144
  readonly pk: 0;
138
145
  readonly computed: 0;
139
146
  readonly nullable: 1;
@@ -142,6 +149,7 @@ declare function mockTablesQuery(): [{
142
149
  }, {
143
150
  readonly name: "name";
144
151
  readonly datatype: "varchar";
152
+ readonly default: null;
145
153
  readonly pk: 0;
146
154
  readonly computed: 0;
147
155
  readonly nullable: 1;
@@ -150,6 +158,7 @@ declare function mockTablesQuery(): [{
150
158
  }, {
151
159
  readonly name: "name_role";
152
160
  readonly datatype: "text";
161
+ readonly default: null;
153
162
  readonly pk: 0;
154
163
  readonly computed: 0;
155
164
  readonly nullable: 1;
@@ -162,6 +171,7 @@ declare function mockTablesQuery(): [{
162
171
  readonly columns: [{
163
172
  readonly name: "id";
164
173
  readonly datatype: "UUID";
174
+ readonly default: null;
165
175
  readonly pk: 1;
166
176
  readonly computed: 0;
167
177
  readonly nullable: 0;
@@ -170,6 +180,7 @@ declare function mockTablesQuery(): [{
170
180
  }, {
171
181
  readonly name: "name";
172
182
  readonly datatype: "TEXT";
183
+ readonly default: null;
173
184
  readonly pk: 2;
174
185
  readonly computed: 0;
175
186
  readonly nullable: 1;
@@ -178,6 +189,7 @@ declare function mockTablesQuery(): [{
178
189
  }, {
179
190
  readonly name: "created_at";
180
191
  readonly datatype: "timestamp";
192
+ readonly default: null;
181
193
  readonly pk: 0;
182
194
  readonly computed: 0;
183
195
  readonly nullable: 1;
@@ -6,5 +6,5 @@ function require(mod) {
6
6
  if (mod === 'react-dom') return ___react_dom___;
7
7
  throw new Error(`Unknown module ${mod}`);
8
8
  }
9
- import{a as L}from"../../chunk-R55ES2HZ.js";import{a as i}from"../../chunk-PYMTS4U4.js";import{A as I,D as O,p as E,q as d,r as q,s as w,x as B,z as f}from"../../chunk-R7UWW2TY.js";import{e as s}from"../../chunk-GDQBQ7MK.js";s();s();s();var j={BLOB:{group:"raw"},INTEGER:{group:"numeric"},NULL:{group:"raw"},NUMERIC:{group:"numeric"},REAL:{group:"numeric"},TEXT:{group:"string"}};function D(r){if(!r)return"BLOB";let t=r.toUpperCase();return t.includes("INT")?"INTEGER":t.includes("TEXT")||t.includes("CHAR")||t.includes("CLOB")?"TEXT":t.includes("BLOB")?"BLOB":t.includes("REAL")||t.includes("FLOA")||t.includes("DOUB")?"REAL":"NUMERIC"}s();s();function y(r){return B({...r,Adapter:w,QueryCompiler:q})}function S(r,t){let{filter:l={after:"and",filters:[],kind:"FilterGroup"},pageIndex:o,pageSize:n,sortOrder:e,table:{columns:a,name:u}}=r,c=y(t),b=O(l.filters,a),p="__ps_agg__",A="__ps_count__",k=c.selectFrom(u).where(b).select(m=>m.cast(m.fn.coalesce(m.fn.countAll(),d.lit(0)),"text").as(A));return f(c.with(p,()=>k).selectFrom(u).innerJoin(p,m=>m.onTrue()).where(b).select(`${p}.${A}`).select(Object.keys(a)).$call(m=>e.reduce((R,g)=>R.orderBy(g.column,g.direction),m)).limit(n).offset(d.lit(BigInt(o)*BigInt(n))))}function ee(){return[{created_at:new Date("2025-01-26T21:56:12.345Z"),deleted_at:null,id:1,name:"John Doe",__ps_count__:"2",role:"admin",name_role:"Jonn Doe - admin"},{created_at:new Date("2025-01-26T20:56:12.345Z"),deleted_at:null,id:2,name:"Jane Doe",__ps_count__:"2",role:"poweruser",name_role:"Jane Doe - poweruser"}]}function N(r,t){let{rows:l,table:{columns:o,name:n}}=r,e=y(t);return f(e.deleteFrom(n).$call(I(l,o)).returning(Object.keys(o)).returning(Q().as("__ps_deleted_at__")))}function C(r,t){let{table:{columns:l,name:o},rows:n}=r,e=y(t);return f(e.insertInto(o).values(n.map(a=>Object.keys(a).length===0?{[Object.keys(l)[0]]:null}:a)).returning(Object.keys(l)).returning(Q().as("__ps_inserted_at__")))}function F(r,t){let{changes:l,row:o,table:{columns:n,name:e}}=r,a=y(t);return f(a.updateTable(e).set(l).$call(I([o],n)).returning(Object.keys(n)).returning(Q().as("__ps_updated_at__")))}function Q(){let r=E();return r.cast(r.cast(d`(julianday('now') - 2440587.5) * 86400000.0`,"integer"),"text")}s();s();function U(r){return d`(select coalesce(json_group_array(json_object(${d.join(v(r.toOperationNode(),"agg"))})), '[]') from ${r} as agg)`}function v(r,t){try{return L(r,t)}catch{throw new Error("SQLite jsonArrayFrom and jsonObjectFrom functions can only handle explicit selections due to limitations of the json_object function. selectAll() is not allowed in the subquery.")}}function M(r){return f(y(r).selectFrom(E().fn("pragma_table_list",[]).as("tl")).leftJoin("sqlite_schema as ss",t=>t.onRef("ss.type","=","tl.type").onRef("ss.name","=","tl.name")).where("tl.type","in",["table","view"]).where("tl.schema","=","main").where("tl.name","not like","sqlite_%").select(["tl.name","ss.sql"]).select(t=>[U(t.selectFrom(t.fn("pragma_table_xinfo",["tl.name"]).as("txi")).leftJoin(t.fn("pragma_foreign_key_list",["tl.name"]).as("fkl"),"fkl.from","txi.name").where("txi.hidden","!=",1).select(["txi.name","txi.pk","txi.type as datatype","fkl.table as fk_table","fkl.to as fk_column"]).select(l=>[l("txi.hidden","in",[2,3]).as("computed"),l("txi.notnull","!=",0).as("nullable")])).as("columns")]),{transformations:{columns:"json-parse"}})}function P(){return[{name:"animals",sql:"CREATE TABLE animals (id INTEGER PRIMARY KEY, name TEXT);",columns:[{name:"id",datatype:"INTEGER",pk:1,computed:0,nullable:0,fk_table:null,fk_column:null},{name:"name",datatype:"TEXT",pk:0,computed:0,nullable:1,fk_table:null,fk_column:null}]},{name:"users",sql:"CREATE TABLE users (id UUID PRIMARY KEY, created_at TIMESTAMP, deleted_at TIMESTAMP, role varchar, name varchar, name_role text);",columns:[{name:"id",datatype:"UUID",pk:1,computed:0,nullable:0,fk_table:null,fk_column:null},{name:"created_at",datatype:"TIMESTAMP",pk:0,computed:0,nullable:1,fk_table:null,fk_column:null},{name:"deleted_at",datatype:"TIMESTAMP",pk:0,computed:0,nullable:1,fk_table:null,fk_column:null},{name:"role",datatype:"varchar",pk:0,computed:0,nullable:1,fk_table:null,fk_column:null},{name:"name",datatype:"varchar",pk:0,computed:0,nullable:1,fk_table:null,fk_column:null},{name:"name_role",datatype:"text",pk:0,computed:0,nullable:1,fk_table:null,fk_column:null}]},{name:"composite_pk",sql:"CREATE TABLE composite_pk (id UUID, name TEXT, created_at timestamp, PRIMARY KEY (id, name));",columns:[{name:"id",datatype:"UUID",pk:1,computed:0,nullable:0,fk_table:null,fk_column:null},{name:"name",datatype:"TEXT",pk:2,computed:0,nullable:1,fk_table:null,fk_column:null},{name:"created_at",datatype:"timestamp",pk:0,computed:0,nullable:1,fk_table:null,fk_column:null}]}]}var T="main",X=["=","!=",">",">=","<","<=","is","is not","like","not like"];function be(r){let{executor:t,...l}=r;return{defaultSchema:T,async delete(o,n){try{let e=N(o,l),[a]=await t.execute(e,n);return a?i({error:a,query:e}):[null,{...o,query:e}]}catch(e){return i({error:e})}},async insert(o,n){try{let e=C(o,l),[a,u]=await t.execute(e,n);return a?i({error:a,query:e}):[null,{rows:u,query:e}]}catch(e){return i({error:e})}},async introspect(o){try{let n=M(r),[e,a]=await t.execute(n,o);return e?i({error:e,query:n}):[null,G({query:n,tables:a})]}catch(n){return i({error:n})}},async query(o,n){try{let e=S(o,l),[a,u]=await t.execute(e,n);return a?i({error:a,query:e}):[null,{filteredRowCount:u[0]?.__ps_count__||"0",rows:u,query:e}]}catch(e){return i({error:e})}},async update(o,n){try{let e=F(o,l),[a,u]=await t.execute(e,n);if(a)return i({error:a,query:e});let[c]=u;return c?[null,{row:c,query:e}]:i({error:new Error("Update failed"),query:e})}catch(e){return i({error:e})}}}}function G(r){let{tables:t,query:l}=r;return{filterOperators:X,query:l,schemas:t.reduce((o,n)=>{let{columns:e,name:a,sql:u}=n,c=e.reduce((b,p)=>{let{datatype:A,fk_column:k,name:m,pk:R}=p,g=D(A),h=!!p.computed,x=!!p.nullable;return b[m]={datatype:{...j[g],affinity:g,isArray:!1,isNative:!0,name:A,options:[],schema:T},defaultValue:null,fkColumn:k,fkSchema:k?T:null,fkTable:p.fk_table,isAutoincrement:!1,isComputed:h,isRequired:!x&&!h,name:m,nullable:x,pkPosition:R>0?R:null,schema:T,table:a},b},{});return o.main.tables[a]={columns:c,name:a,schema:"main"},o},{main:{tables:{},name:"main"}}),timezone:"UTC"}}function Ae(){let r={parameters:[],sql:"<mocked>"},t=P();return G({query:r,tables:t})}export{be as createSQLiteAdapter,N as getDeleteQuery,C as getInsertQuery,S as getSelectQuery,M as getTablesQuery,F as getUpdateQuery,Ae as mockIntrospect,ee as mockSelectQuery,P as mockTablesQuery};
10
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vZGF0YS9zcWxpdGUtY29yZS9pbmRleC50cyIsICIuLi8uLi8uLi9kYXRhL3NxbGl0ZS1jb3JlL2FkYXB0ZXIudHMiLCAiLi4vLi4vLi4vZGF0YS9zcWxpdGUtY29yZS9kYXRhdHlwZS50cyIsICIuLi8uLi8uLi9kYXRhL3NxbGl0ZS1jb3JlL2RtbC50cyIsICIuLi8uLi8uLi9kYXRhL3NxbGl0ZS1jb3JlL2J1aWxkZXIudHMiLCAiLi4vLi4vLi4vZGF0YS9zcWxpdGUtY29yZS9pbnRyb3NwZWN0aW9uLnRzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9reXNlbHlAMC4yOC44L25vZGVfbW9kdWxlcy9reXNlbHkvZGlzdC9lc20vaGVscGVycy9zcWxpdGUuanMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbImV4cG9ydCAqIGZyb20gXCIuL2FkYXB0ZXJcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2RtbFwiO1xuZXhwb3J0ICogZnJvbSBcIi4vaW50cm9zcGVjdGlvblwiO1xuIiwgImltcG9ydCB7XG4gIHR5cGUgQWRhcHRlcixcbiAgdHlwZSBBZGFwdGVyRGVsZXRlUmVzdWx0LFxuICB0eXBlIEFkYXB0ZXJFcnJvcixcbiAgdHlwZSBBZGFwdGVySW5zZXJ0UmVzdWx0LFxuICB0eXBlIEFkYXB0ZXJJbnRyb3NwZWN0UmVzdWx0LFxuICB0eXBlIEFkYXB0ZXJRdWVyeVJlc3VsdCxcbiAgdHlwZSBBZGFwdGVyUmVxdWlyZW1lbnRzLFxuICB0eXBlIEFkYXB0ZXJVcGRhdGVSZXN1bHQsXG4gIGNyZWF0ZUFkYXB0ZXJFcnJvcixcbiAgdHlwZSBGaWx0ZXJPcGVyYXRvcixcbiAgdHlwZSBUYWJsZSxcbn0gZnJvbSBcIi4uL2FkYXB0ZXJcIjtcbmltcG9ydCB0eXBlIHsgUXVlcnksIFF1ZXJ5UmVzdWx0IH0gZnJvbSBcIi4uL3F1ZXJ5XCI7XG5pbXBvcnQgdHlwZSB7IEVpdGhlciB9IGZyb20gXCIuLi90eXBlLXV0aWxzXCI7XG5pbXBvcnQgeyBkZXRlcm1pbmVDb2x1bW5BZmZpbml0eSwgU1FMSVRFX0FGRklOSVRZX1RPX01FVEFEQVRBIH0gZnJvbSBcIi4vZGF0YXR5cGVcIjtcbmltcG9ydCB7IGdldERlbGV0ZVF1ZXJ5LCBnZXRJbnNlcnRRdWVyeSwgZ2V0U2VsZWN0UXVlcnksIGdldFVwZGF0ZVF1ZXJ5IH0gZnJvbSBcIi4vZG1sXCI7XG5pbXBvcnQgeyBnZXRUYWJsZXNRdWVyeSwgbW9ja1RhYmxlc1F1ZXJ5IH0gZnJvbSBcIi4vaW50cm9zcGVjdGlvblwiO1xuXG5leHBvcnQgdHlwZSBTUUxJdGVBZGFwdGVyUmVxdWlyZW1lbnRzID0gQWRhcHRlclJlcXVpcmVtZW50cztcblxuY29uc3Qgc2NoZW1hID0gXCJtYWluXCI7XG5cbmNvbnN0IGZpbHRlck9wZXJhdG9ycyA9IFtcbiAgXCI9XCIsXG4gIFwiIT1cIixcbiAgXCI+XCIsXG4gIFwiPj1cIixcbiAgXCI8XCIsXG4gIFwiPD1cIixcbiAgXCJpc1wiLFxuICBcImlzIG5vdFwiLFxuICBcImxpa2VcIixcbiAgXCJub3QgbGlrZVwiLFxuXSBzYXRpc2ZpZXMgRmlsdGVyT3BlcmF0b3JbXTtcblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVNRTGl0ZUFkYXB0ZXIocmVxdWlyZW1lbnRzOiBTUUxJdGVBZGFwdGVyUmVxdWlyZW1lbnRzKTogQWRhcHRlciB7XG4gIGNvbnN0IHsgZXhlY3V0b3IsIC4uLm90aGVyUmVxdWlyZW1lbnRzIH0gPSByZXF1aXJlbWVudHM7XG5cbiAgcmV0dXJuIHtcbiAgICBkZWZhdWx0U2NoZW1hOiBzY2hlbWEsXG5cbiAgICBhc3luYyBkZWxldGUoZGV0YWlscywgb3B0aW9ucyk6IFByb21pc2U8RWl0aGVyPEFkYXB0ZXJFcnJvciwgQWRhcHRlckRlbGV0ZVJlc3VsdD4+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHF1ZXJ5ID0gZ2V0RGVsZXRlUXVlcnkoZGV0YWlscywgb3RoZXJSZXF1aXJlbWVudHMpO1xuXG4gICAgICAgIC8vIFRPRE86IHVzZSByZXN1bHRzIHRvby5cbiAgICAgICAgY29uc3QgW2Vycm9yXSA9IGF3YWl0IGV4ZWN1dG9yLmV4ZWN1dGUocXVlcnksIG9wdGlvbnMpO1xuXG4gICAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgIHJldHVybiBjcmVhdGVBZGFwdGVyRXJyb3IoeyBlcnJvciwgcXVlcnkgfSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gW251bGwsIHsgLi4uZGV0YWlscywgcXVlcnkgfV07XG4gICAgICB9IGNhdGNoIChlcnJvcjogdW5rbm93bikge1xuICAgICAgICByZXR1cm4gY3JlYXRlQWRhcHRlckVycm9yKHsgZXJyb3I6IGVycm9yIGFzIEVycm9yIH0pO1xuICAgICAgfVxuICAgIH0sXG5cbiAgICBhc3luYyBpbnNlcnQoZGV0YWlscywgb3B0aW9ucyk6IFByb21pc2U8RWl0aGVyPEFkYXB0ZXJFcnJvciwgQWRhcHRlckluc2VydFJlc3VsdD4+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHF1ZXJ5ID0gZ2V0SW5zZXJ0UXVlcnkoZGV0YWlscywgb3RoZXJSZXF1aXJlbWVudHMpO1xuXG4gICAgICAgIGNvbnN0IFtlcnJvciwgcm93c10gPSBhd2FpdCBleGVjdXRvci5leGVjdXRlKHF1ZXJ5LCBvcHRpb25zKTtcblxuICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICByZXR1cm4gY3JlYXRlQWRhcHRlckVycm9yKHsgZXJyb3IsIHF1ZXJ5IH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIFtudWxsLCB7IHJvd3MsIHF1ZXJ5IH1dO1xuICAgICAgfSBjYXRjaCAoZXJyb3I6IHVua25vd24pIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZUFkYXB0ZXJFcnJvcih7IGVycm9yOiBlcnJvciBhcyBFcnJvciB9KTtcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgYXN5bmMgaW50cm9zcGVjdChvcHRpb25zKTogUHJvbWlzZTxFaXRoZXI8QWRhcHRlckVycm9yLCBBZGFwdGVySW50cm9zcGVjdFJlc3VsdD4+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHRhYmxlc1F1ZXJ5ID0gZ2V0VGFibGVzUXVlcnkocmVxdWlyZW1lbnRzKTtcblxuICAgICAgICBjb25zdCBbdGFibGVzRXJyb3IsIHRhYmxlc10gPSBhd2FpdCBleGVjdXRvci5leGVjdXRlKHRhYmxlc1F1ZXJ5LCBvcHRpb25zKTtcblxuICAgICAgICBpZiAodGFibGVzRXJyb3IpIHtcbiAgICAgICAgICByZXR1cm4gY3JlYXRlQWRhcHRlckVycm9yKHsgZXJyb3I6IHRhYmxlc0Vycm9yLCBxdWVyeTogdGFibGVzUXVlcnkgfSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gW251bGwsIGNyZWF0ZUludHJvc3BlY3Rpb24oeyBxdWVyeTogdGFibGVzUXVlcnksIHRhYmxlcyB9KV07XG4gICAgICB9IGNhdGNoIChlcnJvcjogdW5rbm93bikge1xuICAgICAgICByZXR1cm4gY3JlYXRlQWRhcHRlckVycm9yKHsgZXJyb3I6IGVycm9yIGFzIEVycm9yIH0pO1xuICAgICAgfVxuICAgIH0sXG5cbiAgICBhc3luYyBxdWVyeShkZXRhaWxzLCBvcHRpb25zKTogUHJvbWlzZTxFaXRoZXI8QWRhcHRlckVycm9yLCBBZGFwdGVyUXVlcnlSZXN1bHQ+PiB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBxdWVyeSA9IGdldFNlbGVjdFF1ZXJ5KGRldGFpbHMsIG90aGVyUmVxdWlyZW1lbnRzKTtcblxuICAgICAgICBjb25zdCBbZXJyb3IsIHJlc3VsdHNdID0gYXdhaXQgZXhlY3V0b3IuZXhlY3V0ZShxdWVyeSwgb3B0aW9ucyk7XG5cbiAgICAgICAgaWYgKGVycm9yKSB7XG4gICAgICAgICAgcmV0dXJuIGNyZWF0ZUFkYXB0ZXJFcnJvcih7IGVycm9yLCBxdWVyeSB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBbbnVsbCwgeyBmaWx0ZXJlZFJvd0NvdW50OiByZXN1bHRzWzBdPy5fX3BzX2NvdW50X18gfHwgXCIwXCIsIHJvd3M6IHJlc3VsdHMsIHF1ZXJ5IH1dO1xuICAgICAgfSBjYXRjaCAoZXJyb3I6IHVua25vd24pIHtcbiAgICAgICAgLy8gVE9ETzogaGFuZGxlIHByb3Blcmx5XG4gICAgICAgIHJldHVybiBjcmVhdGVBZGFwdGVyRXJyb3IoeyBlcnJvcjogZXJyb3IgYXMgRXJyb3IgfSk7XG4gICAgICB9XG4gICAgfSxcblxuICAgIGFzeW5jIHVwZGF0ZShkZXRhaWxzLCBvcHRpb25zKTogUHJvbWlzZTxFaXRoZXI8QWRhcHRlckVycm9yLCBBZGFwdGVyVXBkYXRlUmVzdWx0Pj4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcXVlcnkgPSBnZXRVcGRhdGVRdWVyeShkZXRhaWxzLCBvdGhlclJlcXVpcmVtZW50cyk7XG5cbiAgICAgICAgY29uc3QgW2Vycm9yLCByZXN1bHRzXSA9IGF3YWl0IGV4ZWN1dG9yLmV4ZWN1dGUocXVlcnksIG9wdGlvbnMpO1xuXG4gICAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgIHJldHVybiBjcmVhdGVBZGFwdGVyRXJyb3IoeyBlcnJvciwgcXVlcnkgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBbcm93XSA9IHJlc3VsdHM7XG5cbiAgICAgICAgaWYgKCFyb3cpIHtcbiAgICAgICAgICAvLyBUT0RPOiBjdXN0b20gZXJyb3I/XG4gICAgICAgICAgcmV0dXJuIGNyZWF0ZUFkYXB0ZXJFcnJvcih7IGVycm9yOiBuZXcgRXJyb3IoXCJVcGRhdGUgZmFpbGVkXCIpLCBxdWVyeSB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBbbnVsbCwgeyByb3csIHF1ZXJ5IH1dO1xuICAgICAgfSBjYXRjaCAoZXJyb3I6IHVua25vd24pIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZUFkYXB0ZXJFcnJvcih7IGVycm9yOiBlcnJvciBhcyBFcnJvciB9KTtcbiAgICAgIH1cbiAgICB9LFxuICB9O1xufVxuXG5mdW5jdGlvbiBjcmVhdGVJbnRyb3NwZWN0aW9uKGFyZ3M6IHtcbiAgdGFibGVzOiBRdWVyeVJlc3VsdDx0eXBlb2YgZ2V0VGFibGVzUXVlcnk+O1xuICBxdWVyeTogUXVlcnk7XG59KTogQWRhcHRlckludHJvc3BlY3RSZXN1bHQge1xuICBjb25zdCB7IHRhYmxlcywgcXVlcnk6IHRhYmxlc1F1ZXJ5IH0gPSBhcmdzO1xuXG4gIHJldHVybiB7XG4gICAgZmlsdGVyT3BlcmF0b3JzLFxuICAgIHF1ZXJ5OiB0YWJsZXNRdWVyeSxcbiAgICBzY2hlbWFzOiB0YWJsZXMucmVkdWNlKFxuICAgICAgKHNjaGVtYXMsIHRhYmxlKSA9PiB7XG4gICAgICAgIGNvbnN0IHsgY29sdW1ucywgbmFtZTogdGFibGVOYW1lLCBzcWw6IF9zcWwgfSA9IHRhYmxlO1xuXG4gICAgICAgIGNvbnN0IGNvbHVtbnNSZWNvcmQgPSBjb2x1bW5zLnJlZHVjZShcbiAgICAgICAgICAoY29sdW1ucywgY29sdW1uKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB7IGRhdGF0eXBlLCBma19jb2x1bW4sIG5hbWU6IGNvbHVtbk5hbWUsIHBrIH0gPSBjb2x1bW47XG5cbiAgICAgICAgICAgIGNvbnN0IGFmZmluaXR5ID0gZGV0ZXJtaW5lQ29sdW1uQWZmaW5pdHkoZGF0YXR5cGUpO1xuXG4gICAgICAgICAgICBjb25zdCBpc0NvbXB1dGVkID0gQm9vbGVhbihjb2x1bW4uY29tcHV0ZWQpO1xuICAgICAgICAgICAgY29uc3QgbnVsbGFibGUgPSBCb29sZWFuKGNvbHVtbi5udWxsYWJsZSk7XG5cbiAgICAgICAgICAgIGNvbHVtbnNbY29sdW1uTmFtZV0gPSB7XG4gICAgICAgICAgICAgIGRhdGF0eXBlOiB7XG4gICAgICAgICAgICAgICAgLy8gVE9ETzogd29ydGggZXhwbG9yaW5nIHN0aWxsIHZpYmluZyB3aXRoIHRoZSBkZWNsYXJlZCBkYXRhIHR5cGUgZm9yIHN0dWZmIGxpa2UgZGF0ZXMgaW4gdGhlIGZ1dHVyZS5cbiAgICAgICAgICAgICAgICAuLi5TUUxJVEVfQUZGSU5JVFlfVE9fTUVUQURBVEFbYWZmaW5pdHldLFxuICAgICAgICAgICAgICAgIGFmZmluaXR5LFxuICAgICAgICAgICAgICAgIGlzQXJyYXk6IGZhbHNlLFxuICAgICAgICAgICAgICAgIGlzTmF0aXZlOiB0cnVlLFxuICAgICAgICAgICAgICAgIG5hbWU6IGRhdGF0eXBlLFxuICAgICAgICAgICAgICAgIC8vIFRPRE86IHVzZSBgdGFibGUuc3FsYCB0byBkZXRlcm1pbmUgZW51bSBvcHRpb25zIGZyb20gYGNoZWNrYCBjb25zdHJhaW50cy5cbiAgICAgICAgICAgICAgICBvcHRpb25zOiBbXSxcbiAgICAgICAgICAgICAgICBzY2hlbWEsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIC8vIFRPRE86IGludHJvc3BlY3Qgc3FsaXRlIGRlZmF1bHQgdmFsdWVzLlxuICAgICAgICAgICAgICBkZWZhdWx0VmFsdWU6IG51bGwsXG4gICAgICAgICAgICAgIGZrQ29sdW1uOiBma19jb2x1bW4sXG4gICAgICAgICAgICAgIGZrU2NoZW1hOiBma19jb2x1bW4gPyBzY2hlbWEgOiBudWxsLFxuICAgICAgICAgICAgICBma1RhYmxlOiBjb2x1bW4uZmtfdGFibGUsXG4gICAgICAgICAgICAgIC8vIFRPRE86IHVzZSBgdGFibGUuc3FsYCB0byBkZXRlcm1pbmUgYXV0b2luY3JlbWVudFxuICAgICAgICAgICAgICBpc0F1dG9pbmNyZW1lbnQ6IGZhbHNlLFxuICAgICAgICAgICAgICBpc0NvbXB1dGVkLFxuICAgICAgICAgICAgICAvLyBUT0RPOiBhbHNvIGhhbmRsZSAhYXV0b2luYyAmJiBkZWZhdWx0ID09IG51bGxcbiAgICAgICAgICAgICAgaXNSZXF1aXJlZDogIW51bGxhYmxlICYmICFpc0NvbXB1dGVkLFxuICAgICAgICAgICAgICBuYW1lOiBjb2x1bW5OYW1lLFxuICAgICAgICAgICAgICBudWxsYWJsZSxcbiAgICAgICAgICAgICAgcGtQb3NpdGlvbjogcGsgPiAwID8gcGsgOiBudWxsLFxuICAgICAgICAgICAgICBzY2hlbWEsXG4gICAgICAgICAgICAgIHRhYmxlOiB0YWJsZU5hbWUsXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICByZXR1cm4gY29sdW1ucztcbiAgICAgICAgICB9LFxuICAgICAgICAgIHt9IGFzIFRhYmxlW1wiY29sdW1uc1wiXSxcbiAgICAgICAgKTtcblxuICAgICAgICBzY2hlbWFzLm1haW4hLnRhYmxlc1t0YWJsZU5hbWVdID0ge1xuICAgICAgICAgIGNvbHVtbnM6IGNvbHVtbnNSZWNvcmQsXG4gICAgICAgICAgbmFtZTogdGFibGVOYW1lLFxuICAgICAgICAgIHNjaGVtYTogXCJtYWluXCIsXG4gICAgICAgIH07XG5cbiAgICAgICAgcmV0dXJuIHNjaGVtYXM7XG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBtYWluOiB7IHRhYmxlczoge30sIG5hbWU6IFwibWFpblwiIH0sXG4gICAgICB9IHNhdGlzZmllcyBBZGFwdGVySW50cm9zcGVjdFJlc3VsdFtcInNjaGVtYXNcIl0gYXMgQWRhcHRlckludHJvc3BlY3RSZXN1bHRbXCJzY2hlbWFzXCJdLFxuICAgICksXG4gICAgdGltZXpvbmU6IFwiVVRDXCIsXG4gIH07XG59XG5cbi8qKlxuICogRm9yIHRlc3RpbmcgcHVycG9zZXMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtb2NrSW50cm9zcGVjdCgpIHtcbiAgY29uc3QgcXVlcnkgPSB7IHBhcmFtZXRlcnM6IFtdLCBzcWw6IFwiPG1vY2tlZD5cIiB9IGFzIFF1ZXJ5O1xuICBjb25zdCB0YWJsZXMgPSBtb2NrVGFibGVzUXVlcnkoKTtcblxuICByZXR1cm4gY3JlYXRlSW50cm9zcGVjdGlvbih7IHF1ZXJ5LCB0YWJsZXMgfSkgYXMge1xuICAgIC8vIGJlc3QgZWZmb3J0LCBubyBuZWVkIGdvIG92ZXJib2FyZC5cbiAgICBzY2hlbWFzOiB7XG4gICAgICBtYWluOiB7XG4gICAgICAgIG5hbWU6IFwibWFpblwiO1xuICAgICAgICB0YWJsZXM6IHtcbiAgICAgICAgICBbVCBpbiAodHlwZW9mIHRhYmxlcylbbnVtYmVyXVtcIm5hbWVcIl1dOiBUYWJsZTtcbiAgICAgICAgfTtcbiAgICAgIH07XG4gICAgfTtcbiAgICB0aW1lem9uZTogc3RyaW5nO1xuICAgIGZpbHRlck9wZXJhdG9yczogRmlsdGVyT3BlcmF0b3JbXTtcbiAgICBxdWVyeTogUXVlcnk7XG4gIH0gc2F0aXNmaWVzIEFkYXB0ZXJJbnRyb3NwZWN0UmVzdWx0O1xufVxuIiwgImltcG9ydCB0eXBlIHsgRGF0YVR5cGUgfSBmcm9tIFwiLi4vYWRhcHRlclwiO1xuXG5leHBvcnQgdHlwZSBTUUxpdGVBZmZpbml0eSA9IFwiQkxPQlwiIHwgXCJJTlRFR0VSXCIgfCBcIk5VTExcIiB8IFwiTlVNRVJJQ1wiIHwgXCJSRUFMXCIgfCBcIlRFWFRcIjtcblxuZXhwb3J0IGNvbnN0IFNRTElURV9BRkZJTklUWV9UT19NRVRBREFUQTogUmVjb3JkPFNRTGl0ZUFmZmluaXR5LCBQaWNrPERhdGFUeXBlLCBcImZvcm1hdFwiIHwgXCJncm91cFwiPj4gPSB7XG4gIEJMT0I6IHtcbiAgICBncm91cDogXCJyYXdcIixcbiAgfSxcbiAgSU5URUdFUjoge1xuICAgIGdyb3VwOiBcIm51bWVyaWNcIixcbiAgfSxcbiAgTlVMTDoge1xuICAgIGdyb3VwOiBcInJhd1wiLFxuICB9LFxuICBOVU1FUklDOiB7XG4gICAgZ3JvdXA6IFwibnVtZXJpY1wiLFxuICB9LFxuICBSRUFMOiB7XG4gICAgZ3JvdXA6IFwibnVtZXJpY1wiLFxuICB9LFxuICBURVhUOiB7XG4gICAgZ3JvdXA6IFwic3RyaW5nXCIsXG4gIH0sXG59O1xuXG4vKipcbiAqIGh0dHBzOi8vc3FsaXRlLm9yZy9kYXRhdHlwZTMuaHRtbCNkZXRlcm1pbmF0aW9uX29mX2NvbHVtbl9hZmZpbml0eVxuICpcbiAqIERPIE5PVCBDSEFOR0UgVEhFIE9SREVSIE9GIFRIRSBDSEVDS1MgSU4gVEhJUyBGVU5DVElPTiFcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRldGVybWluZUNvbHVtbkFmZmluaXR5KGRlY2xhcmVkRGF0YVR5cGU6IHN0cmluZyB8IG51bGwpOiBTUUxpdGVBZmZpbml0eSB7XG4gIGlmICghZGVjbGFyZWREYXRhVHlwZSkge1xuICAgIHJldHVybiBcIkJMT0JcIjtcbiAgfVxuXG4gIGNvbnN0IHVwcGVyVHlwZSA9IGRlY2xhcmVkRGF0YVR5cGUudG9VcHBlckNhc2UoKTtcblxuICBpZiAodXBwZXJUeXBlLmluY2x1ZGVzKFwiSU5UXCIpKSB7XG4gICAgcmV0dXJuIFwiSU5URUdFUlwiO1xuICB9XG5cbiAgaWYgKHVwcGVyVHlwZS5pbmNsdWRlcyhcIlRFWFRcIikgfHwgdXBwZXJUeXBlLmluY2x1ZGVzKFwiQ0hBUlwiKSB8fCB1cHBlclR5cGUuaW5jbHVkZXMoXCJDTE9CXCIpKSB7XG4gICAgcmV0dXJuIFwiVEVYVFwiO1xuICB9XG5cbiAgaWYgKHVwcGVyVHlwZS5pbmNsdWRlcyhcIkJMT0JcIikpIHtcbiAgICByZXR1cm4gXCJCTE9CXCI7XG4gIH1cblxuICBpZiAodXBwZXJUeXBlLmluY2x1ZGVzKFwiUkVBTFwiKSB8fCB1cHBlclR5cGUuaW5jbHVkZXMoXCJGTE9BXCIpIHx8IHVwcGVyVHlwZS5pbmNsdWRlcyhcIkRPVUJcIikpIHtcbiAgICByZXR1cm4gXCJSRUFMXCI7XG4gIH1cblxuICByZXR1cm4gXCJOVU1FUklDXCI7XG59XG4iLCAiaW1wb3J0IHsgZXhwcmVzc2lvbkJ1aWxkZXIsIHR5cGUgSW5mZXJSZXN1bHQsIHNxbCB9IGZyb20gXCJreXNlbHlcIjtcbmltcG9ydCB7IFNpbXBsZVJlZmVyZW5jZUV4cHJlc3Npb24gfSBmcm9tIFwia3lzZWx5XCI7XG5cbmltcG9ydCB0eXBlIHsgQWRhcHRlckRlbGV0ZURldGFpbHMsIEFkYXB0ZXJJbnNlcnREZXRhaWxzLCBBZGFwdGVyUXVlcnlEZXRhaWxzLCBBZGFwdGVyVXBkYXRlRGV0YWlscyB9IGZyb20gXCIuLi9hZGFwdGVyXCI7XG5pbXBvcnQgeyBhcHBseUluZmVycmVkUm93RmlsdGVycywgdHlwZSBCdWlsZGVyUmVxdWlyZW1lbnRzLCBjb21waWxlLCBnZXRTZWxlY3RGaWx0ZXJFeHByZXNzaW9uIH0gZnJvbSBcIi4uL3F1ZXJ5XCI7XG5pbXBvcnQgdHlwZSB7IEJpZ0ludFN0cmluZyB9IGZyb20gXCIuLi90eXBlLXV0aWxzXCI7XG5pbXBvcnQgeyBnZXRTUUxpdGVCdWlsZGVyIH0gZnJvbSBcIi4vYnVpbGRlclwiO1xuaW1wb3J0IHsgbW9ja1RhYmxlc1F1ZXJ5IH0gZnJvbSBcIi4vaW50cm9zcGVjdGlvblwiO1xuXG4vKipcbiAqIFJldHVybnMgYSBxdWVyeSB0aGF0IHNlbGVjdHMgYWxsIGNvbHVtbnMgZnJvbSBhIHRhYmxlIHdpdGggYW4gdW5ib3VuZCByb3cgY291bnQgYXMgYF9fcHNfY291bnRfX2AuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRTZWxlY3RRdWVyeShcbiAgZGV0YWlsczogQWRhcHRlclF1ZXJ5RGV0YWlscyxcbiAgcmVxdWlyZW1lbnRzPzogT21pdDxCdWlsZGVyUmVxdWlyZW1lbnRzLCBcIkFkYXB0ZXJcIiB8IFwiUXVlcnlDb21waWxlclwiPixcbikge1xuICBjb25zdCB7XG4gICAgZmlsdGVyID0geyBhZnRlcjogXCJhbmRcIiwgZmlsdGVyczogW10sIGtpbmQ6IFwiRmlsdGVyR3JvdXBcIiB9LFxuICAgIHBhZ2VJbmRleCxcbiAgICBwYWdlU2l6ZSxcbiAgICBzb3J0T3JkZXIsXG4gICAgdGFibGU6IHsgY29sdW1ucywgbmFtZTogdGFibGVOYW1lIH0sXG4gIH0gPSBkZXRhaWxzO1xuXG4gIGNvbnN0IGJ1aWxkZXIgPSBnZXRTUUxpdGVCdWlsZGVyPFJlY29yZDxzdHJpbmcsIFJlY29yZDxzdHJpbmcsIHVua25vd24+Pj4ocmVxdWlyZW1lbnRzKTtcblxuICBjb25zdCBmaWx0ZXJFeHByZXNzaW9uID0gZ2V0U2VsZWN0RmlsdGVyRXhwcmVzc2lvbihmaWx0ZXIuZmlsdGVycywgY29sdW1ucyk7XG5cbiAgY29uc3QgQUdHX05BTUUgPSBcIl9fcHNfYWdnX19cIjtcbiAgY29uc3QgQ09VTlRfUkVGID0gXCJfX3BzX2NvdW50X19cIjtcblxuICBjb25zdCBjb3VudFF1ZXJ5ID0gYnVpbGRlclxuICAgIC5zZWxlY3RGcm9tKHRhYmxlTmFtZSlcbiAgICAud2hlcmUoZmlsdGVyRXhwcmVzc2lvbilcbiAgICAuc2VsZWN0KChlYikgPT4gZWIuY2FzdDxCaWdJbnRTdHJpbmc+KGViLmZuLmNvYWxlc2NlKGViLmZuLmNvdW50QWxsKCksIHNxbC5saXQoMCkpLCBcInRleHRcIikuYXMoQ09VTlRfUkVGKSk7XG5cbiAgcmV0dXJuIGNvbXBpbGUoXG4gICAgYnVpbGRlclxuICAgICAgLndpdGgoQUdHX05BTUUsICgpID0+IGNvdW50UXVlcnkpXG4gICAgICAuc2VsZWN0RnJvbSh0YWJsZU5hbWUpXG4gICAgICAuaW5uZXJKb2luKEFHR19OQU1FLCAoamIpID0+IGpiLm9uVHJ1ZSgpKVxuICAgICAgLy8gVE9ETzogY3Vyc29yIHBhZ2luYXRpb24/XG4gICAgICAud2hlcmUoZmlsdGVyRXhwcmVzc2lvbilcbiAgICAgIC5zZWxlY3QoXG4gICAgICAgIGAke0FHR19OQU1FfS4ke0NPVU5UX1JFRn1gIHNhdGlzZmllcyBTaW1wbGVSZWZlcmVuY2VFeHByZXNzaW9uPFxuICAgICAgICAgIHsgW0FHR19OQU1FXTogSW5mZXJSZXN1bHQ8dHlwZW9mIGNvdW50UXVlcnk+W251bWJlcl0gfSxcbiAgICAgICAgICB0eXBlb2YgQUdHX05BTUVcbiAgICAgICAgPixcbiAgICAgIClcbiAgICAgIC5zZWxlY3QoT2JqZWN0LmtleXMoY29sdW1ucykpXG4gICAgICAuJGNhbGwoKHFiKSA9PiBzb3J0T3JkZXIucmVkdWNlKChxYiwgaXRlbSkgPT4gcWIub3JkZXJCeShpdGVtLmNvbHVtbiwgaXRlbS5kaXJlY3Rpb24pLCBxYikpXG4gICAgICAubGltaXQocGFnZVNpemUpXG4gICAgICAvLyB3ZSdyZSBpbmplY3RpbmcgdGhlIG9mZnNldCB2YWx1ZSBoZXJlIHRvIGF2b2lkIHNlcmlhbGl6YXRpb24gY29tcGxleGl0eSAoYGJpZ2ludGAgaXMgYSBuby1nbyBmb3IgYEpTT04uc3RyaW5naWZ5YCkuXG4gICAgICAub2Zmc2V0KHNxbC5saXQoQmlnSW50KHBhZ2VJbmRleCkgKiBCaWdJbnQocGFnZVNpemUpKSksXG4gICk7XG59XG5cbi8qKlxuICogRm9yIHRlc3RpbmcgcHVycG9zZXMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtb2NrU2VsZWN0UXVlcnkoKSB7XG4gIHJldHVybiBbXG4gICAge1xuICAgICAgY3JlYXRlZF9hdDogbmV3IERhdGUoXCIyMDI1LTAxLTI2VDIxOjU2OjEyLjM0NVpcIiksXG4gICAgICBkZWxldGVkX2F0OiBudWxsLFxuICAgICAgaWQ6IDEsXG4gICAgICBuYW1lOiBcIkpvaG4gRG9lXCIsXG4gICAgICBfX3BzX2NvdW50X186IFwiMlwiLFxuICAgICAgcm9sZTogXCJhZG1pblwiLFxuICAgICAgbmFtZV9yb2xlOiBcIkpvbm4gRG9lIC0gYWRtaW5cIixcbiAgICB9LFxuICAgIHtcbiAgICAgIGNyZWF0ZWRfYXQ6IG5ldyBEYXRlKFwiMjAyNS0wMS0yNlQyMDo1NjoxMi4zNDVaXCIpLFxuICAgICAgZGVsZXRlZF9hdDogbnVsbCxcbiAgICAgIGlkOiAyLFxuICAgICAgbmFtZTogXCJKYW5lIERvZVwiLFxuICAgICAgX19wc19jb3VudF9fOiBcIjJcIixcbiAgICAgIHJvbGU6IFwicG93ZXJ1c2VyXCIsXG4gICAgICBuYW1lX3JvbGU6IFwiSmFuZSBEb2UgLSBwb3dlcnVzZXJcIixcbiAgICB9LFxuICBdIGFzIGNvbnN0IHNhdGlzZmllcyB7XG4gICAgLy8gYmVzdCBlZmZvcnQgbm8gbmVlZCB0byBnbyBvdmVyYm9hcmRcbiAgICBbSyBpbiBSZXR1cm5UeXBlPHR5cGVvZiBtb2NrVGFibGVzUXVlcnk+WzFdW1wiY29sdW1uc1wiXVtudW1iZXJdW1wibmFtZVwiXSB8IFwiX19wc19jb3VudF9fXCJdOiB1bmtub3duO1xuICB9W107XG59XG5cbi8qKlxuICogUmV0dXJucyBhIHF1ZXJ5IHRoYXQgZGVsZXRlcyBhIGdpdmVuIHNldCBvZiByb3dzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGVsZXRlUXVlcnkoXG4gIGRldGFpbHM6IEFkYXB0ZXJEZWxldGVEZXRhaWxzLFxuICByZXF1aXJlbWVudHM/OiBPbWl0PEJ1aWxkZXJSZXF1aXJlbWVudHMsIFwiQWRhcHRlclwiIHwgXCJRdWVyeUNvbXBpbGVyXCI+LFxuKSB7XG4gIGNvbnN0IHtcbiAgICByb3dzLFxuICAgIHRhYmxlOiB7IGNvbHVtbnMsIG5hbWU6IHRhYmxlTmFtZSB9LFxuICB9ID0gZGV0YWlscztcblxuICBjb25zdCBidWlsZGVyID0gZ2V0U1FMaXRlQnVpbGRlcjxSZWNvcmQ8c3RyaW5nLCBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4+KHJlcXVpcmVtZW50cyk7XG5cbiAgcmV0dXJuIGNvbXBpbGUoXG4gICAgYnVpbGRlclxuICAgICAgLmRlbGV0ZUZyb20odGFibGVOYW1lKVxuICAgICAgLiRjYWxsKGFwcGx5SW5mZXJyZWRSb3dGaWx0ZXJzKHJvd3MsIGNvbHVtbnMpKVxuICAgICAgLnJldHVybmluZyhPYmplY3Qua2V5cyhjb2x1bW5zKSlcbiAgICAgIC5yZXR1cm5pbmcoZ2V0Q3VycmVudFRpbWVzdGFtcE1pbGxpcygpLmFzKFwiX19wc19kZWxldGVkX2F0X19cIikpLFxuICApO1xufVxuXG4vKipcbiAqIEluc2VydHMgb25lIG9yIG1vcmUgcm93cyBpbnRvIGEgdGFibGUgYW5kIHJldHVybnMgdGhlIGluc2VydGVkIHJvd3MgYWxvbmcgd2l0aCB0aGVpciBgY3RpZGAuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRJbnNlcnRRdWVyeShcbiAgZGV0YWlsczogQWRhcHRlckluc2VydERldGFpbHMsXG4gIHJlcXVpcmVtZW50cz86IE9taXQ8QnVpbGRlclJlcXVpcmVtZW50cywgXCJBZGFwdGVyXCIgfCBcIlF1ZXJ5Q29tcGlsZXJcIj4sXG4pIHtcbiAgY29uc3Qge1xuICAgIHRhYmxlOiB7IGNvbHVtbnMsIG5hbWU6IHRhYmxlTmFtZSB9LFxuICAgIHJvd3MsXG4gIH0gPSBkZXRhaWxzO1xuXG4gIGNvbnN0IGJ1aWxkZXIgPSBnZXRTUUxpdGVCdWlsZGVyPFJlY29yZDxzdHJpbmcsIFJlY29yZDxzdHJpbmcsIHVua25vd24+Pj4ocmVxdWlyZW1lbnRzKTtcblxuICByZXR1cm4gY29tcGlsZShcbiAgICBidWlsZGVyXG4gICAgICAuaW5zZXJ0SW50byh0YWJsZU5hbWUpXG4gICAgICAudmFsdWVzKHJvd3MubWFwKChyb3cpID0+IChPYmplY3Qua2V5cyhyb3cpLmxlbmd0aCA9PT0gMCA/IHsgW09iamVjdC5rZXlzKGNvbHVtbnMpWzBdIV06IG51bGwgfSA6IHJvdykpKVxuICAgICAgLnJldHVybmluZyhPYmplY3Qua2V5cyhjb2x1bW5zKSlcbiAgICAgIC5yZXR1cm5pbmcoZ2V0Q3VycmVudFRpbWVzdGFtcE1pbGxpcygpLmFzKFwiX19wc19pbnNlcnRlZF9hdF9fXCIpKSxcbiAgKTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGEgcXVlcnkgdGhhdCB1cGRhdGVzIGEgZ2l2ZW4gcm93IGluIGEgdGFibGUgd2l0aCBnaXZlbiBjaGFuZ2VzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0VXBkYXRlUXVlcnkoXG4gIGRldGFpbHM6IEFkYXB0ZXJVcGRhdGVEZXRhaWxzLFxuICByZXF1aXJlbWVudHM/OiBPbWl0PEJ1aWxkZXJSZXF1aXJlbWVudHMsIFwiQWRhcHRlclwiIHwgXCJRdWVyeUNvbXBpbGVyXCI+LFxuKSB7XG4gIGNvbnN0IHtcbiAgICBjaGFuZ2VzLFxuICAgIHJvdyxcbiAgICB0YWJsZTogeyBjb2x1bW5zLCBuYW1lOiB0YWJsZU5hbWUgfSxcbiAgfSA9IGRldGFpbHM7XG5cbiAgY29uc3QgYnVpbGRlciA9IGdldFNRTGl0ZUJ1aWxkZXI8UmVjb3JkPHN0cmluZywgUmVjb3JkPHN0cmluZywgdW5rbm93bj4+PihyZXF1aXJlbWVudHMpO1xuXG4gIHJldHVybiBjb21waWxlKFxuICAgIGJ1aWxkZXJcbiAgICAgIC51cGRhdGVUYWJsZSh0YWJsZU5hbWUpXG4gICAgICAuc2V0KGNoYW5nZXMpXG4gICAgICAuJGNhbGwoYXBwbHlJbmZlcnJlZFJvd0ZpbHRlcnMoW3Jvd10sIGNvbHVtbnMpKVxuICAgICAgLnJldHVybmluZyhPYmplY3Qua2V5cyhjb2x1bW5zKSlcbiAgICAgIC5yZXR1cm5pbmcoZ2V0Q3VycmVudFRpbWVzdGFtcE1pbGxpcygpLmFzKFwiX19wc191cGRhdGVkX2F0X19cIikpLFxuICApO1xufVxuXG5mdW5jdGlvbiBnZXRDdXJyZW50VGltZXN0YW1wTWlsbGlzKCkge1xuICBjb25zdCBlYiA9IGV4cHJlc3Npb25CdWlsZGVyKCk7XG5cbiAgcmV0dXJuIGViLmNhc3Q8QmlnSW50U3RyaW5nPihlYi5jYXN0KHNxbGAoanVsaWFuZGF5KCdub3cnKSAtIDI0NDA1ODcuNSkgKiA4NjQwMDAwMC4wYCwgXCJpbnRlZ2VyXCIpLCBcInRleHRcIik7XG59XG4iLCAiaW1wb3J0IHsgdHlwZSBLeXNlbHksIFNxbGl0ZUFkYXB0ZXIsIFNxbGl0ZVF1ZXJ5Q29tcGlsZXIgfSBmcm9tIFwia3lzZWx5XCI7XG5cbmltcG9ydCB7IHR5cGUgQnVpbGRlclJlcXVpcmVtZW50cywgZ2V0QnVpbGRlciB9IGZyb20gXCIuLi9xdWVyeVwiO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuZXhwb3J0IGZ1bmN0aW9uIGdldFNRTGl0ZUJ1aWxkZXI8RGF0YWJhc2UgPSBhbnk+KFxuICByZXF1aXJlbWVudHM/OiBPbWl0PEJ1aWxkZXJSZXF1aXJlbWVudHMsIFwiQWRhcHRlclwiIHwgXCJRdWVyeUNvbXBpbGVyXCI+LFxuKTogS3lzZWx5PERhdGFiYXNlPiB7XG4gIHJldHVybiBnZXRCdWlsZGVyPERhdGFiYXNlPih7XG4gICAgLi4ucmVxdWlyZW1lbnRzLFxuICAgIEFkYXB0ZXI6IFNxbGl0ZUFkYXB0ZXIsXG4gICAgUXVlcnlDb21waWxlcjogU3FsaXRlUXVlcnlDb21waWxlcixcbiAgfSk7XG59XG4iLCAiLyoqXG4gKiBTUUxpdGUgaW50cm9zcGVjdGlvbiBxdWVyaWVzIHRvIGJlIHVzZWQgYnkgdGhlIFNRTGl0ZSBhZGFwdGVyJ3MgaW50cm9zcGVjdCBtZXRob2QuXG4gKiBAbW9kdWxlIHNxbGl0ZS1jb3JlL2ludHJvc3BlY3Rpb25cbiAqXG4gKiBSZWZlcmVuY2VzOlxuICogaHR0cHM6Ly9zcWxpdGUub3JnL3ByYWdtYS5odG1sXG4gKiBodHRwczovL3NxbGl0ZS5vcmcvc2NoZW1hdGFiLmh0bWxcbiAqL1xuXG5pbXBvcnQgeyBleHByZXNzaW9uQnVpbGRlciB9IGZyb20gXCJreXNlbHlcIjtcbmltcG9ydCB7IGpzb25BcnJheUZyb20gfSBmcm9tIFwia3lzZWx5L2hlbHBlcnMvc3FsaXRlXCI7XG5cbmltcG9ydCB7IHR5cGUgQnVpbGRlclJlcXVpcmVtZW50cywgY29tcGlsZSwgdHlwZSBRdWVyeVJlc3VsdCB9IGZyb20gXCIuLi9xdWVyeVwiO1xuaW1wb3J0IHsgZ2V0U1FMaXRlQnVpbGRlciB9IGZyb20gXCIuL2J1aWxkZXJcIjtcblxuaW50ZXJmYWNlIERhdGFiYXNlIHtcbiAgLyoqIHRoZSBtYWluIHN5c3RlbSB0YWJsZSAqL1xuICBzcWxpdGVfc2NoZW1hOiB7XG4gICAgLyoqIG9iamVjdCBuYW1lICovXG4gICAgbmFtZTogc3RyaW5nO1xuICAgIC8qKiBwYWdlIG51bWJlciBpbiByb290IGluZGV4IHdoZW4gb2JqZWN0IGlzIGEgdGFibGUuICovXG4gICAgcm9vdHBhZ2U6IG51bWJlcjtcbiAgICAvKiogc3FsIHN0YXRlbWVudCB0aGF0IGNhbiByZWNyZWF0ZSB0aGUgb2JqZWN0LiBudWxsIHdoZW4gaW50ZXJuYWwgaW5kZXggb2JqZWN0LiAqL1xuICAgIHNxbDogc3RyaW5nIHwgbnVsbDtcbiAgICAvKiogcmVsYXRlZCB0YWJsZS92aWV3IG5hbWUgd2hlbiBvYmplY3QgaXMgYW4gaW5kZXgvdHJpZ2dlci4gKi9cbiAgICB0YmxfbmFtZTogc3RyaW5nO1xuICAgIC8qKiBvYmplY3QgdHlwZSAqL1xuICAgIHR5cGU6IFwiaW5kZXhcIiB8IFwidGFibGVcIiB8IFwidHJpZ2dlclwiIHwgXCJ2aWV3XCI7XG4gIH07XG59XG5cbi8qKlxuICogVGhlIHNoYXBlIG9mIGVhY2ggcm93IHJldHVybmVkIGJ5IGBwcmFnbWFfdGFibGVfbGlzdCh0YWJsZU5hbWU/KWAuXG4gKi9cbmludGVyZmFjZSBQcmFnbWFUYWJsZUxpc3Qge1xuICAvKiogb2JqZWN0IG5hbWUgKi9cbiAgbmFtZTogc3RyaW5nO1xuICAvKiogc2NoZW1hIG5hbWUgKi9cbiAgc2NoZW1hOiBcIm1haW5cIiB8IFwidGVtcFwiO1xuICAvKiogb2JqZWN0IHR5cGUgKi9cbiAgdHlwZTogXCJzaGFkb3dcIiB8IFwidGFibGVcIiB8IFwidmlld1wiIHwgXCJ2aXJ0dWFsXCI7XG59XG5cbi8qKlxuICogVGhlIHNoYXBlIG9mIGVhY2ggcm93IHJldHVybmVkIGJ5IGBwcmFnbWFfdGFibGVfeGluZm8odGFibGVOYW1lKWAuXG4gKi9cbmludGVyZmFjZSBQcmFnbWFUYWJsZVhJbmZvIHtcbiAgLyoqIFwicmFuayB3aXRoaW4gY3VycmVudCByZXN1bHQgc2V0XCIgKi9cbiAgY2lkOiBudW1iZXI7XG4gIC8qKiBkZWZhdWx0IHZhbHVlICovXG4gIGRmbHRfdmFsdWU6IHVua25vd247XG4gIC8qKiAwIC0gbm9ybWFsLCAxIC0gaGlkZGVuLCAyLTMgLSBkeW5hbWljL3N0b3JlZCBnZW5lcmF0ZWQgKi9cbiAgaGlkZGVuOiAwIHwgMSB8IDIgfCAzO1xuICAvKiogY29sdW1uIG5hbWUgKi9cbiAgbmFtZTogc3RyaW5nO1xuICAvKiogd2hldGhlciB0aGUgY29sdW1uIGNhbiBiZSBudWxsICovXG4gIG5vdG51bGw6IDAgfCAxO1xuICAvKiogMCBpZiBub3QgcGFydCBvZiB0aGUgcHJpbWFyeSBrZXksIG90aGVyd2lzZSB0aGUgMS1iYXNlZCBvcmRpbmFsIG51bWJlciBvZiB0aGUgY29sdW1uIGluIHRoZSBwcmltYXJ5IGtleSAqL1xuICBwazogbnVtYmVyO1xuICAvKiogZGF0YSB0eXBlICovXG4gIHR5cGU6IHN0cmluZztcbn1cblxuLyoqXG4gKiBUaGUgc2hhcGUgb2YgZWFjaCByb3cgcmV0dXJuZWQgYnkgYHByYWdtYV9mb3JlaWduX2tleV9saXN0KHRhYmxlTmFtZSlgLlxuICovXG5pbnRlcmZhY2UgUHJhZ21hRm9yZWlnbktleUxpc3Qge1xuICAvKiogY29sdW1uIG5hbWUgKi9cbiAgZnJvbTogc3RyaW5nO1xuICAvKiogb3JkaW5hbCBudW1iZXIgb2YgY29sdW1uIHdpdGhpbiB0aGUgZm9yZWlnbiBrZXkgKi9cbiAgc2VxOiBudW1iZXI7XG4gIC8qKiBmb3JlaWduIHRhYmxlIG5hbWUgKi9cbiAgdGFibGU6IHN0cmluZztcbiAgLyoqIGNvbHVtbiBuYW1lIGluIHRoZSBmb3JlaWduIHRhYmxlICovXG4gIHRvOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRUYWJsZXNRdWVyeShyZXF1aXJlbWVudHM/OiBPbWl0PEJ1aWxkZXJSZXF1aXJlbWVudHMsIFwiQWRhcHRlclwiIHwgXCJRdWVyeUNvbXBpbGVyXCI+KSB7XG4gIHJldHVybiBjb21waWxlKFxuICAgIGdldFNRTGl0ZUJ1aWxkZXI8RGF0YWJhc2U+KHJlcXVpcmVtZW50cylcbiAgICAgIC5zZWxlY3RGcm9tKGV4cHJlc3Npb25CdWlsZGVyKCkuZm48UHJhZ21hVGFibGVMaXN0PihcInByYWdtYV90YWJsZV9saXN0XCIsIFtdKS5hcyhcInRsXCIpKVxuICAgICAgLmxlZnRKb2luKFwic3FsaXRlX3NjaGVtYSBhcyBzc1wiLCAoamIpID0+IGpiLm9uUmVmKFwic3MudHlwZVwiLCBcIj1cIiwgXCJ0bC50eXBlXCIpLm9uUmVmKFwic3MubmFtZVwiLCBcIj1cIiwgXCJ0bC5uYW1lXCIpKVxuICAgICAgLndoZXJlKFwidGwudHlwZVwiLCBcImluXCIsIFtcInRhYmxlXCIsIFwidmlld1wiXSlcbiAgICAgIC8vIGV4Y2x1ZGUgdGVtcG9yYXJ5IHRhYmxlcy92aWV3c1xuICAgICAgLndoZXJlKFwidGwuc2NoZW1hXCIsIFwiPVwiLCBcIm1haW5cIilcbiAgICAgIC8vIGV4Y2x1ZGUgc3lzdGVtIHRhYmxlcy92aWV3c1xuICAgICAgLndoZXJlKFwidGwubmFtZVwiLCBcIm5vdCBsaWtlXCIsIFwic3FsaXRlXyVcIilcbiAgICAgIC5zZWxlY3QoW1widGwubmFtZVwiLCBcInNzLnNxbFwiXSlcbiAgICAgIC5zZWxlY3QoKGViKSA9PiBbXG4gICAgICAgIGpzb25BcnJheUZyb20oXG4gICAgICAgICAgZWJcbiAgICAgICAgICAgIC5zZWxlY3RGcm9tKGViLmZuPFByYWdtYVRhYmxlWEluZm8+KFwicHJhZ21hX3RhYmxlX3hpbmZvXCIsIFtcInRsLm5hbWVcIl0pLmFzKFwidHhpXCIpKVxuICAgICAgICAgICAgLmxlZnRKb2luKFxuICAgICAgICAgICAgICBlYi5mbjxQcmFnbWFGb3JlaWduS2V5TGlzdD4oXCJwcmFnbWFfZm9yZWlnbl9rZXlfbGlzdFwiLCBbXCJ0bC5uYW1lXCJdKS5hcyhcImZrbFwiKSxcbiAgICAgICAgICAgICAgXCJma2wuZnJvbVwiLFxuICAgICAgICAgICAgICBcInR4aS5uYW1lXCIsXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAvLyBleGNsdWRlIGhpZGRlbiBjb2x1bW5zXG4gICAgICAgICAgICAud2hlcmUoXCJ0eGkuaGlkZGVuXCIsIFwiIT1cIiwgMSlcbiAgICAgICAgICAgIC5zZWxlY3QoW1widHhpLm5hbWVcIiwgXCJ0eGkucGtcIiwgXCJ0eGkudHlwZSBhcyBkYXRhdHlwZVwiLCBcImZrbC50YWJsZSBhcyBma190YWJsZVwiLCBcImZrbC50byBhcyBma19jb2x1bW5cIl0pXG4gICAgICAgICAgICAuc2VsZWN0KChlYikgPT4gW2ViKFwidHhpLmhpZGRlblwiLCBcImluXCIsIFsyLCAzXSkuYXMoXCJjb21wdXRlZFwiKSwgZWIoXCJ0eGkubm90bnVsbFwiLCBcIiE9XCIsIDApLmFzKFwibnVsbGFibGVcIildKSxcbiAgICAgICAgKS5hcyhcImNvbHVtbnNcIiksXG4gICAgICBdKSxcbiAgICB7IHRyYW5zZm9ybWF0aW9uczogeyBjb2x1bW5zOiBcImpzb24tcGFyc2VcIiB9IH0sXG4gICk7XG59XG5cbi8qKlxuICogRm9yIHRlc3RpbmcgcHVycG9zZXMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtb2NrVGFibGVzUXVlcnkoKSB7XG4gIHJldHVybiBbXG4gICAge1xuICAgICAgbmFtZTogXCJhbmltYWxzXCIsXG4gICAgICBzcWw6IFwiQ1JFQVRFIFRBQkxFIGFuaW1hbHMgKGlkIElOVEVHRVIgUFJJTUFSWSBLRVksIG5hbWUgVEVYVCk7XCIsXG4gICAgICBjb2x1bW5zOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiBcImlkXCIsXG4gICAgICAgICAgZGF0YXR5cGU6IFwiSU5URUdFUlwiLFxuICAgICAgICAgIHBrOiAxLFxuICAgICAgICAgIGNvbXB1dGVkOiAwLFxuICAgICAgICAgIG51bGxhYmxlOiAwLFxuICAgICAgICAgIGZrX3RhYmxlOiBudWxsLFxuICAgICAgICAgIGZrX2NvbHVtbjogbnVsbCxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6IFwibmFtZVwiLFxuICAgICAgICAgIGRhdGF0eXBlOiBcIlRFWFRcIixcbiAgICAgICAgICBwazogMCxcbiAgICAgICAgICBjb21wdXRlZDogMCxcbiAgICAgICAgICBudWxsYWJsZTogMSxcbiAgICAgICAgICBma190YWJsZTogbnVsbCxcbiAgICAgICAgICBma19jb2x1bW46IG51bGwsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogXCJ1c2Vyc1wiLFxuICAgICAgc3FsOiBcIkNSRUFURSBUQUJMRSB1c2VycyAoaWQgVVVJRCBQUklNQVJZIEtFWSwgY3JlYXRlZF9hdCBUSU1FU1RBTVAsIGRlbGV0ZWRfYXQgVElNRVNUQU1QLCByb2xlIHZhcmNoYXIsIG5hbWUgdmFyY2hhciwgbmFtZV9yb2xlIHRleHQpO1wiLFxuICAgICAgY29sdW1uczogW1xuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogXCJpZFwiLFxuICAgICAgICAgIGRhdGF0eXBlOiBcIlVVSURcIixcbiAgICAgICAgICBwazogMSxcbiAgICAgICAgICBjb21wdXRlZDogMCxcbiAgICAgICAgICBudWxsYWJsZTogMCxcbiAgICAgICAgICBma190YWJsZTogbnVsbCxcbiAgICAgICAgICBma19jb2x1bW46IG51bGwsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiBcImNyZWF0ZWRfYXRcIixcbiAgICAgICAgICBkYXRhdHlwZTogXCJUSU1FU1RBTVBcIixcbiAgICAgICAgICBwazogMCxcbiAgICAgICAgICBjb21wdXRlZDogMCxcbiAgICAgICAgICBudWxsYWJsZTogMSxcbiAgICAgICAgICBma190YWJsZTogbnVsbCxcbiAgICAgICAgICBma19jb2x1bW46IG51bGwsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiBcImRlbGV0ZWRfYXRcIixcbiAgICAgICAgICBkYXRhdHlwZTogXCJUSU1FU1RBTVBcIixcbiAgICAgICAgICBwazogMCxcbiAgICAgICAgICBjb21wdXRlZDogMCxcbiAgICAgICAgICBudWxsYWJsZTogMSxcbiAgICAgICAgICBma190YWJsZTogbnVsbCxcbiAgICAgICAgICBma19jb2x1bW46IG51bGwsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiBcInJvbGVcIixcbiAgICAgICAgICBkYXRhdHlwZTogXCJ2YXJjaGFyXCIsXG4gICAgICAgICAgcGs6IDAsXG4gICAgICAgICAgY29tcHV0ZWQ6IDAsXG4gICAgICAgICAgbnVsbGFibGU6IDEsXG4gICAgICAgICAgZmtfdGFibGU6IG51bGwsXG4gICAgICAgICAgZmtfY29sdW1uOiBudWxsLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogXCJuYW1lXCIsXG4gICAgICAgICAgZGF0YXR5cGU6IFwidmFyY2hhclwiLFxuICAgICAgICAgIHBrOiAwLFxuICAgICAgICAgIGNvbXB1dGVkOiAwLFxuICAgICAgICAgIG51bGxhYmxlOiAxLFxuICAgICAgICAgIGZrX3RhYmxlOiBudWxsLFxuICAgICAgICAgIGZrX2NvbHVtbjogbnVsbCxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6IFwibmFtZV9yb2xlXCIsXG4gICAgICAgICAgZGF0YXR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgIHBrOiAwLFxuICAgICAgICAgIGNvbXB1dGVkOiAwLFxuICAgICAgICAgIG51bGxhYmxlOiAxLFxuICAgICAgICAgIGZrX3RhYmxlOiBudWxsLFxuICAgICAgICAgIGZrX2NvbHVtbjogbnVsbCxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiBcImNvbXBvc2l0ZV9wa1wiLFxuICAgICAgc3FsOiBcIkNSRUFURSBUQUJMRSBjb21wb3NpdGVfcGsgKGlkIFVVSUQsIG5hbWUgVEVYVCwgY3JlYXRlZF9hdCB0aW1lc3RhbXAsIFBSSU1BUlkgS0VZIChpZCwgbmFtZSkpO1wiLFxuICAgICAgY29sdW1uczogW1xuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogXCJpZFwiLFxuICAgICAgICAgIGRhdGF0eXBlOiBcIlVVSURcIixcbiAgICAgICAgICBwazogMSxcbiAgICAgICAgICBjb21wdXRlZDogMCxcbiAgICAgICAgICBudWxsYWJsZTogMCxcbiAgICAgICAgICBma190YWJsZTogbnVsbCxcbiAgICAgICAgICBma19jb2x1bW46IG51bGwsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiBcIm5hbWVcIixcbiAgICAgICAgICBkYXRhdHlwZTogXCJURVhUXCIsXG4gICAgICAgICAgcGs6IDIsXG4gICAgICAgICAgY29tcHV0ZWQ6IDAsXG4gICAgICAgICAgbnVsbGFibGU6IDEsXG4gICAgICAgICAgZmtfdGFibGU6IG51bGwsXG4gICAgICAgICAgZmtfY29sdW1uOiBudWxsLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogXCJjcmVhdGVkX2F0XCIsXG4gICAgICAgICAgZGF0YXR5cGU6IFwidGltZXN0YW1wXCIsXG4gICAgICAgICAgcGs6IDAsXG4gICAgICAgICAgY29tcHV0ZWQ6IDAsXG4gICAgICAgICAgbnVsbGFibGU6IDEsXG4gICAgICAgICAgZmtfdGFibGU6IG51bGwsXG4gICAgICAgICAgZmtfY29sdW1uOiBudWxsLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9LFxuICBdIGFzIGNvbnN0IHNhdGlzZmllcyBRdWVyeVJlc3VsdDx0eXBlb2YgZ2V0VGFibGVzUXVlcnk+O1xufVxuIiwgIi8vLyA8cmVmZXJlbmNlIHR5cGVzPVwiLi9zcWxpdGUuZC50c1wiIC8+XG5pbXBvcnQgeyBzcWwgfSBmcm9tICcuLi9yYXctYnVpbGRlci9zcWwuanMnO1xuaW1wb3J0IHsgZ2V0SnNvbk9iamVjdEFyZ3MgfSBmcm9tICcuLi91dGlsL2pzb24tb2JqZWN0LWFyZ3MuanMnO1xuLyoqXG4gKiBBIFNRTGl0ZSBoZWxwZXIgZm9yIGFnZ3JlZ2F0aW5nIGEgc3VicXVlcnkgaW50byBhIEpTT04gYXJyYXkuXG4gKlxuICogTk9URTogVGhpcyBoZWxwZXIgb25seSB3b3JrcyBjb3JyZWN0bHkgaWYgeW91J3ZlIGluc3RhbGxlZCB0aGUgYFBhcnNlSlNPTlJlc3VsdHNQbHVnaW5gLlxuICogT3RoZXJ3aXNlIHRoZSBuZXN0ZWQgc2VsZWN0aW9ucyB3aWxsIGJlIHJldHVybmVkIGFzIEpTT04gc3RyaW5ncy5cbiAqXG4gKiBUaGUgcGx1Z2luIGNhbiBiZSBpbnN0YWxsZWQgbGlrZSB0aGlzOlxuICpcbiAqIGBgYHRzXG4gKiBpbXBvcnQgKiBhcyBTcWxpdGUgZnJvbSAnYmV0dGVyLXNxbGl0ZTMnXG4gKiBpbXBvcnQgeyBLeXNlbHksIFBhcnNlSlNPTlJlc3VsdHNQbHVnaW4sIFNxbGl0ZURpYWxlY3QgfSBmcm9tICdreXNlbHknXG4gKiBpbXBvcnQgdHlwZSB7IERhdGFiYXNlIH0gZnJvbSAndHlwZS1lZGl0b3InIC8vIGltYWdpbmFyeSBtb2R1bGVcbiAqXG4gKiBjb25zdCBkYiA9IG5ldyBLeXNlbHk8RGF0YWJhc2U+KHtcbiAqICAgZGlhbGVjdDogbmV3IFNxbGl0ZURpYWxlY3Qoe1xuICogICAgIGRhdGFiYXNlOiBuZXcgU3FsaXRlKCc6bWVtb3J5OicpXG4gKiAgIH0pLFxuICogICBwbHVnaW5zOiBbbmV3IFBhcnNlSlNPTlJlc3VsdHNQbHVnaW4oKV1cbiAqIH0pXG4gKiBgYGBcbiAqXG4gKiAjIyMgRXhhbXBsZXNcbiAqXG4gKiBgYGB0c1xuICogaW1wb3J0IHsganNvbkFycmF5RnJvbSB9IGZyb20gJ2t5c2VseS9oZWxwZXJzL3NxbGl0ZSdcbiAqXG4gKiBjb25zdCByZXN1bHQgPSBhd2FpdCBkYlxuICogICAuc2VsZWN0RnJvbSgncGVyc29uJylcbiAqICAgLnNlbGVjdCgoZWIpID0+IFtcbiAqICAgICAnaWQnLFxuICogICAgIGpzb25BcnJheUZyb20oXG4gKiAgICAgICBlYi5zZWxlY3RGcm9tKCdwZXQnKVxuICogICAgICAgICAuc2VsZWN0KFsncGV0LmlkIGFzIHBldF9pZCcsICdwZXQubmFtZSddKVxuICogICAgICAgICAud2hlcmVSZWYoJ3BldC5vd25lcl9pZCcsICc9JywgJ3BlcnNvbi5pZCcpXG4gKiAgICAgICAgIC5vcmRlckJ5KCdwZXQubmFtZScpXG4gKiAgICAgKS5hcygncGV0cycpXG4gKiAgIF0pXG4gKiAgIC5leGVjdXRlKClcbiAqXG4gKiByZXN1bHRbMF0/LmlkXG4gKiByZXN1bHRbMF0/LnBldHNbMF0ucGV0X2lkXG4gKiByZXN1bHRbMF0/LnBldHNbMF0ubmFtZVxuICogYGBgXG4gKlxuICogVGhlIGdlbmVyYXRlZCBTUUwgKFNRTGl0ZSk6XG4gKlxuICogYGBgc3FsXG4gKiBzZWxlY3QgXCJpZFwiLCAoXG4gKiAgIHNlbGVjdCBjb2FsZXNjZShqc29uX2dyb3VwX2FycmF5KGpzb25fb2JqZWN0KFxuICogICAgICdwZXRfaWQnLCBcImFnZ1wiLlwicGV0X2lkXCIsXG4gKiAgICAgJ25hbWUnLCBcImFnZ1wiLlwibmFtZVwiXG4gKiAgICkpLCAnW10nKSBmcm9tIChcbiAqICAgICBzZWxlY3QgXCJwZXRcIi5cImlkXCIgYXMgXCJwZXRfaWRcIiwgXCJwZXRcIi5cIm5hbWVcIlxuICogICAgIGZyb20gXCJwZXRcIlxuICogICAgIHdoZXJlIFwicGV0XCIuXCJvd25lcl9pZFwiID0gXCJwZXJzb25cIi5cImlkXCJcbiAqICAgICBvcmRlciBieSBcInBldFwiLlwibmFtZVwiXG4gKiAgICkgYXMgXCJhZ2dcIlxuICogKSBhcyBcInBldHNcIlxuICogZnJvbSBcInBlcnNvblwiXG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGpzb25BcnJheUZyb20oZXhwcikge1xuICAgIHJldHVybiBzcWwgYChzZWxlY3QgY29hbGVzY2UoanNvbl9ncm91cF9hcnJheShqc29uX29iamVjdCgke3NxbC5qb2luKGdldFNxbGl0ZUpzb25PYmplY3RBcmdzKGV4cHIudG9PcGVyYXRpb25Ob2RlKCksICdhZ2cnKSl9KSksICdbXScpIGZyb20gJHtleHByfSBhcyBhZ2cpYDtcbn1cbi8qKlxuICogQSBTUUxpdGUgaGVscGVyIGZvciB0dXJuaW5nIGEgc3VicXVlcnkgaW50byBhIEpTT04gb2JqZWN0LlxuICpcbiAqIFRoZSBzdWJxdWVyeSBtdXN0IG9ubHkgcmV0dXJuIG9uZSByb3cuXG4gKlxuICogTk9URTogVGhpcyBoZWxwZXIgb25seSB3b3JrcyBjb3JyZWN0bHkgaWYgeW91J3ZlIGluc3RhbGxlZCB0aGUgYFBhcnNlSlNPTlJlc3VsdHNQbHVnaW5gLlxuICogT3RoZXJ3aXNlIHRoZSBuZXN0ZWQgc2VsZWN0aW9ucyB3aWxsIGJlIHJldHVybmVkIGFzIEpTT04gc3RyaW5ncy5cbiAqXG4gKiBUaGUgcGx1Z2luIGNhbiBiZSBpbnN0YWxsZWQgbGlrZSB0aGlzOlxuICpcbiAqIGBgYHRzXG4gKiBpbXBvcnQgKiBhcyBTcWxpdGUgZnJvbSAnYmV0dGVyLXNxbGl0ZTMnXG4gKiBpbXBvcnQgeyBLeXNlbHksIFBhcnNlSlNPTlJlc3VsdHNQbHVnaW4sIFNxbGl0ZURpYWxlY3QgfSBmcm9tICdreXNlbHknXG4gKiBpbXBvcnQgdHlwZSB7IERhdGFiYXNlIH0gZnJvbSAndHlwZS1lZGl0b3InIC8vIGltYWdpbmFyeSBtb2R1bGVcbiAqXG4gKiBjb25zdCBkYiA9IG5ldyBLeXNlbHk8RGF0YWJhc2U+KHtcbiAqICAgZGlhbGVjdDogbmV3IFNxbGl0ZURpYWxlY3Qoe1xuICogICAgIGRhdGFiYXNlOiBuZXcgU3FsaXRlKCc6bWVtb3J5OicpXG4gKiAgIH0pLFxuICogICBwbHVnaW5zOiBbbmV3IFBhcnNlSlNPTlJlc3VsdHNQbHVnaW4oKV1cbiAqIH0pXG4gKiBgYGBcbiAqXG4gKiAjIyMgRXhhbXBsZXNcbiAqXG4gKiBgYGB0c1xuICogaW1wb3J0IHsganNvbk9iamVjdEZyb20gfSBmcm9tICdreXNlbHkvaGVscGVycy9zcWxpdGUnXG4gKlxuICogY29uc3QgcmVzdWx0ID0gYXdhaXQgZGJcbiAqICAgLnNlbGVjdEZyb20oJ3BlcnNvbicpXG4gKiAgIC5zZWxlY3QoKGViKSA9PiBbXG4gKiAgICAgJ2lkJyxcbiAqICAgICBqc29uT2JqZWN0RnJvbShcbiAqICAgICAgIGViLnNlbGVjdEZyb20oJ3BldCcpXG4gKiAgICAgICAgIC5zZWxlY3QoWydwZXQuaWQgYXMgcGV0X2lkJywgJ3BldC5uYW1lJ10pXG4gKiAgICAgICAgIC53aGVyZVJlZigncGV0Lm93bmVyX2lkJywgJz0nLCAncGVyc29uLmlkJylcbiAqICAgICAgICAgLndoZXJlKCdwZXQuaXNfZmF2b3JpdGUnLCAnPScsIHRydWUpXG4gKiAgICAgKS5hcygnZmF2b3JpdGVfcGV0JylcbiAqICAgXSlcbiAqICAgLmV4ZWN1dGUoKVxuICpcbiAqIHJlc3VsdFswXT8uaWRcbiAqIHJlc3VsdFswXT8uZmF2b3JpdGVfcGV0Py5wZXRfaWRcbiAqIHJlc3VsdFswXT8uZmF2b3JpdGVfcGV0Py5uYW1lXG4gKiBgYGBcbiAqXG4gKiBUaGUgZ2VuZXJhdGVkIFNRTCAoU1FMaXRlKTpcbiAqXG4gKiBgYGBzcWxcbiAqIHNlbGVjdCBcImlkXCIsIChcbiAqICAgc2VsZWN0IGpzb25fb2JqZWN0KFxuICogICAgICdwZXRfaWQnLCBcIm9ialwiLlwicGV0X2lkXCIsXG4gKiAgICAgJ25hbWUnLCBcIm9ialwiLlwibmFtZVwiXG4gKiAgICkgZnJvbSAoXG4gKiAgICAgc2VsZWN0IFwicGV0XCIuXCJpZFwiIGFzIFwicGV0X2lkXCIsIFwicGV0XCIuXCJuYW1lXCJcbiAqICAgICBmcm9tIFwicGV0XCJcbiAqICAgICB3aGVyZSBcInBldFwiLlwib3duZXJfaWRcIiA9IFwicGVyc29uXCIuXCJpZFwiXG4gKiAgICAgYW5kIFwicGV0XCIuXCJpc19mYXZvcml0ZVwiID0gP1xuICogICApIGFzIG9ialxuICogKSBhcyBcImZhdm9yaXRlX3BldFwiXG4gKiBmcm9tIFwicGVyc29uXCI7XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGpzb25PYmplY3RGcm9tKGV4cHIpIHtcbiAgICByZXR1cm4gc3FsIGAoc2VsZWN0IGpzb25fb2JqZWN0KCR7c3FsLmpvaW4oZ2V0U3FsaXRlSnNvbk9iamVjdEFyZ3MoZXhwci50b09wZXJhdGlvbk5vZGUoKSwgJ29iaicpKX0pIGZyb20gJHtleHByfSBhcyBvYmopYDtcbn1cbi8qKlxuICogVGhlIFNRTGl0ZSBganNvbl9vYmplY3RgIGZ1bmN0aW9uLlxuICpcbiAqIE5PVEU6IFRoaXMgaGVscGVyIG9ubHkgd29ya3MgY29ycmVjdGx5IGlmIHlvdSd2ZSBpbnN0YWxsZWQgdGhlIGBQYXJzZUpTT05SZXN1bHRzUGx1Z2luYC5cbiAqIE90aGVyd2lzZSB0aGUgbmVzdGVkIHNlbGVjdGlvbnMgd2lsbCBiZSByZXR1cm5lZCBhcyBKU09OIHN0cmluZ3MuXG4gKlxuICogVGhlIHBsdWdpbiBjYW4gYmUgaW5zdGFsbGVkIGxpa2UgdGhpczpcbiAqXG4gKiBgYGB0c1xuICogaW1wb3J0ICogYXMgU3FsaXRlIGZyb20gJ2JldHRlci1zcWxpdGUzJ1xuICogaW1wb3J0IHsgS3lzZWx5LCBQYXJzZUpTT05SZXN1bHRzUGx1Z2luLCBTcWxpdGVEaWFsZWN0IH0gZnJvbSAna3lzZWx5J1xuICogaW1wb3J0IHR5cGUgeyBEYXRhYmFzZSB9IGZyb20gJ3R5cGUtZWRpdG9yJyAvLyBpbWFnaW5hcnkgbW9kdWxlXG4gKlxuICogY29uc3QgZGIgPSBuZXcgS3lzZWx5PERhdGFiYXNlPih7XG4gKiAgIGRpYWxlY3Q6IG5ldyBTcWxpdGVEaWFsZWN0KHtcbiAqICAgICBkYXRhYmFzZTogbmV3IFNxbGl0ZSgnOm1lbW9yeTonKVxuICogICB9KSxcbiAqICAgcGx1Z2luczogW25ldyBQYXJzZUpTT05SZXN1bHRzUGx1Z2luKCldXG4gKiB9KVxuICogYGBgXG4gKlxuICogIyMjIEV4YW1wbGVzXG4gKlxuICogYGBgdHNcbiAqIGltcG9ydCB7IHNxbCB9IGZyb20gJ2t5c2VseSdcbiAqIGltcG9ydCB7IGpzb25CdWlsZE9iamVjdCB9IGZyb20gJ2t5c2VseS9oZWxwZXJzL3NxbGl0ZSdcbiAqXG4gKiBjb25zdCByZXN1bHQgPSBhd2FpdCBkYlxuICogICAuc2VsZWN0RnJvbSgncGVyc29uJylcbiAqICAgLnNlbGVjdCgoZWIpID0+IFtcbiAqICAgICAnaWQnLFxuICogICAgIGpzb25CdWlsZE9iamVjdCh7XG4gKiAgICAgICBmaXJzdDogZWIucmVmKCdmaXJzdF9uYW1lJyksXG4gKiAgICAgICBsYXN0OiBlYi5yZWYoJ2xhc3RfbmFtZScpLFxuICogICAgICAgZnVsbDogc3FsPHN0cmluZz5gZmlyc3RfbmFtZSB8fFx1MDBBMCcgJyB8fCBsYXN0X25hbWVgXG4gKiAgICAgfSkuYXMoJ25hbWUnKVxuICogICBdKVxuICogICAuZXhlY3V0ZSgpXG4gKlxuICogcmVzdWx0WzBdPy5pZFxuICogcmVzdWx0WzBdPy5uYW1lLmZpcnN0XG4gKiByZXN1bHRbMF0/Lm5hbWUubGFzdFxuICogcmVzdWx0WzBdPy5uYW1lLmZ1bGxcbiAqIGBgYFxuICpcbiAqIFRoZSBnZW5lcmF0ZWQgU1FMIChTUUxpdGUpOlxuICpcbiAqIGBgYHNxbFxuICogc2VsZWN0IFwiaWRcIiwganNvbl9vYmplY3QoXG4gKiAgICdmaXJzdCcsIGZpcnN0X25hbWUsXG4gKiAgICdsYXN0JywgbGFzdF9uYW1lLFxuICogICAnZnVsbCcsIFwiZmlyc3RfbmFtZVwiIHx8ICcgJyB8fCBcImxhc3RfbmFtZVwiXG4gKiApIGFzIFwibmFtZVwiXG4gKiBmcm9tIFwicGVyc29uXCJcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24ganNvbkJ1aWxkT2JqZWN0KG9iaikge1xuICAgIHJldHVybiBzcWwgYGpzb25fb2JqZWN0KCR7c3FsLmpvaW4oT2JqZWN0LmtleXMob2JqKS5mbGF0TWFwKChrKSA9PiBbc3FsLmxpdChrKSwgb2JqW2tdXSkpfSlgO1xufVxuZnVuY3Rpb24gZ2V0U3FsaXRlSnNvbk9iamVjdEFyZ3Mobm9kZSwgdGFibGUpIHtcbiAgICB0cnkge1xuICAgICAgICByZXR1cm4gZ2V0SnNvbk9iamVjdEFyZ3Mobm9kZSwgdGFibGUpO1xuICAgIH1cbiAgICBjYXRjaCB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignU1FMaXRlIGpzb25BcnJheUZyb20gYW5kIGpzb25PYmplY3RGcm9tIGZ1bmN0aW9ucyBjYW4gb25seSBoYW5kbGUgZXhwbGljaXQgc2VsZWN0aW9ucyBkdWUgdG8gbGltaXRhdGlvbnMgb2YgdGhlIGpzb25fb2JqZWN0IGZ1bmN0aW9uLiBzZWxlY3RBbGwoKSBpcyBub3QgYWxsb3dlZCBpbiB0aGUgc3VicXVlcnkuJyk7XG4gICAgfVxufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7aU9BQUFBLElDQUFDLElDQUFDLElBSU8sSUFBTUMsRUFBMEYsQ0FDckcsS0FBTSxDQUNKLE1BQU8sS0FDVCxFQUNBLFFBQVMsQ0FDUCxNQUFPLFNBQ1QsRUFDQSxLQUFNLENBQ0osTUFBTyxLQUNULEVBQ0EsUUFBUyxDQUNQLE1BQU8sU0FDVCxFQUNBLEtBQU0sQ0FDSixNQUFPLFNBQ1QsRUFDQSxLQUFNLENBQ0osTUFBTyxRQUNULENBQ0YsRUFPTyxTQUFTQyxFQUF3QkMsRUFBaUQsQ0FDdkYsR0FBSSxDQUFDQSxFQUNILE1BQU8sT0FHVCxJQUFNQyxFQUFZRCxFQUFpQixZQUFZLEVBRS9DLE9BQUlDLEVBQVUsU0FBUyxLQUFLLEVBQ25CLFVBR0xBLEVBQVUsU0FBUyxNQUFNLEdBQUtBLEVBQVUsU0FBUyxNQUFNLEdBQUtBLEVBQVUsU0FBUyxNQUFNLEVBQ2hGLE9BR0xBLEVBQVUsU0FBUyxNQUFNLEVBQ3BCLE9BR0xBLEVBQVUsU0FBUyxNQUFNLEdBQUtBLEVBQVUsU0FBUyxNQUFNLEdBQUtBLEVBQVUsU0FBUyxNQUFNLEVBQ2hGLE9BR0YsU0FDVCxDQ3REQUMsSUNBQUMsSUFLTyxTQUFTQyxFQUNkQyxFQUNrQixDQUNsQixPQUFPQyxFQUFxQixDQUMxQixHQUFHRCxFQUNILFFBQVNFLEVBQ1QsY0FBZUMsQ0FDakIsQ0FBQyxDQUNILENERE8sU0FBU0MsRUFDZEMsRUFDQUMsRUFDQSxDQUNBLEdBQU0sQ0FDSixPQUFBQyxFQUFTLENBQUUsTUFBTyxNQUFPLFFBQVMsQ0FBQyxFQUFHLEtBQU0sYUFBYyxFQUMxRCxVQUFBQyxFQUNBLFNBQUFDLEVBQ0EsVUFBQUMsRUFDQSxNQUFPLENBQUUsUUFBQUMsRUFBUyxLQUFNQyxDQUFVLENBQ3BDLEVBQUlQLEVBRUVRLEVBQVVDLEVBQTBEUixDQUFZLEVBRWhGUyxFQUFtQkMsRUFBMEJULEVBQU8sUUFBU0ksQ0FBTyxFQUVwRU0sRUFBVyxhQUNYQyxFQUFZLGVBRVpDLEVBQWFOLEVBQ2hCLFdBQVdELENBQVMsRUFDcEIsTUFBTUcsQ0FBZ0IsRUFDdEIsT0FBUUssR0FBT0EsRUFBRyxLQUFtQkEsRUFBRyxHQUFHLFNBQVNBLEVBQUcsR0FBRyxTQUFTLEVBQUdDLEVBQUksSUFBSSxDQUFDLENBQUMsRUFBRyxNQUFNLEVBQUUsR0FBR0gsQ0FBUyxDQUFDLEVBRTNHLE9BQU9JLEVBQ0xULEVBQ0csS0FBS0ksRUFBVSxJQUFNRSxDQUFVLEVBQy9CLFdBQVdQLENBQVMsRUFDcEIsVUFBVUssRUFBV00sR0FBT0EsRUFBRyxPQUFPLENBQUMsRUFFdkMsTUFBTVIsQ0FBZ0IsRUFDdEIsT0FDQyxHQUFHRSxDQUFRLElBQUlDLENBQVMsRUFJMUIsRUFDQyxPQUFPLE9BQU8sS0FBS1AsQ0FBTyxDQUFDLEVBQzNCLE1BQU9hLEdBQU9kLEVBQVUsT0FBTyxDQUFDYyxFQUFJQyxJQUFTRCxFQUFHLFFBQVFDLEVBQUssT0FBUUEsRUFBSyxTQUFTLEVBQUdELENBQUUsQ0FBQyxFQUN6RixNQUFNZixDQUFRLEVBRWQsT0FBT1ksRUFBSSxJQUFJLE9BQU9iLENBQVMsRUFBSSxPQUFPQyxDQUFRLENBQUMsQ0FBQyxDQUN6RCxDQUNGLENBS08sU0FBU2lCLElBQWtCLENBQ2hDLE1BQU8sQ0FDTCxDQUNFLFdBQVksSUFBSSxLQUFLLDBCQUEwQixFQUMvQyxXQUFZLEtBQ1osR0FBSSxFQUNKLEtBQU0sV0FDTixhQUFjLElBQ2QsS0FBTSxRQUNOLFVBQVcsa0JBQ2IsRUFDQSxDQUNFLFdBQVksSUFBSSxLQUFLLDBCQUEwQixFQUMvQyxXQUFZLEtBQ1osR0FBSSxFQUNKLEtBQU0sV0FDTixhQUFjLElBQ2QsS0FBTSxZQUNOLFVBQVcsc0JBQ2IsQ0FDRixDQUlGLENBS08sU0FBU0MsRUFDZHRCLEVBQ0FDLEVBQ0EsQ0FDQSxHQUFNLENBQ0osS0FBQXNCLEVBQ0EsTUFBTyxDQUFFLFFBQUFqQixFQUFTLEtBQU1DLENBQVUsQ0FDcEMsRUFBSVAsRUFFRVEsRUFBVUMsRUFBMERSLENBQVksRUFFdEYsT0FBT2dCLEVBQ0xULEVBQ0csV0FBV0QsQ0FBUyxFQUNwQixNQUFNaUIsRUFBd0JELEVBQU1qQixDQUFPLENBQUMsRUFDNUMsVUFBVSxPQUFPLEtBQUtBLENBQU8sQ0FBQyxFQUM5QixVQUFVbUIsRUFBMEIsRUFBRSxHQUFHLG1CQUFtQixDQUFDLENBQ2xFLENBQ0YsQ0FLTyxTQUFTQyxFQUNkMUIsRUFDQUMsRUFDQSxDQUNBLEdBQU0sQ0FDSixNQUFPLENBQUUsUUFBQUssRUFBUyxLQUFNQyxDQUFVLEVBQ2xDLEtBQUFnQixDQUNGLEVBQUl2QixFQUVFUSxFQUFVQyxFQUEwRFIsQ0FBWSxFQUV0RixPQUFPZ0IsRUFDTFQsRUFDRyxXQUFXRCxDQUFTLEVBQ3BCLE9BQU9nQixFQUFLLElBQUtJLEdBQVMsT0FBTyxLQUFLQSxDQUFHLEVBQUUsU0FBVyxFQUFJLENBQUUsQ0FBQyxPQUFPLEtBQUtyQixDQUFPLEVBQUUsQ0FBQyxDQUFFLEVBQUcsSUFBSyxFQUFJcUIsQ0FBSSxDQUFDLEVBQ3RHLFVBQVUsT0FBTyxLQUFLckIsQ0FBTyxDQUFDLEVBQzlCLFVBQVVtQixFQUEwQixFQUFFLEdBQUcsb0JBQW9CLENBQUMsQ0FDbkUsQ0FDRixDQUtPLFNBQVNHLEVBQ2Q1QixFQUNBQyxFQUNBLENBQ0EsR0FBTSxDQUNKLFFBQUE0QixFQUNBLElBQUFGLEVBQ0EsTUFBTyxDQUFFLFFBQUFyQixFQUFTLEtBQU1DLENBQVUsQ0FDcEMsRUFBSVAsRUFFRVEsRUFBVUMsRUFBMERSLENBQVksRUFFdEYsT0FBT2dCLEVBQ0xULEVBQ0csWUFBWUQsQ0FBUyxFQUNyQixJQUFJc0IsQ0FBTyxFQUNYLE1BQU1MLEVBQXdCLENBQUNHLENBQUcsRUFBR3JCLENBQU8sQ0FBQyxFQUM3QyxVQUFVLE9BQU8sS0FBS0EsQ0FBTyxDQUFDLEVBQzlCLFVBQVVtQixFQUEwQixFQUFFLEdBQUcsbUJBQW1CLENBQUMsQ0FDbEUsQ0FDRixDQUVBLFNBQVNBLEdBQTRCLENBQ25DLElBQU1WLEVBQUtlLEVBQWtCLEVBRTdCLE9BQU9mLEVBQUcsS0FBbUJBLEVBQUcsS0FBS0MsK0NBQWtELFNBQVMsRUFBRyxNQUFNLENBQzNHLENFaktBZSxJQ0FBQyxJQWdFTyxTQUFTQyxFQUFjQyxFQUFNLENBQ2hDLE9BQU9DLGtEQUFxREEsRUFBSSxLQUFLQyxFQUF3QkYsRUFBSyxnQkFBZ0IsRUFBRyxLQUFLLENBQUMsQ0FBQyxrQkFBa0JBLENBQUksVUFDdEosQ0E4SEEsU0FBU0csRUFBd0JDLEVBQU1DLEVBQU8sQ0FDMUMsR0FBSSxDQUNBLE9BQU9DLEVBQWtCRixFQUFNQyxDQUFLLENBQ3hDLE1BQ00sQ0FDRixNQUFNLElBQUksTUFBTSxtTEFBbUwsQ0FDdk0sQ0FDSixDRDFITyxTQUFTRSxFQUFlQyxFQUF1RSxDQUNwRyxPQUFPQyxFQUNMQyxFQUEyQkYsQ0FBWSxFQUNwQyxXQUFXRyxFQUFrQixFQUFFLEdBQW9CLG9CQUFxQixDQUFDLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxFQUNwRixTQUFTLHNCQUF3QkMsR0FBT0EsRUFBRyxNQUFNLFVBQVcsSUFBSyxTQUFTLEVBQUUsTUFBTSxVQUFXLElBQUssU0FBUyxDQUFDLEVBQzVHLE1BQU0sVUFBVyxLQUFNLENBQUMsUUFBUyxNQUFNLENBQUMsRUFFeEMsTUFBTSxZQUFhLElBQUssTUFBTSxFQUU5QixNQUFNLFVBQVcsV0FBWSxVQUFVLEVBQ3ZDLE9BQU8sQ0FBQyxVQUFXLFFBQVEsQ0FBQyxFQUM1QixPQUFRQyxHQUFPLENBQ2RDLEVBQ0VELEVBQ0csV0FBV0EsRUFBRyxHQUFxQixxQkFBc0IsQ0FBQyxTQUFTLENBQUMsRUFBRSxHQUFHLEtBQUssQ0FBQyxFQUMvRSxTQUNDQSxFQUFHLEdBQXlCLDBCQUEyQixDQUFDLFNBQVMsQ0FBQyxFQUFFLEdBQUcsS0FBSyxFQUM1RSxXQUNBLFVBQ0YsRUFFQyxNQUFNLGFBQWMsS0FBTSxDQUFDLEVBQzNCLE9BQU8sQ0FBQyxXQUFZLFNBQVUsdUJBQXdCLHdCQUF5QixxQkFBcUIsQ0FBQyxFQUNyRyxPQUFRQSxHQUFPLENBQUNBLEVBQUcsYUFBYyxLQUFNLENBQUMsRUFBRyxDQUFDLENBQUMsRUFBRSxHQUFHLFVBQVUsRUFBR0EsRUFBRyxjQUFlLEtBQU0sQ0FBQyxFQUFFLEdBQUcsVUFBVSxDQUFDLENBQUMsQ0FDOUcsRUFBRSxHQUFHLFNBQVMsQ0FDaEIsQ0FBQyxFQUNILENBQUUsZ0JBQWlCLENBQUUsUUFBUyxZQUFhLENBQUUsQ0FDL0MsQ0FDRixDQUtPLFNBQVNFLEdBQWtCLENBQ2hDLE1BQU8sQ0FDTCxDQUNFLEtBQU0sVUFDTixJQUFLLDREQUNMLFFBQVMsQ0FDUCxDQUNFLEtBQU0sS0FDTixTQUFVLFVBQ1YsR0FBSSxFQUNKLFNBQVUsRUFDVixTQUFVLEVBQ1YsU0FBVSxLQUNWLFVBQVcsSUFDYixFQUNBLENBQ0UsS0FBTSxPQUNOLFNBQVUsT0FDVixHQUFJLEVBQ0osU0FBVSxFQUNWLFNBQVUsRUFDVixTQUFVLEtBQ1YsVUFBVyxJQUNiLENBQ0YsQ0FDRixFQUNBLENBQ0UsS0FBTSxRQUNOLElBQUssb0lBQ0wsUUFBUyxDQUNQLENBQ0UsS0FBTSxLQUNOLFNBQVUsT0FDVixHQUFJLEVBQ0osU0FBVSxFQUNWLFNBQVUsRUFDVixTQUFVLEtBQ1YsVUFBVyxJQUNiLEVBQ0EsQ0FDRSxLQUFNLGFBQ04sU0FBVSxZQUNWLEdBQUksRUFDSixTQUFVLEVBQ1YsU0FBVSxFQUNWLFNBQVUsS0FDVixVQUFXLElBQ2IsRUFDQSxDQUNFLEtBQU0sYUFDTixTQUFVLFlBQ1YsR0FBSSxFQUNKLFNBQVUsRUFDVixTQUFVLEVBQ1YsU0FBVSxLQUNWLFVBQVcsSUFDYixFQUNBLENBQ0UsS0FBTSxPQUNOLFNBQVUsVUFDVixHQUFJLEVBQ0osU0FBVSxFQUNWLFNBQVUsRUFDVixTQUFVLEtBQ1YsVUFBVyxJQUNiLEVBQ0EsQ0FDRSxLQUFNLE9BQ04sU0FBVSxVQUNWLEdBQUksRUFDSixTQUFVLEVBQ1YsU0FBVSxFQUNWLFNBQVUsS0FDVixVQUFXLElBQ2IsRUFDQSxDQUNFLEtBQU0sWUFDTixTQUFVLE9BQ1YsR0FBSSxFQUNKLFNBQVUsRUFDVixTQUFVLEVBQ1YsU0FBVSxLQUNWLFVBQVcsSUFDYixDQUNGLENBQ0YsRUFDQSxDQUNFLEtBQU0sZUFDTixJQUFLLGdHQUNMLFFBQVMsQ0FDUCxDQUNFLEtBQU0sS0FDTixTQUFVLE9BQ1YsR0FBSSxFQUNKLFNBQVUsRUFDVixTQUFVLEVBQ1YsU0FBVSxLQUNWLFVBQVcsSUFDYixFQUNBLENBQ0UsS0FBTSxPQUNOLFNBQVUsT0FDVixHQUFJLEVBQ0osU0FBVSxFQUNWLFNBQVUsRUFDVixTQUFVLEtBQ1YsVUFBVyxJQUNiLEVBQ0EsQ0FDRSxLQUFNLGFBQ04sU0FBVSxZQUNWLEdBQUksRUFDSixTQUFVLEVBQ1YsU0FBVSxFQUNWLFNBQVUsS0FDVixVQUFXLElBQ2IsQ0FDRixDQUNGLENBQ0YsQ0FDRixDSmpOQSxJQUFNQyxFQUFTLE9BRVRDLEVBQWtCLENBQ3RCLElBQ0EsS0FDQSxJQUNBLEtBQ0EsSUFDQSxLQUNBLEtBQ0EsU0FDQSxPQUNBLFVBQ0YsRUFFTyxTQUFTQyxHQUFvQkMsRUFBa0QsQ0FDcEYsR0FBTSxDQUFFLFNBQUFDLEVBQVUsR0FBR0MsQ0FBa0IsRUFBSUYsRUFFM0MsTUFBTyxDQUNMLGNBQWVILEVBRWYsTUFBTSxPQUFPTSxFQUFTQyxFQUE2RCxDQUNqRixHQUFJLENBQ0YsSUFBTUMsRUFBUUMsRUFBZUgsRUFBU0QsQ0FBaUIsRUFHakQsQ0FBQ0ssQ0FBSyxFQUFJLE1BQU1OLEVBQVMsUUFBUUksRUFBT0QsQ0FBTyxFQUVyRCxPQUFJRyxFQUNLQyxFQUFtQixDQUFFLE1BQUFELEVBQU8sTUFBQUYsQ0FBTSxDQUFDLEVBR3JDLENBQUMsS0FBTSxDQUFFLEdBQUdGLEVBQVMsTUFBQUUsQ0FBTSxDQUFDLENBQ3JDLE9BQVNFLEVBQWdCLENBQ3ZCLE9BQU9DLEVBQW1CLENBQUUsTUFBT0QsQ0FBZSxDQUFDLENBQ3JELENBQ0YsRUFFQSxNQUFNLE9BQU9KLEVBQVNDLEVBQTZELENBQ2pGLEdBQUksQ0FDRixJQUFNQyxFQUFRSSxFQUFlTixFQUFTRCxDQUFpQixFQUVqRCxDQUFDSyxFQUFPRyxDQUFJLEVBQUksTUFBTVQsRUFBUyxRQUFRSSxFQUFPRCxDQUFPLEVBRTNELE9BQUlHLEVBQ0tDLEVBQW1CLENBQUUsTUFBQUQsRUFBTyxNQUFBRixDQUFNLENBQUMsRUFHckMsQ0FBQyxLQUFNLENBQUUsS0FBQUssRUFBTSxNQUFBTCxDQUFNLENBQUMsQ0FDL0IsT0FBU0UsRUFBZ0IsQ0FDdkIsT0FBT0MsRUFBbUIsQ0FBRSxNQUFPRCxDQUFlLENBQUMsQ0FDckQsQ0FDRixFQUVBLE1BQU0sV0FBV0gsRUFBaUUsQ0FDaEYsR0FBSSxDQUNGLElBQU1PLEVBQWNDLEVBQWVaLENBQVksRUFFekMsQ0FBQ2EsRUFBYUMsQ0FBTSxFQUFJLE1BQU1iLEVBQVMsUUFBUVUsRUFBYVAsQ0FBTyxFQUV6RSxPQUFJUyxFQUNLTCxFQUFtQixDQUFFLE1BQU9LLEVBQWEsTUFBT0YsQ0FBWSxDQUFDLEVBRy9ELENBQUMsS0FBTUksRUFBb0IsQ0FBRSxNQUFPSixFQUFhLE9BQUFHLENBQU8sQ0FBQyxDQUFDLENBQ25FLE9BQVNQLEVBQWdCLENBQ3ZCLE9BQU9DLEVBQW1CLENBQUUsTUFBT0QsQ0FBZSxDQUFDLENBQ3JELENBQ0YsRUFFQSxNQUFNLE1BQU1KLEVBQVNDLEVBQTRELENBQy9FLEdBQUksQ0FDRixJQUFNQyxFQUFRVyxFQUFlYixFQUFTRCxDQUFpQixFQUVqRCxDQUFDSyxFQUFPVSxDQUFPLEVBQUksTUFBTWhCLEVBQVMsUUFBUUksRUFBT0QsQ0FBTyxFQUU5RCxPQUFJRyxFQUNLQyxFQUFtQixDQUFFLE1BQUFELEVBQU8sTUFBQUYsQ0FBTSxDQUFDLEVBR3JDLENBQUMsS0FBTSxDQUFFLGlCQUFrQlksRUFBUSxDQUFDLEdBQUcsY0FBZ0IsSUFBSyxLQUFNQSxFQUFTLE1BQUFaLENBQU0sQ0FBQyxDQUMzRixPQUFTRSxFQUFnQixDQUV2QixPQUFPQyxFQUFtQixDQUFFLE1BQU9ELENBQWUsQ0FBQyxDQUNyRCxDQUNGLEVBRUEsTUFBTSxPQUFPSixFQUFTQyxFQUE2RCxDQUNqRixHQUFJLENBQ0YsSUFBTUMsRUFBUWEsRUFBZWYsRUFBU0QsQ0FBaUIsRUFFakQsQ0FBQ0ssRUFBT1UsQ0FBTyxFQUFJLE1BQU1oQixFQUFTLFFBQVFJLEVBQU9ELENBQU8sRUFFOUQsR0FBSUcsRUFDRixPQUFPQyxFQUFtQixDQUFFLE1BQUFELEVBQU8sTUFBQUYsQ0FBTSxDQUFDLEVBRzVDLEdBQU0sQ0FBQ2MsQ0FBRyxFQUFJRixFQUVkLE9BQUtFLEVBS0UsQ0FBQyxLQUFNLENBQUUsSUFBQUEsRUFBSyxNQUFBZCxDQUFNLENBQUMsRUFIbkJHLEVBQW1CLENBQUUsTUFBTyxJQUFJLE1BQU0sZUFBZSxFQUFHLE1BQUFILENBQU0sQ0FBQyxDQUkxRSxPQUFTRSxFQUFnQixDQUN2QixPQUFPQyxFQUFtQixDQUFFLE1BQU9ELENBQWUsQ0FBQyxDQUNyRCxDQUNGLENBQ0YsQ0FDRixDQUVBLFNBQVNRLEVBQW9CSyxFQUdELENBQzFCLEdBQU0sQ0FBRSxPQUFBTixFQUFRLE1BQU9ILENBQVksRUFBSVMsRUFFdkMsTUFBTyxDQUNMLGdCQUFBdEIsRUFDQSxNQUFPYSxFQUNQLFFBQVNHLEVBQU8sT0FDZCxDQUFDTyxFQUFTQyxJQUFVLENBQ2xCLEdBQU0sQ0FBRSxRQUFBQyxFQUFTLEtBQU1DLEVBQVcsSUFBS0MsQ0FBSyxFQUFJSCxFQUUxQ0ksRUFBZ0JILEVBQVEsT0FDNUIsQ0FBQ0EsRUFBU0ksSUFBVyxDQUNuQixHQUFNLENBQUUsU0FBQUMsRUFBVSxVQUFBQyxFQUFXLEtBQU1DLEVBQVksR0FBQUMsQ0FBRyxFQUFJSixFQUVoREssRUFBV0MsRUFBd0JMLENBQVEsRUFFM0NNLEVBQWEsRUFBUVAsRUFBTyxTQUM1QlEsRUFBVyxFQUFRUixFQUFPLFNBRWhDLE9BQUFKLEVBQVFPLENBQVUsRUFBSSxDQUNwQixTQUFVLENBRVIsR0FBR00sRUFBNEJKLENBQVEsRUFDdkMsU0FBQUEsRUFDQSxRQUFTLEdBQ1QsU0FBVSxHQUNWLEtBQU1KLEVBRU4sUUFBUyxDQUFDLEVBQ1YsT0FBQS9CLENBQ0YsRUFFQSxhQUFjLEtBQ2QsU0FBVWdDLEVBQ1YsU0FBVUEsRUFBWWhDLEVBQVMsS0FDL0IsUUFBUzhCLEVBQU8sU0FFaEIsZ0JBQWlCLEdBQ2pCLFdBQUFPLEVBRUEsV0FBWSxDQUFDQyxHQUFZLENBQUNELEVBQzFCLEtBQU1KLEVBQ04sU0FBQUssRUFDQSxXQUFZSixFQUFLLEVBQUlBLEVBQUssS0FDMUIsT0FBQWxDLEVBQ0EsTUFBTzJCLENBQ1QsRUFFT0QsQ0FDVCxFQUNBLENBQUMsQ0FDSCxFQUVBLE9BQUFGLEVBQVEsS0FBTSxPQUFPRyxDQUFTLEVBQUksQ0FDaEMsUUFBU0UsRUFDVCxLQUFNRixFQUNOLE9BQVEsTUFDVixFQUVPSCxDQUNULEVBQ0EsQ0FDRSxLQUFNLENBQUUsT0FBUSxDQUFDLEVBQUcsS0FBTSxNQUFPLENBQ25DLENBQ0YsRUFDQSxTQUFVLEtBQ1osQ0FDRixDQUtPLFNBQVNnQixJQUFpQixDQUMvQixJQUFNaEMsRUFBUSxDQUFFLFdBQVksQ0FBQyxFQUFHLElBQUssVUFBVyxFQUMxQ1MsRUFBU3dCLEVBQWdCLEVBRS9CLE9BQU92QixFQUFvQixDQUFFLE1BQUFWLEVBQU8sT0FBQVMsQ0FBTyxDQUFDLENBYzlDIiwKICAibmFtZXMiOiBbImluaXRfZGVmaW5lX0FDQ0VMRVJBVEVfU0NIRU1BX0JZX1BST1ZJREVSIiwgImluaXRfZGVmaW5lX0FDQ0VMRVJBVEVfU0NIRU1BX0JZX1BST1ZJREVSIiwgImluaXRfZGVmaW5lX0FDQ0VMRVJBVEVfU0NIRU1BX0JZX1BST1ZJREVSIiwgIlNRTElURV9BRkZJTklUWV9UT19NRVRBREFUQSIsICJkZXRlcm1pbmVDb2x1bW5BZmZpbml0eSIsICJkZWNsYXJlZERhdGFUeXBlIiwgInVwcGVyVHlwZSIsICJpbml0X2RlZmluZV9BQ0NFTEVSQVRFX1NDSEVNQV9CWV9QUk9WSURFUiIsICJpbml0X2RlZmluZV9BQ0NFTEVSQVRFX1NDSEVNQV9CWV9QUk9WSURFUiIsICJnZXRTUUxpdGVCdWlsZGVyIiwgInJlcXVpcmVtZW50cyIsICJnZXRCdWlsZGVyIiwgIlNxbGl0ZUFkYXB0ZXIiLCAiU3FsaXRlUXVlcnlDb21waWxlciIsICJnZXRTZWxlY3RRdWVyeSIsICJkZXRhaWxzIiwgInJlcXVpcmVtZW50cyIsICJmaWx0ZXIiLCAicGFnZUluZGV4IiwgInBhZ2VTaXplIiwgInNvcnRPcmRlciIsICJjb2x1bW5zIiwgInRhYmxlTmFtZSIsICJidWlsZGVyIiwgImdldFNRTGl0ZUJ1aWxkZXIiLCAiZmlsdGVyRXhwcmVzc2lvbiIsICJnZXRTZWxlY3RGaWx0ZXJFeHByZXNzaW9uIiwgIkFHR19OQU1FIiwgIkNPVU5UX1JFRiIsICJjb3VudFF1ZXJ5IiwgImViIiwgInNxbCIsICJjb21waWxlIiwgImpiIiwgInFiIiwgIml0ZW0iLCAibW9ja1NlbGVjdFF1ZXJ5IiwgImdldERlbGV0ZVF1ZXJ5IiwgInJvd3MiLCAiYXBwbHlJbmZlcnJlZFJvd0ZpbHRlcnMiLCAiZ2V0Q3VycmVudFRpbWVzdGFtcE1pbGxpcyIsICJnZXRJbnNlcnRRdWVyeSIsICJyb3ciLCAiZ2V0VXBkYXRlUXVlcnkiLCAiY2hhbmdlcyIsICJleHByZXNzaW9uQnVpbGRlciIsICJpbml0X2RlZmluZV9BQ0NFTEVSQVRFX1NDSEVNQV9CWV9QUk9WSURFUiIsICJpbml0X2RlZmluZV9BQ0NFTEVSQVRFX1NDSEVNQV9CWV9QUk9WSURFUiIsICJqc29uQXJyYXlGcm9tIiwgImV4cHIiLCAic3FsIiwgImdldFNxbGl0ZUpzb25PYmplY3RBcmdzIiwgImdldFNxbGl0ZUpzb25PYmplY3RBcmdzIiwgIm5vZGUiLCAidGFibGUiLCAiZ2V0SnNvbk9iamVjdEFyZ3MiLCAiZ2V0VGFibGVzUXVlcnkiLCAicmVxdWlyZW1lbnRzIiwgImNvbXBpbGUiLCAiZ2V0U1FMaXRlQnVpbGRlciIsICJleHByZXNzaW9uQnVpbGRlciIsICJqYiIsICJlYiIsICJqc29uQXJyYXlGcm9tIiwgIm1vY2tUYWJsZXNRdWVyeSIsICJzY2hlbWEiLCAiZmlsdGVyT3BlcmF0b3JzIiwgImNyZWF0ZVNRTGl0ZUFkYXB0ZXIiLCAicmVxdWlyZW1lbnRzIiwgImV4ZWN1dG9yIiwgIm90aGVyUmVxdWlyZW1lbnRzIiwgImRldGFpbHMiLCAib3B0aW9ucyIsICJxdWVyeSIsICJnZXREZWxldGVRdWVyeSIsICJlcnJvciIsICJjcmVhdGVBZGFwdGVyRXJyb3IiLCAiZ2V0SW5zZXJ0UXVlcnkiLCAicm93cyIsICJ0YWJsZXNRdWVyeSIsICJnZXRUYWJsZXNRdWVyeSIsICJ0YWJsZXNFcnJvciIsICJ0YWJsZXMiLCAiY3JlYXRlSW50cm9zcGVjdGlvbiIsICJnZXRTZWxlY3RRdWVyeSIsICJyZXN1bHRzIiwgImdldFVwZGF0ZVF1ZXJ5IiwgInJvdyIsICJhcmdzIiwgInNjaGVtYXMiLCAidGFibGUiLCAiY29sdW1ucyIsICJ0YWJsZU5hbWUiLCAiX3NxbCIsICJjb2x1bW5zUmVjb3JkIiwgImNvbHVtbiIsICJkYXRhdHlwZSIsICJma19jb2x1bW4iLCAiY29sdW1uTmFtZSIsICJwayIsICJhZmZpbml0eSIsICJkZXRlcm1pbmVDb2x1bW5BZmZpbml0eSIsICJpc0NvbXB1dGVkIiwgIm51bGxhYmxlIiwgIlNRTElURV9BRkZJTklUWV9UT19NRVRBREFUQSIsICJtb2NrSW50cm9zcGVjdCIsICJtb2NrVGFibGVzUXVlcnkiXQp9Cg==
9
+ import{a as j}from"../../chunk-R55ES2HZ.js";import{a as u}from"../../chunk-I4OGOLAT.js";import{A as I,D as L,p as E,q as d,r as w,s as B,x as O,z as f}from"../../chunk-R7UWW2TY.js";import{e as s}from"../../chunk-GDQBQ7MK.js";s();s();s();var D={BLOB:{group:"raw"},INTEGER:{group:"numeric"},NULL:{group:"raw"},NUMERIC:{group:"numeric"},REAL:{group:"numeric"},TEXT:{group:"string"}};function S(r){if(!r)return"BLOB";let t=r.toUpperCase();return t.includes("INT")?"INTEGER":t.includes("TEXT")||t.includes("CHAR")||t.includes("CLOB")?"TEXT":t.includes("BLOB")?"BLOB":t.includes("REAL")||t.includes("FLOA")||t.includes("DOUB")?"REAL":"NUMERIC"}s();s();function y(r){return O({...r,Adapter:B,QueryCompiler:w})}function N(r,t){let{filter:o={after:"and",filters:[],kind:"FilterGroup"},pageIndex:l,pageSize:n,sortOrder:e,table:{columns:a,name:i}}=r,c=y(t),b=L(o.filters,a),p="__ps_agg__",g="__ps_count__",k=c.selectFrom(i).where(b).select(m=>m.cast(m.fn.coalesce(m.fn.countAll(),d.lit(0)),"text").as(g));return f(c.with(p,()=>k).selectFrom(i).innerJoin(p,m=>m.onTrue()).where(b).select(`${p}.${g}`).select(Object.keys(a)).$call(m=>e.reduce((R,A)=>R.orderBy(A.column,A.direction),m)).limit(n).offset(d.lit(BigInt(l)*BigInt(n))))}function te(){return[{created_at:new Date("2025-01-26T21:56:12.345Z"),deleted_at:null,id:1,name:"John Doe",__ps_count__:"2",role:"admin",name_role:"Jonn Doe - admin"},{created_at:new Date("2025-01-26T20:56:12.345Z"),deleted_at:null,id:2,name:"Jane Doe",__ps_count__:"2",role:"poweruser",name_role:"Jane Doe - poweruser"}]}function C(r,t){let{rows:o,table:{columns:l,name:n}}=r,e=y(t);return f(e.deleteFrom(n).$call(I(o,l)).returning(Object.keys(l)).returning(Q().as("__ps_deleted_at__")))}function F(r,t){let{table:{columns:o,name:l},rows:n}=r,e=y(t);return f(e.insertInto(l).values(n.map(a=>Object.keys(a).length===0?{[Object.keys(o)[0]]:null}:a)).returning(Object.keys(o)).returning(Q().as("__ps_inserted_at__")))}function U(r,t){let{changes:o,row:l,table:{columns:n,name:e}}=r,a=y(t);return f(a.updateTable(e).set(o).$call(I([l],n)).returning(Object.keys(n)).returning(Q().as("__ps_updated_at__")))}function Q(){let r=E();return r.cast(r.cast(d`(julianday('now') - 2440587.5) * 86400000.0`,"integer"),"text")}s();s();function M(r){return d`(select coalesce(json_group_array(json_object(${d.join(X(r.toOperationNode(),"agg"))})), '[]') from ${r} as agg)`}function X(r,t){try{return j(r,t)}catch{throw new Error("SQLite jsonArrayFrom and jsonObjectFrom functions can only handle explicit selections due to limitations of the json_object function. selectAll() is not allowed in the subquery.")}}function P(r){return f(y(r).selectFrom(E().fn("pragma_table_list",[]).as("tl")).leftJoin("sqlite_schema as ss",t=>t.onRef("ss.type","=","tl.type").onRef("ss.name","=","tl.name")).where("tl.type","in",["table","view"]).where("tl.schema","=","main").where("tl.name","not like","sqlite_%").select(["tl.name","ss.sql"]).select(t=>[M(t.selectFrom(t.fn("pragma_table_xinfo",["tl.name"]).as("txi")).leftJoin(t.fn("pragma_foreign_key_list",["tl.name"]).as("fkl"),"fkl.from","txi.name").where("txi.hidden","!=",1).select(["txi.dflt_value as default","txi.name","txi.pk","txi.type as datatype","fkl.table as fk_table","fkl.to as fk_column"]).select(o=>[o("txi.hidden","in",[2,3]).as("computed"),o("txi.notnull","!=",0).as("nullable")])).as("columns")]),{transformations:{columns:"json-parse"}})}function v(){return[{name:"animals",sql:"CREATE TABLE animals (id INTEGER PRIMARY KEY, name TEXT);",columns:[{name:"id",datatype:"INTEGER",default:null,pk:1,computed:0,nullable:0,fk_table:null,fk_column:null},{name:"name",datatype:"TEXT",default:null,pk:0,computed:0,nullable:1,fk_table:null,fk_column:null}]},{name:"users",sql:"CREATE TABLE users (id UUID PRIMARY KEY, created_at TIMESTAMP, deleted_at TIMESTAMP, role varchar, name varchar, name_role text);",columns:[{name:"id",datatype:"UUID",default:null,pk:1,computed:0,nullable:0,fk_table:null,fk_column:null},{name:"created_at",datatype:"TIMESTAMP",default:null,pk:0,computed:0,nullable:1,fk_table:null,fk_column:null},{name:"deleted_at",datatype:"TIMESTAMP",default:null,pk:0,computed:0,nullable:1,fk_table:null,fk_column:null},{name:"role",datatype:"varchar",default:null,pk:0,computed:0,nullable:1,fk_table:null,fk_column:null},{name:"name",datatype:"varchar",default:null,pk:0,computed:0,nullable:1,fk_table:null,fk_column:null},{name:"name_role",datatype:"text",default:null,pk:0,computed:0,nullable:1,fk_table:null,fk_column:null}]},{name:"composite_pk",sql:"CREATE TABLE composite_pk (id UUID, name TEXT, created_at timestamp, PRIMARY KEY (id, name));",columns:[{name:"id",datatype:"UUID",default:null,pk:1,computed:0,nullable:0,fk_table:null,fk_column:null},{name:"name",datatype:"TEXT",default:null,pk:2,computed:0,nullable:1,fk_table:null,fk_column:null},{name:"created_at",datatype:"timestamp",default:null,pk:0,computed:0,nullable:1,fk_table:null,fk_column:null}]}]}var T="main",$=["=","!=",">",">=","<","<=","is","is not","like","not like"];function ge(r){let{executor:t,...o}=r;return{defaultSchema:T,async delete(l,n){try{let e=C(l,o),[a]=await t.execute(e,n);return a?u({error:a,query:e}):[null,{...l,query:e}]}catch(e){return u({error:e})}},async insert(l,n){try{let e=F(l,o),[a,i]=await t.execute(e,n);return a?u({error:a,query:e}):[null,{rows:i,query:e}]}catch(e){return u({error:e})}},async introspect(l){try{let n=P(r),[e,a]=await t.execute(n,l);return e?u({error:e,query:n}):[null,G({query:n,tables:a})]}catch(n){return u({error:n})}},async query(l,n){try{let e=N(l,o),[a,i]=await t.execute(e,n);return a?u({error:a,query:e}):[null,{filteredRowCount:i[0]?.__ps_count__||"0",rows:i,query:e}]}catch(e){return u({error:e})}},async update(l,n){try{let e=U(l,o),[a,i]=await t.execute(e,n);if(a)return u({error:a,query:e});let[c]=i;return c?[null,{row:c,query:e}]:u({error:new Error("Update failed"),query:e})}catch(e){return u({error:e})}}}}function G(r){let{tables:t,query:o}=r;return{filterOperators:$,query:o,schemas:t.reduce((l,n)=>{let{columns:e,name:a,sql:i}=n,c=e.reduce((b,p)=>{let{datatype:g,default:k,fk_column:m,name:R,pk:A}=p,x=S(g),h=!!p.computed,q=!!p.nullable;return b[R]={datatype:{...D[x],affinity:x,isArray:!1,isNative:!0,name:g,options:[],schema:T},defaultValue:k,fkColumn:m,fkSchema:m?T:null,fkTable:p.fk_table,isAutoincrement:!1,isComputed:h,isRequired:!q&&!h&&k==null,name:R,nullable:q,pkPosition:A>0?A:null,schema:T,table:a},b},{});return l.main.tables[a]={columns:c,name:a,schema:"main"},l},{main:{tables:{},name:"main"}}),timezone:"UTC"}}function Ae(){let r={parameters:[],sql:"<mocked>"},t=v();return G({query:r,tables:t})}export{ge as createSQLiteAdapter,C as getDeleteQuery,F as getInsertQuery,N as getSelectQuery,P as getTablesQuery,U as getUpdateQuery,Ae as mockIntrospect,te as mockSelectQuery,v as mockTablesQuery};
10
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vZGF0YS9zcWxpdGUtY29yZS9pbmRleC50cyIsICIuLi8uLi8uLi9kYXRhL3NxbGl0ZS1jb3JlL2FkYXB0ZXIudHMiLCAiLi4vLi4vLi4vZGF0YS9zcWxpdGUtY29yZS9kYXRhdHlwZS50cyIsICIuLi8uLi8uLi9kYXRhL3NxbGl0ZS1jb3JlL2RtbC50cyIsICIuLi8uLi8uLi9kYXRhL3NxbGl0ZS1jb3JlL2J1aWxkZXIudHMiLCAiLi4vLi4vLi4vZGF0YS9zcWxpdGUtY29yZS9pbnRyb3NwZWN0aW9uLnRzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9reXNlbHlAMC4yOC44L25vZGVfbW9kdWxlcy9reXNlbHkvZGlzdC9lc20vaGVscGVycy9zcWxpdGUuanMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbImV4cG9ydCAqIGZyb20gXCIuL2FkYXB0ZXJcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2RtbFwiO1xuZXhwb3J0ICogZnJvbSBcIi4vaW50cm9zcGVjdGlvblwiO1xuIiwgImltcG9ydCB7XG4gIHR5cGUgQWRhcHRlcixcbiAgdHlwZSBBZGFwdGVyRGVsZXRlUmVzdWx0LFxuICB0eXBlIEFkYXB0ZXJFcnJvcixcbiAgdHlwZSBBZGFwdGVySW5zZXJ0UmVzdWx0LFxuICB0eXBlIEFkYXB0ZXJJbnRyb3NwZWN0UmVzdWx0LFxuICB0eXBlIEFkYXB0ZXJRdWVyeVJlc3VsdCxcbiAgdHlwZSBBZGFwdGVyUmVxdWlyZW1lbnRzLFxuICB0eXBlIEFkYXB0ZXJVcGRhdGVSZXN1bHQsXG4gIGNyZWF0ZUFkYXB0ZXJFcnJvcixcbiAgdHlwZSBGaWx0ZXJPcGVyYXRvcixcbiAgdHlwZSBUYWJsZSxcbn0gZnJvbSBcIi4uL2FkYXB0ZXJcIjtcbmltcG9ydCB0eXBlIHsgUXVlcnksIFF1ZXJ5UmVzdWx0IH0gZnJvbSBcIi4uL3F1ZXJ5XCI7XG5pbXBvcnQgdHlwZSB7IEVpdGhlciB9IGZyb20gXCIuLi90eXBlLXV0aWxzXCI7XG5pbXBvcnQgeyBkZXRlcm1pbmVDb2x1bW5BZmZpbml0eSwgU1FMSVRFX0FGRklOSVRZX1RPX01FVEFEQVRBIH0gZnJvbSBcIi4vZGF0YXR5cGVcIjtcbmltcG9ydCB7IGdldERlbGV0ZVF1ZXJ5LCBnZXRJbnNlcnRRdWVyeSwgZ2V0U2VsZWN0UXVlcnksIGdldFVwZGF0ZVF1ZXJ5IH0gZnJvbSBcIi4vZG1sXCI7XG5pbXBvcnQgeyBnZXRUYWJsZXNRdWVyeSwgbW9ja1RhYmxlc1F1ZXJ5IH0gZnJvbSBcIi4vaW50cm9zcGVjdGlvblwiO1xuXG5leHBvcnQgdHlwZSBTUUxJdGVBZGFwdGVyUmVxdWlyZW1lbnRzID0gQWRhcHRlclJlcXVpcmVtZW50cztcblxuY29uc3Qgc2NoZW1hID0gXCJtYWluXCI7XG5cbmNvbnN0IGZpbHRlck9wZXJhdG9ycyA9IFtcbiAgXCI9XCIsXG4gIFwiIT1cIixcbiAgXCI+XCIsXG4gIFwiPj1cIixcbiAgXCI8XCIsXG4gIFwiPD1cIixcbiAgXCJpc1wiLFxuICBcImlzIG5vdFwiLFxuICBcImxpa2VcIixcbiAgXCJub3QgbGlrZVwiLFxuXSBzYXRpc2ZpZXMgRmlsdGVyT3BlcmF0b3JbXTtcblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVNRTGl0ZUFkYXB0ZXIocmVxdWlyZW1lbnRzOiBTUUxJdGVBZGFwdGVyUmVxdWlyZW1lbnRzKTogQWRhcHRlciB7XG4gIGNvbnN0IHsgZXhlY3V0b3IsIC4uLm90aGVyUmVxdWlyZW1lbnRzIH0gPSByZXF1aXJlbWVudHM7XG5cbiAgcmV0dXJuIHtcbiAgICBkZWZhdWx0U2NoZW1hOiBzY2hlbWEsXG5cbiAgICBhc3luYyBkZWxldGUoZGV0YWlscywgb3B0aW9ucyk6IFByb21pc2U8RWl0aGVyPEFkYXB0ZXJFcnJvciwgQWRhcHRlckRlbGV0ZVJlc3VsdD4+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHF1ZXJ5ID0gZ2V0RGVsZXRlUXVlcnkoZGV0YWlscywgb3RoZXJSZXF1aXJlbWVudHMpO1xuXG4gICAgICAgIC8vIFRPRE86IHVzZSByZXN1bHRzIHRvby5cbiAgICAgICAgY29uc3QgW2Vycm9yXSA9IGF3YWl0IGV4ZWN1dG9yLmV4ZWN1dGUocXVlcnksIG9wdGlvbnMpO1xuXG4gICAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgIHJldHVybiBjcmVhdGVBZGFwdGVyRXJyb3IoeyBlcnJvciwgcXVlcnkgfSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gW251bGwsIHsgLi4uZGV0YWlscywgcXVlcnkgfV07XG4gICAgICB9IGNhdGNoIChlcnJvcjogdW5rbm93bikge1xuICAgICAgICByZXR1cm4gY3JlYXRlQWRhcHRlckVycm9yKHsgZXJyb3I6IGVycm9yIGFzIEVycm9yIH0pO1xuICAgICAgfVxuICAgIH0sXG5cbiAgICBhc3luYyBpbnNlcnQoZGV0YWlscywgb3B0aW9ucyk6IFByb21pc2U8RWl0aGVyPEFkYXB0ZXJFcnJvciwgQWRhcHRlckluc2VydFJlc3VsdD4+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHF1ZXJ5ID0gZ2V0SW5zZXJ0UXVlcnkoZGV0YWlscywgb3RoZXJSZXF1aXJlbWVudHMpO1xuXG4gICAgICAgIGNvbnN0IFtlcnJvciwgcm93c10gPSBhd2FpdCBleGVjdXRvci5leGVjdXRlKHF1ZXJ5LCBvcHRpb25zKTtcblxuICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICByZXR1cm4gY3JlYXRlQWRhcHRlckVycm9yKHsgZXJyb3IsIHF1ZXJ5IH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIFtudWxsLCB7IHJvd3MsIHF1ZXJ5IH1dO1xuICAgICAgfSBjYXRjaCAoZXJyb3I6IHVua25vd24pIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZUFkYXB0ZXJFcnJvcih7IGVycm9yOiBlcnJvciBhcyBFcnJvciB9KTtcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgYXN5bmMgaW50cm9zcGVjdChvcHRpb25zKTogUHJvbWlzZTxFaXRoZXI8QWRhcHRlckVycm9yLCBBZGFwdGVySW50cm9zcGVjdFJlc3VsdD4+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHRhYmxlc1F1ZXJ5ID0gZ2V0VGFibGVzUXVlcnkocmVxdWlyZW1lbnRzKTtcblxuICAgICAgICBjb25zdCBbdGFibGVzRXJyb3IsIHRhYmxlc10gPSBhd2FpdCBleGVjdXRvci5leGVjdXRlKHRhYmxlc1F1ZXJ5LCBvcHRpb25zKTtcblxuICAgICAgICBpZiAodGFibGVzRXJyb3IpIHtcbiAgICAgICAgICByZXR1cm4gY3JlYXRlQWRhcHRlckVycm9yKHsgZXJyb3I6IHRhYmxlc0Vycm9yLCBxdWVyeTogdGFibGVzUXVlcnkgfSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gW251bGwsIGNyZWF0ZUludHJvc3BlY3Rpb24oeyBxdWVyeTogdGFibGVzUXVlcnksIHRhYmxlcyB9KV07XG4gICAgICB9IGNhdGNoIChlcnJvcjogdW5rbm93bikge1xuICAgICAgICByZXR1cm4gY3JlYXRlQWRhcHRlckVycm9yKHsgZXJyb3I6IGVycm9yIGFzIEVycm9yIH0pO1xuICAgICAgfVxuICAgIH0sXG5cbiAgICBhc3luYyBxdWVyeShkZXRhaWxzLCBvcHRpb25zKTogUHJvbWlzZTxFaXRoZXI8QWRhcHRlckVycm9yLCBBZGFwdGVyUXVlcnlSZXN1bHQ+PiB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBxdWVyeSA9IGdldFNlbGVjdFF1ZXJ5KGRldGFpbHMsIG90aGVyUmVxdWlyZW1lbnRzKTtcblxuICAgICAgICBjb25zdCBbZXJyb3IsIHJlc3VsdHNdID0gYXdhaXQgZXhlY3V0b3IuZXhlY3V0ZShxdWVyeSwgb3B0aW9ucyk7XG5cbiAgICAgICAgaWYgKGVycm9yKSB7XG4gICAgICAgICAgcmV0dXJuIGNyZWF0ZUFkYXB0ZXJFcnJvcih7IGVycm9yLCBxdWVyeSB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBbbnVsbCwgeyBmaWx0ZXJlZFJvd0NvdW50OiByZXN1bHRzWzBdPy5fX3BzX2NvdW50X18gfHwgXCIwXCIsIHJvd3M6IHJlc3VsdHMsIHF1ZXJ5IH1dO1xuICAgICAgfSBjYXRjaCAoZXJyb3I6IHVua25vd24pIHtcbiAgICAgICAgLy8gVE9ETzogaGFuZGxlIHByb3Blcmx5XG4gICAgICAgIHJldHVybiBjcmVhdGVBZGFwdGVyRXJyb3IoeyBlcnJvcjogZXJyb3IgYXMgRXJyb3IgfSk7XG4gICAgICB9XG4gICAgfSxcblxuICAgIGFzeW5jIHVwZGF0ZShkZXRhaWxzLCBvcHRpb25zKTogUHJvbWlzZTxFaXRoZXI8QWRhcHRlckVycm9yLCBBZGFwdGVyVXBkYXRlUmVzdWx0Pj4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcXVlcnkgPSBnZXRVcGRhdGVRdWVyeShkZXRhaWxzLCBvdGhlclJlcXVpcmVtZW50cyk7XG5cbiAgICAgICAgY29uc3QgW2Vycm9yLCByZXN1bHRzXSA9IGF3YWl0IGV4ZWN1dG9yLmV4ZWN1dGUocXVlcnksIG9wdGlvbnMpO1xuXG4gICAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgIHJldHVybiBjcmVhdGVBZGFwdGVyRXJyb3IoeyBlcnJvciwgcXVlcnkgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBbcm93XSA9IHJlc3VsdHM7XG5cbiAgICAgICAgaWYgKCFyb3cpIHtcbiAgICAgICAgICAvLyBUT0RPOiBjdXN0b20gZXJyb3I/XG4gICAgICAgICAgcmV0dXJuIGNyZWF0ZUFkYXB0ZXJFcnJvcih7IGVycm9yOiBuZXcgRXJyb3IoXCJVcGRhdGUgZmFpbGVkXCIpLCBxdWVyeSB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBbbnVsbCwgeyByb3csIHF1ZXJ5IH1dO1xuICAgICAgfSBjYXRjaCAoZXJyb3I6IHVua25vd24pIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZUFkYXB0ZXJFcnJvcih7IGVycm9yOiBlcnJvciBhcyBFcnJvciB9KTtcbiAgICAgIH1cbiAgICB9LFxuICB9O1xufVxuXG5mdW5jdGlvbiBjcmVhdGVJbnRyb3NwZWN0aW9uKGFyZ3M6IHtcbiAgdGFibGVzOiBRdWVyeVJlc3VsdDx0eXBlb2YgZ2V0VGFibGVzUXVlcnk+O1xuICBxdWVyeTogUXVlcnk7XG59KTogQWRhcHRlckludHJvc3BlY3RSZXN1bHQge1xuICBjb25zdCB7IHRhYmxlcywgcXVlcnk6IHRhYmxlc1F1ZXJ5IH0gPSBhcmdzO1xuXG4gIHJldHVybiB7XG4gICAgZmlsdGVyT3BlcmF0b3JzLFxuICAgIHF1ZXJ5OiB0YWJsZXNRdWVyeSxcbiAgICBzY2hlbWFzOiB0YWJsZXMucmVkdWNlKFxuICAgICAgKHNjaGVtYXMsIHRhYmxlKSA9PiB7XG4gICAgICAgIGNvbnN0IHsgY29sdW1ucywgbmFtZTogdGFibGVOYW1lLCBzcWw6IF9zcWwgfSA9IHRhYmxlO1xuXG4gICAgICAgIGNvbnN0IGNvbHVtbnNSZWNvcmQgPSBjb2x1bW5zLnJlZHVjZShcbiAgICAgICAgICAoY29sdW1ucywgY29sdW1uKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB7IGRhdGF0eXBlLCBkZWZhdWx0OiBkZWZhdWx0VmFsdWUsIGZrX2NvbHVtbiwgbmFtZTogY29sdW1uTmFtZSwgcGsgfSA9IGNvbHVtbjtcblxuICAgICAgICAgICAgY29uc3QgYWZmaW5pdHkgPSBkZXRlcm1pbmVDb2x1bW5BZmZpbml0eShkYXRhdHlwZSk7XG5cbiAgICAgICAgICAgIGNvbnN0IGlzQ29tcHV0ZWQgPSBCb29sZWFuKGNvbHVtbi5jb21wdXRlZCk7XG4gICAgICAgICAgICBjb25zdCBudWxsYWJsZSA9IEJvb2xlYW4oY29sdW1uLm51bGxhYmxlKTtcblxuICAgICAgICAgICAgY29sdW1uc1tjb2x1bW5OYW1lXSA9IHtcbiAgICAgICAgICAgICAgZGF0YXR5cGU6IHtcbiAgICAgICAgICAgICAgICAvLyBUT0RPOiB3b3J0aCBleHBsb3Jpbmcgc3RpbGwgdmliaW5nIHdpdGggdGhlIGRlY2xhcmVkIGRhdGEgdHlwZSBmb3Igc3R1ZmYgbGlrZSBkYXRlcyBpbiB0aGUgZnV0dXJlLlxuICAgICAgICAgICAgICAgIC4uLlNRTElURV9BRkZJTklUWV9UT19NRVRBREFUQVthZmZpbml0eV0sXG4gICAgICAgICAgICAgICAgYWZmaW5pdHksXG4gICAgICAgICAgICAgICAgaXNBcnJheTogZmFsc2UsXG4gICAgICAgICAgICAgICAgaXNOYXRpdmU6IHRydWUsXG4gICAgICAgICAgICAgICAgbmFtZTogZGF0YXR5cGUsXG4gICAgICAgICAgICAgICAgLy8gVE9ETzogdXNlIGB0YWJsZS5zcWxgIHRvIGRldGVybWluZSBlbnVtIG9wdGlvbnMgZnJvbSBgY2hlY2tgIGNvbnN0cmFpbnRzLlxuICAgICAgICAgICAgICAgIG9wdGlvbnM6IFtdLFxuICAgICAgICAgICAgICAgIHNjaGVtYSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgZGVmYXVsdFZhbHVlLFxuICAgICAgICAgICAgICBma0NvbHVtbjogZmtfY29sdW1uLFxuICAgICAgICAgICAgICBma1NjaGVtYTogZmtfY29sdW1uID8gc2NoZW1hIDogbnVsbCxcbiAgICAgICAgICAgICAgZmtUYWJsZTogY29sdW1uLmZrX3RhYmxlLFxuICAgICAgICAgICAgICAvLyBUT0RPOiB1c2UgYHRhYmxlLnNxbGAgdG8gZGV0ZXJtaW5lIGF1dG9pbmNyZW1lbnRcbiAgICAgICAgICAgICAgaXNBdXRvaW5jcmVtZW50OiBmYWxzZSxcbiAgICAgICAgICAgICAgaXNDb21wdXRlZCxcbiAgICAgICAgICAgICAgLy8gVE9ETzogYWxzbyBoYW5kbGUgIWF1dG9pbmNcbiAgICAgICAgICAgICAgaXNSZXF1aXJlZDogIW51bGxhYmxlICYmICFpc0NvbXB1dGVkICYmIGRlZmF1bHRWYWx1ZSA9PSBudWxsLFxuICAgICAgICAgICAgICBuYW1lOiBjb2x1bW5OYW1lLFxuICAgICAgICAgICAgICBudWxsYWJsZSxcbiAgICAgICAgICAgICAgcGtQb3NpdGlvbjogcGsgPiAwID8gcGsgOiBudWxsLFxuICAgICAgICAgICAgICBzY2hlbWEsXG4gICAgICAgICAgICAgIHRhYmxlOiB0YWJsZU5hbWUsXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICByZXR1cm4gY29sdW1ucztcbiAgICAgICAgICB9LFxuICAgICAgICAgIHt9IGFzIFRhYmxlW1wiY29sdW1uc1wiXSxcbiAgICAgICAgKTtcblxuICAgICAgICBzY2hlbWFzLm1haW4hLnRhYmxlc1t0YWJsZU5hbWVdID0ge1xuICAgICAgICAgIGNvbHVtbnM6IGNvbHVtbnNSZWNvcmQsXG4gICAgICAgICAgbmFtZTogdGFibGVOYW1lLFxuICAgICAgICAgIHNjaGVtYTogXCJtYWluXCIsXG4gICAgICAgIH07XG5cbiAgICAgICAgcmV0dXJuIHNjaGVtYXM7XG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBtYWluOiB7IHRhYmxlczoge30sIG5hbWU6IFwibWFpblwiIH0sXG4gICAgICB9IHNhdGlzZmllcyBBZGFwdGVySW50cm9zcGVjdFJlc3VsdFtcInNjaGVtYXNcIl0gYXMgQWRhcHRlckludHJvc3BlY3RSZXN1bHRbXCJzY2hlbWFzXCJdLFxuICAgICksXG4gICAgdGltZXpvbmU6IFwiVVRDXCIsXG4gIH07XG59XG5cbi8qKlxuICogRm9yIHRlc3RpbmcgcHVycG9zZXMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtb2NrSW50cm9zcGVjdCgpIHtcbiAgY29uc3QgcXVlcnkgPSB7IHBhcmFtZXRlcnM6IFtdLCBzcWw6IFwiPG1vY2tlZD5cIiB9IGFzIFF1ZXJ5O1xuICBjb25zdCB0YWJsZXMgPSBtb2NrVGFibGVzUXVlcnkoKTtcblxuICByZXR1cm4gY3JlYXRlSW50cm9zcGVjdGlvbih7IHF1ZXJ5LCB0YWJsZXMgfSkgYXMge1xuICAgIC8vIGJlc3QgZWZmb3J0LCBubyBuZWVkIGdvIG92ZXJib2FyZC5cbiAgICBzY2hlbWFzOiB7XG4gICAgICBtYWluOiB7XG4gICAgICAgIG5hbWU6IFwibWFpblwiO1xuICAgICAgICB0YWJsZXM6IHtcbiAgICAgICAgICBbVCBpbiAodHlwZW9mIHRhYmxlcylbbnVtYmVyXVtcIm5hbWVcIl1dOiBUYWJsZTtcbiAgICAgICAgfTtcbiAgICAgIH07XG4gICAgfTtcbiAgICB0aW1lem9uZTogc3RyaW5nO1xuICAgIGZpbHRlck9wZXJhdG9yczogRmlsdGVyT3BlcmF0b3JbXTtcbiAgICBxdWVyeTogUXVlcnk7XG4gIH0gc2F0aXNmaWVzIEFkYXB0ZXJJbnRyb3NwZWN0UmVzdWx0O1xufVxuIiwgImltcG9ydCB0eXBlIHsgRGF0YVR5cGUgfSBmcm9tIFwiLi4vYWRhcHRlclwiO1xuXG5leHBvcnQgdHlwZSBTUUxpdGVBZmZpbml0eSA9IFwiQkxPQlwiIHwgXCJJTlRFR0VSXCIgfCBcIk5VTExcIiB8IFwiTlVNRVJJQ1wiIHwgXCJSRUFMXCIgfCBcIlRFWFRcIjtcblxuZXhwb3J0IGNvbnN0IFNRTElURV9BRkZJTklUWV9UT19NRVRBREFUQTogUmVjb3JkPFNRTGl0ZUFmZmluaXR5LCBQaWNrPERhdGFUeXBlLCBcImZvcm1hdFwiIHwgXCJncm91cFwiPj4gPSB7XG4gIEJMT0I6IHtcbiAgICBncm91cDogXCJyYXdcIixcbiAgfSxcbiAgSU5URUdFUjoge1xuICAgIGdyb3VwOiBcIm51bWVyaWNcIixcbiAgfSxcbiAgTlVMTDoge1xuICAgIGdyb3VwOiBcInJhd1wiLFxuICB9LFxuICBOVU1FUklDOiB7XG4gICAgZ3JvdXA6IFwibnVtZXJpY1wiLFxuICB9LFxuICBSRUFMOiB7XG4gICAgZ3JvdXA6IFwibnVtZXJpY1wiLFxuICB9LFxuICBURVhUOiB7XG4gICAgZ3JvdXA6IFwic3RyaW5nXCIsXG4gIH0sXG59O1xuXG4vKipcbiAqIGh0dHBzOi8vc3FsaXRlLm9yZy9kYXRhdHlwZTMuaHRtbCNkZXRlcm1pbmF0aW9uX29mX2NvbHVtbl9hZmZpbml0eVxuICpcbiAqIERPIE5PVCBDSEFOR0UgVEhFIE9SREVSIE9GIFRIRSBDSEVDS1MgSU4gVEhJUyBGVU5DVElPTiFcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRldGVybWluZUNvbHVtbkFmZmluaXR5KGRlY2xhcmVkRGF0YVR5cGU6IHN0cmluZyB8IG51bGwpOiBTUUxpdGVBZmZpbml0eSB7XG4gIGlmICghZGVjbGFyZWREYXRhVHlwZSkge1xuICAgIHJldHVybiBcIkJMT0JcIjtcbiAgfVxuXG4gIGNvbnN0IHVwcGVyVHlwZSA9IGRlY2xhcmVkRGF0YVR5cGUudG9VcHBlckNhc2UoKTtcblxuICBpZiAodXBwZXJUeXBlLmluY2x1ZGVzKFwiSU5UXCIpKSB7XG4gICAgcmV0dXJuIFwiSU5URUdFUlwiO1xuICB9XG5cbiAgaWYgKHVwcGVyVHlwZS5pbmNsdWRlcyhcIlRFWFRcIikgfHwgdXBwZXJUeXBlLmluY2x1ZGVzKFwiQ0hBUlwiKSB8fCB1cHBlclR5cGUuaW5jbHVkZXMoXCJDTE9CXCIpKSB7XG4gICAgcmV0dXJuIFwiVEVYVFwiO1xuICB9XG5cbiAgaWYgKHVwcGVyVHlwZS5pbmNsdWRlcyhcIkJMT0JcIikpIHtcbiAgICByZXR1cm4gXCJCTE9CXCI7XG4gIH1cblxuICBpZiAodXBwZXJUeXBlLmluY2x1ZGVzKFwiUkVBTFwiKSB8fCB1cHBlclR5cGUuaW5jbHVkZXMoXCJGTE9BXCIpIHx8IHVwcGVyVHlwZS5pbmNsdWRlcyhcIkRPVUJcIikpIHtcbiAgICByZXR1cm4gXCJSRUFMXCI7XG4gIH1cblxuICByZXR1cm4gXCJOVU1FUklDXCI7XG59XG4iLCAiaW1wb3J0IHsgZXhwcmVzc2lvbkJ1aWxkZXIsIHR5cGUgSW5mZXJSZXN1bHQsIHNxbCB9IGZyb20gXCJreXNlbHlcIjtcbmltcG9ydCB7IFNpbXBsZVJlZmVyZW5jZUV4cHJlc3Npb24gfSBmcm9tIFwia3lzZWx5XCI7XG5cbmltcG9ydCB0eXBlIHsgQWRhcHRlckRlbGV0ZURldGFpbHMsIEFkYXB0ZXJJbnNlcnREZXRhaWxzLCBBZGFwdGVyUXVlcnlEZXRhaWxzLCBBZGFwdGVyVXBkYXRlRGV0YWlscyB9IGZyb20gXCIuLi9hZGFwdGVyXCI7XG5pbXBvcnQgeyBhcHBseUluZmVycmVkUm93RmlsdGVycywgdHlwZSBCdWlsZGVyUmVxdWlyZW1lbnRzLCBjb21waWxlLCBnZXRTZWxlY3RGaWx0ZXJFeHByZXNzaW9uIH0gZnJvbSBcIi4uL3F1ZXJ5XCI7XG5pbXBvcnQgdHlwZSB7IEJpZ0ludFN0cmluZyB9IGZyb20gXCIuLi90eXBlLXV0aWxzXCI7XG5pbXBvcnQgeyBnZXRTUUxpdGVCdWlsZGVyIH0gZnJvbSBcIi4vYnVpbGRlclwiO1xuaW1wb3J0IHsgbW9ja1RhYmxlc1F1ZXJ5IH0gZnJvbSBcIi4vaW50cm9zcGVjdGlvblwiO1xuXG4vKipcbiAqIFJldHVybnMgYSBxdWVyeSB0aGF0IHNlbGVjdHMgYWxsIGNvbHVtbnMgZnJvbSBhIHRhYmxlIHdpdGggYW4gdW5ib3VuZCByb3cgY291bnQgYXMgYF9fcHNfY291bnRfX2AuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRTZWxlY3RRdWVyeShcbiAgZGV0YWlsczogQWRhcHRlclF1ZXJ5RGV0YWlscyxcbiAgcmVxdWlyZW1lbnRzPzogT21pdDxCdWlsZGVyUmVxdWlyZW1lbnRzLCBcIkFkYXB0ZXJcIiB8IFwiUXVlcnlDb21waWxlclwiPixcbikge1xuICBjb25zdCB7XG4gICAgZmlsdGVyID0geyBhZnRlcjogXCJhbmRcIiwgZmlsdGVyczogW10sIGtpbmQ6IFwiRmlsdGVyR3JvdXBcIiB9LFxuICAgIHBhZ2VJbmRleCxcbiAgICBwYWdlU2l6ZSxcbiAgICBzb3J0T3JkZXIsXG4gICAgdGFibGU6IHsgY29sdW1ucywgbmFtZTogdGFibGVOYW1lIH0sXG4gIH0gPSBkZXRhaWxzO1xuXG4gIGNvbnN0IGJ1aWxkZXIgPSBnZXRTUUxpdGVCdWlsZGVyPFJlY29yZDxzdHJpbmcsIFJlY29yZDxzdHJpbmcsIHVua25vd24+Pj4ocmVxdWlyZW1lbnRzKTtcblxuICBjb25zdCBmaWx0ZXJFeHByZXNzaW9uID0gZ2V0U2VsZWN0RmlsdGVyRXhwcmVzc2lvbihmaWx0ZXIuZmlsdGVycywgY29sdW1ucyk7XG5cbiAgY29uc3QgQUdHX05BTUUgPSBcIl9fcHNfYWdnX19cIjtcbiAgY29uc3QgQ09VTlRfUkVGID0gXCJfX3BzX2NvdW50X19cIjtcblxuICBjb25zdCBjb3VudFF1ZXJ5ID0gYnVpbGRlclxuICAgIC5zZWxlY3RGcm9tKHRhYmxlTmFtZSlcbiAgICAud2hlcmUoZmlsdGVyRXhwcmVzc2lvbilcbiAgICAuc2VsZWN0KChlYikgPT4gZWIuY2FzdDxCaWdJbnRTdHJpbmc+KGViLmZuLmNvYWxlc2NlKGViLmZuLmNvdW50QWxsKCksIHNxbC5saXQoMCkpLCBcInRleHRcIikuYXMoQ09VTlRfUkVGKSk7XG5cbiAgcmV0dXJuIGNvbXBpbGUoXG4gICAgYnVpbGRlclxuICAgICAgLndpdGgoQUdHX05BTUUsICgpID0+IGNvdW50UXVlcnkpXG4gICAgICAuc2VsZWN0RnJvbSh0YWJsZU5hbWUpXG4gICAgICAuaW5uZXJKb2luKEFHR19OQU1FLCAoamIpID0+IGpiLm9uVHJ1ZSgpKVxuICAgICAgLy8gVE9ETzogY3Vyc29yIHBhZ2luYXRpb24/XG4gICAgICAud2hlcmUoZmlsdGVyRXhwcmVzc2lvbilcbiAgICAgIC5zZWxlY3QoXG4gICAgICAgIGAke0FHR19OQU1FfS4ke0NPVU5UX1JFRn1gIHNhdGlzZmllcyBTaW1wbGVSZWZlcmVuY2VFeHByZXNzaW9uPFxuICAgICAgICAgIHsgW0FHR19OQU1FXTogSW5mZXJSZXN1bHQ8dHlwZW9mIGNvdW50UXVlcnk+W251bWJlcl0gfSxcbiAgICAgICAgICB0eXBlb2YgQUdHX05BTUVcbiAgICAgICAgPixcbiAgICAgIClcbiAgICAgIC5zZWxlY3QoT2JqZWN0LmtleXMoY29sdW1ucykpXG4gICAgICAuJGNhbGwoKHFiKSA9PiBzb3J0T3JkZXIucmVkdWNlKChxYiwgaXRlbSkgPT4gcWIub3JkZXJCeShpdGVtLmNvbHVtbiwgaXRlbS5kaXJlY3Rpb24pLCBxYikpXG4gICAgICAubGltaXQocGFnZVNpemUpXG4gICAgICAvLyB3ZSdyZSBpbmplY3RpbmcgdGhlIG9mZnNldCB2YWx1ZSBoZXJlIHRvIGF2b2lkIHNlcmlhbGl6YXRpb24gY29tcGxleGl0eSAoYGJpZ2ludGAgaXMgYSBuby1nbyBmb3IgYEpTT04uc3RyaW5naWZ5YCkuXG4gICAgICAub2Zmc2V0KHNxbC5saXQoQmlnSW50KHBhZ2VJbmRleCkgKiBCaWdJbnQocGFnZVNpemUpKSksXG4gICk7XG59XG5cbi8qKlxuICogRm9yIHRlc3RpbmcgcHVycG9zZXMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtb2NrU2VsZWN0UXVlcnkoKSB7XG4gIHJldHVybiBbXG4gICAge1xuICAgICAgY3JlYXRlZF9hdDogbmV3IERhdGUoXCIyMDI1LTAxLTI2VDIxOjU2OjEyLjM0NVpcIiksXG4gICAgICBkZWxldGVkX2F0OiBudWxsLFxuICAgICAgaWQ6IDEsXG4gICAgICBuYW1lOiBcIkpvaG4gRG9lXCIsXG4gICAgICBfX3BzX2NvdW50X186IFwiMlwiLFxuICAgICAgcm9sZTogXCJhZG1pblwiLFxuICAgICAgbmFtZV9yb2xlOiBcIkpvbm4gRG9lIC0gYWRtaW5cIixcbiAgICB9LFxuICAgIHtcbiAgICAgIGNyZWF0ZWRfYXQ6IG5ldyBEYXRlKFwiMjAyNS0wMS0yNlQyMDo1NjoxMi4zNDVaXCIpLFxuICAgICAgZGVsZXRlZF9hdDogbnVsbCxcbiAgICAgIGlkOiAyLFxuICAgICAgbmFtZTogXCJKYW5lIERvZVwiLFxuICAgICAgX19wc19jb3VudF9fOiBcIjJcIixcbiAgICAgIHJvbGU6IFwicG93ZXJ1c2VyXCIsXG4gICAgICBuYW1lX3JvbGU6IFwiSmFuZSBEb2UgLSBwb3dlcnVzZXJcIixcbiAgICB9LFxuICBdIGFzIGNvbnN0IHNhdGlzZmllcyB7XG4gICAgLy8gYmVzdCBlZmZvcnQgbm8gbmVlZCB0byBnbyBvdmVyYm9hcmRcbiAgICBbSyBpbiBSZXR1cm5UeXBlPHR5cGVvZiBtb2NrVGFibGVzUXVlcnk+WzFdW1wiY29sdW1uc1wiXVtudW1iZXJdW1wibmFtZVwiXSB8IFwiX19wc19jb3VudF9fXCJdOiB1bmtub3duO1xuICB9W107XG59XG5cbi8qKlxuICogUmV0dXJucyBhIHF1ZXJ5IHRoYXQgZGVsZXRlcyBhIGdpdmVuIHNldCBvZiByb3dzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGVsZXRlUXVlcnkoXG4gIGRldGFpbHM6IEFkYXB0ZXJEZWxldGVEZXRhaWxzLFxuICByZXF1aXJlbWVudHM/OiBPbWl0PEJ1aWxkZXJSZXF1aXJlbWVudHMsIFwiQWRhcHRlclwiIHwgXCJRdWVyeUNvbXBpbGVyXCI+LFxuKSB7XG4gIGNvbnN0IHtcbiAgICByb3dzLFxuICAgIHRhYmxlOiB7IGNvbHVtbnMsIG5hbWU6IHRhYmxlTmFtZSB9LFxuICB9ID0gZGV0YWlscztcblxuICBjb25zdCBidWlsZGVyID0gZ2V0U1FMaXRlQnVpbGRlcjxSZWNvcmQ8c3RyaW5nLCBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4+KHJlcXVpcmVtZW50cyk7XG5cbiAgcmV0dXJuIGNvbXBpbGUoXG4gICAgYnVpbGRlclxuICAgICAgLmRlbGV0ZUZyb20odGFibGVOYW1lKVxuICAgICAgLiRjYWxsKGFwcGx5SW5mZXJyZWRSb3dGaWx0ZXJzKHJvd3MsIGNvbHVtbnMpKVxuICAgICAgLnJldHVybmluZyhPYmplY3Qua2V5cyhjb2x1bW5zKSlcbiAgICAgIC5yZXR1cm5pbmcoZ2V0Q3VycmVudFRpbWVzdGFtcE1pbGxpcygpLmFzKFwiX19wc19kZWxldGVkX2F0X19cIikpLFxuICApO1xufVxuXG4vKipcbiAqIEluc2VydHMgb25lIG9yIG1vcmUgcm93cyBpbnRvIGEgdGFibGUgYW5kIHJldHVybnMgdGhlIGluc2VydGVkIHJvd3MgYWxvbmcgd2l0aCB0aGVpciBgY3RpZGAuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRJbnNlcnRRdWVyeShcbiAgZGV0YWlsczogQWRhcHRlckluc2VydERldGFpbHMsXG4gIHJlcXVpcmVtZW50cz86IE9taXQ8QnVpbGRlclJlcXVpcmVtZW50cywgXCJBZGFwdGVyXCIgfCBcIlF1ZXJ5Q29tcGlsZXJcIj4sXG4pIHtcbiAgY29uc3Qge1xuICAgIHRhYmxlOiB7IGNvbHVtbnMsIG5hbWU6IHRhYmxlTmFtZSB9LFxuICAgIHJvd3MsXG4gIH0gPSBkZXRhaWxzO1xuXG4gIGNvbnN0IGJ1aWxkZXIgPSBnZXRTUUxpdGVCdWlsZGVyPFJlY29yZDxzdHJpbmcsIFJlY29yZDxzdHJpbmcsIHVua25vd24+Pj4ocmVxdWlyZW1lbnRzKTtcblxuICByZXR1cm4gY29tcGlsZShcbiAgICBidWlsZGVyXG4gICAgICAuaW5zZXJ0SW50byh0YWJsZU5hbWUpXG4gICAgICAudmFsdWVzKHJvd3MubWFwKChyb3cpID0+IChPYmplY3Qua2V5cyhyb3cpLmxlbmd0aCA9PT0gMCA/IHsgW09iamVjdC5rZXlzKGNvbHVtbnMpWzBdIV06IG51bGwgfSA6IHJvdykpKVxuICAgICAgLnJldHVybmluZyhPYmplY3Qua2V5cyhjb2x1bW5zKSlcbiAgICAgIC5yZXR1cm5pbmcoZ2V0Q3VycmVudFRpbWVzdGFtcE1pbGxpcygpLmFzKFwiX19wc19pbnNlcnRlZF9hdF9fXCIpKSxcbiAgKTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGEgcXVlcnkgdGhhdCB1cGRhdGVzIGEgZ2l2ZW4gcm93IGluIGEgdGFibGUgd2l0aCBnaXZlbiBjaGFuZ2VzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0VXBkYXRlUXVlcnkoXG4gIGRldGFpbHM6IEFkYXB0ZXJVcGRhdGVEZXRhaWxzLFxuICByZXF1aXJlbWVudHM/OiBPbWl0PEJ1aWxkZXJSZXF1aXJlbWVudHMsIFwiQWRhcHRlclwiIHwgXCJRdWVyeUNvbXBpbGVyXCI+LFxuKSB7XG4gIGNvbnN0IHtcbiAgICBjaGFuZ2VzLFxuICAgIHJvdyxcbiAgICB0YWJsZTogeyBjb2x1bW5zLCBuYW1lOiB0YWJsZU5hbWUgfSxcbiAgfSA9IGRldGFpbHM7XG5cbiAgY29uc3QgYnVpbGRlciA9IGdldFNRTGl0ZUJ1aWxkZXI8UmVjb3JkPHN0cmluZywgUmVjb3JkPHN0cmluZywgdW5rbm93bj4+PihyZXF1aXJlbWVudHMpO1xuXG4gIHJldHVybiBjb21waWxlKFxuICAgIGJ1aWxkZXJcbiAgICAgIC51cGRhdGVUYWJsZSh0YWJsZU5hbWUpXG4gICAgICAuc2V0KGNoYW5nZXMpXG4gICAgICAuJGNhbGwoYXBwbHlJbmZlcnJlZFJvd0ZpbHRlcnMoW3Jvd10sIGNvbHVtbnMpKVxuICAgICAgLnJldHVybmluZyhPYmplY3Qua2V5cyhjb2x1bW5zKSlcbiAgICAgIC5yZXR1cm5pbmcoZ2V0Q3VycmVudFRpbWVzdGFtcE1pbGxpcygpLmFzKFwiX19wc191cGRhdGVkX2F0X19cIikpLFxuICApO1xufVxuXG5mdW5jdGlvbiBnZXRDdXJyZW50VGltZXN0YW1wTWlsbGlzKCkge1xuICBjb25zdCBlYiA9IGV4cHJlc3Npb25CdWlsZGVyKCk7XG5cbiAgcmV0dXJuIGViLmNhc3Q8QmlnSW50U3RyaW5nPihlYi5jYXN0KHNxbGAoanVsaWFuZGF5KCdub3cnKSAtIDI0NDA1ODcuNSkgKiA4NjQwMDAwMC4wYCwgXCJpbnRlZ2VyXCIpLCBcInRleHRcIik7XG59XG4iLCAiaW1wb3J0IHsgdHlwZSBLeXNlbHksIFNxbGl0ZUFkYXB0ZXIsIFNxbGl0ZVF1ZXJ5Q29tcGlsZXIgfSBmcm9tIFwia3lzZWx5XCI7XG5cbmltcG9ydCB7IHR5cGUgQnVpbGRlclJlcXVpcmVtZW50cywgZ2V0QnVpbGRlciB9IGZyb20gXCIuLi9xdWVyeVwiO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuZXhwb3J0IGZ1bmN0aW9uIGdldFNRTGl0ZUJ1aWxkZXI8RGF0YWJhc2UgPSBhbnk+KFxuICByZXF1aXJlbWVudHM/OiBPbWl0PEJ1aWxkZXJSZXF1aXJlbWVudHMsIFwiQWRhcHRlclwiIHwgXCJRdWVyeUNvbXBpbGVyXCI+LFxuKTogS3lzZWx5PERhdGFiYXNlPiB7XG4gIHJldHVybiBnZXRCdWlsZGVyPERhdGFiYXNlPih7XG4gICAgLi4ucmVxdWlyZW1lbnRzLFxuICAgIEFkYXB0ZXI6IFNxbGl0ZUFkYXB0ZXIsXG4gICAgUXVlcnlDb21waWxlcjogU3FsaXRlUXVlcnlDb21waWxlcixcbiAgfSk7XG59XG4iLCAiLyoqXG4gKiBTUUxpdGUgaW50cm9zcGVjdGlvbiBxdWVyaWVzIHRvIGJlIHVzZWQgYnkgdGhlIFNRTGl0ZSBhZGFwdGVyJ3MgaW50cm9zcGVjdCBtZXRob2QuXG4gKiBAbW9kdWxlIHNxbGl0ZS1jb3JlL2ludHJvc3BlY3Rpb25cbiAqXG4gKiBSZWZlcmVuY2VzOlxuICogaHR0cHM6Ly9zcWxpdGUub3JnL3ByYWdtYS5odG1sXG4gKiBodHRwczovL3NxbGl0ZS5vcmcvc2NoZW1hdGFiLmh0bWxcbiAqL1xuXG5pbXBvcnQgeyBleHByZXNzaW9uQnVpbGRlciB9IGZyb20gXCJreXNlbHlcIjtcbmltcG9ydCB7IGpzb25BcnJheUZyb20gfSBmcm9tIFwia3lzZWx5L2hlbHBlcnMvc3FsaXRlXCI7XG5cbmltcG9ydCB7IHR5cGUgQnVpbGRlclJlcXVpcmVtZW50cywgY29tcGlsZSwgdHlwZSBRdWVyeVJlc3VsdCB9IGZyb20gXCIuLi9xdWVyeVwiO1xuaW1wb3J0IHsgZ2V0U1FMaXRlQnVpbGRlciB9IGZyb20gXCIuL2J1aWxkZXJcIjtcblxuaW50ZXJmYWNlIERhdGFiYXNlIHtcbiAgLyoqIHRoZSBtYWluIHN5c3RlbSB0YWJsZSAqL1xuICBzcWxpdGVfc2NoZW1hOiB7XG4gICAgLyoqIG9iamVjdCBuYW1lICovXG4gICAgbmFtZTogc3RyaW5nO1xuICAgIC8qKiBwYWdlIG51bWJlciBpbiByb290IGluZGV4IHdoZW4gb2JqZWN0IGlzIGEgdGFibGUuICovXG4gICAgcm9vdHBhZ2U6IG51bWJlcjtcbiAgICAvKiogc3FsIHN0YXRlbWVudCB0aGF0IGNhbiByZWNyZWF0ZSB0aGUgb2JqZWN0LiBudWxsIHdoZW4gaW50ZXJuYWwgaW5kZXggb2JqZWN0LiAqL1xuICAgIHNxbDogc3RyaW5nIHwgbnVsbDtcbiAgICAvKiogcmVsYXRlZCB0YWJsZS92aWV3IG5hbWUgd2hlbiBvYmplY3QgaXMgYW4gaW5kZXgvdHJpZ2dlci4gKi9cbiAgICB0YmxfbmFtZTogc3RyaW5nO1xuICAgIC8qKiBvYmplY3QgdHlwZSAqL1xuICAgIHR5cGU6IFwiaW5kZXhcIiB8IFwidGFibGVcIiB8IFwidHJpZ2dlclwiIHwgXCJ2aWV3XCI7XG4gIH07XG59XG5cbi8qKlxuICogVGhlIHNoYXBlIG9mIGVhY2ggcm93IHJldHVybmVkIGJ5IGBwcmFnbWFfdGFibGVfbGlzdCh0YWJsZU5hbWU/KWAuXG4gKi9cbmludGVyZmFjZSBQcmFnbWFUYWJsZUxpc3Qge1xuICAvKiogb2JqZWN0IG5hbWUgKi9cbiAgbmFtZTogc3RyaW5nO1xuICAvKiogc2NoZW1hIG5hbWUgKi9cbiAgc2NoZW1hOiBcIm1haW5cIiB8IFwidGVtcFwiO1xuICAvKiogb2JqZWN0IHR5cGUgKi9cbiAgdHlwZTogXCJzaGFkb3dcIiB8IFwidGFibGVcIiB8IFwidmlld1wiIHwgXCJ2aXJ0dWFsXCI7XG59XG5cbi8qKlxuICogVGhlIHNoYXBlIG9mIGVhY2ggcm93IHJldHVybmVkIGJ5IGBwcmFnbWFfdGFibGVfeGluZm8odGFibGVOYW1lKWAuXG4gKi9cbmludGVyZmFjZSBQcmFnbWFUYWJsZVhJbmZvIHtcbiAgLyoqIFwicmFuayB3aXRoaW4gY3VycmVudCByZXN1bHQgc2V0XCIgKi9cbiAgY2lkOiBudW1iZXI7XG4gIC8qKiBkZWZhdWx0IHZhbHVlICovXG4gIGRmbHRfdmFsdWU6IHN0cmluZyB8IG51bGw7XG4gIC8qKiAwIC0gbm9ybWFsLCAxIC0gaGlkZGVuLCAyLTMgLSBkeW5hbWljL3N0b3JlZCBnZW5lcmF0ZWQgKi9cbiAgaGlkZGVuOiAwIHwgMSB8IDIgfCAzO1xuICAvKiogY29sdW1uIG5hbWUgKi9cbiAgbmFtZTogc3RyaW5nO1xuICAvKiogd2hldGhlciB0aGUgY29sdW1uIGNhbiBiZSBudWxsICovXG4gIG5vdG51bGw6IDAgfCAxO1xuICAvKiogMCBpZiBub3QgcGFydCBvZiB0aGUgcHJpbWFyeSBrZXksIG90aGVyd2lzZSB0aGUgMS1iYXNlZCBvcmRpbmFsIG51bWJlciBvZiB0aGUgY29sdW1uIGluIHRoZSBwcmltYXJ5IGtleSAqL1xuICBwazogbnVtYmVyO1xuICAvKiogZGF0YSB0eXBlICovXG4gIHR5cGU6IHN0cmluZztcbn1cblxuLyoqXG4gKiBUaGUgc2hhcGUgb2YgZWFjaCByb3cgcmV0dXJuZWQgYnkgYHByYWdtYV9mb3JlaWduX2tleV9saXN0KHRhYmxlTmFtZSlgLlxuICovXG5pbnRlcmZhY2UgUHJhZ21hRm9yZWlnbktleUxpc3Qge1xuICAvKiogY29sdW1uIG5hbWUgKi9cbiAgZnJvbTogc3RyaW5nO1xuICAvKiogb3JkaW5hbCBudW1iZXIgb2YgY29sdW1uIHdpdGhpbiB0aGUgZm9yZWlnbiBrZXkgKi9cbiAgc2VxOiBudW1iZXI7XG4gIC8qKiBmb3JlaWduIHRhYmxlIG5hbWUgKi9cbiAgdGFibGU6IHN0cmluZztcbiAgLyoqIGNvbHVtbiBuYW1lIGluIHRoZSBmb3JlaWduIHRhYmxlICovXG4gIHRvOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRUYWJsZXNRdWVyeShyZXF1aXJlbWVudHM/OiBPbWl0PEJ1aWxkZXJSZXF1aXJlbWVudHMsIFwiQWRhcHRlclwiIHwgXCJRdWVyeUNvbXBpbGVyXCI+KSB7XG4gIHJldHVybiBjb21waWxlKFxuICAgIGdldFNRTGl0ZUJ1aWxkZXI8RGF0YWJhc2U+KHJlcXVpcmVtZW50cylcbiAgICAgIC5zZWxlY3RGcm9tKGV4cHJlc3Npb25CdWlsZGVyKCkuZm48UHJhZ21hVGFibGVMaXN0PihcInByYWdtYV90YWJsZV9saXN0XCIsIFtdKS5hcyhcInRsXCIpKVxuICAgICAgLmxlZnRKb2luKFwic3FsaXRlX3NjaGVtYSBhcyBzc1wiLCAoamIpID0+IGpiLm9uUmVmKFwic3MudHlwZVwiLCBcIj1cIiwgXCJ0bC50eXBlXCIpLm9uUmVmKFwic3MubmFtZVwiLCBcIj1cIiwgXCJ0bC5uYW1lXCIpKVxuICAgICAgLndoZXJlKFwidGwudHlwZVwiLCBcImluXCIsIFtcInRhYmxlXCIsIFwidmlld1wiXSlcbiAgICAgIC8vIGV4Y2x1ZGUgdGVtcG9yYXJ5IHRhYmxlcy92aWV3c1xuICAgICAgLndoZXJlKFwidGwuc2NoZW1hXCIsIFwiPVwiLCBcIm1haW5cIilcbiAgICAgIC8vIGV4Y2x1ZGUgc3lzdGVtIHRhYmxlcy92aWV3c1xuICAgICAgLndoZXJlKFwidGwubmFtZVwiLCBcIm5vdCBsaWtlXCIsIFwic3FsaXRlXyVcIilcbiAgICAgIC5zZWxlY3QoW1widGwubmFtZVwiLCBcInNzLnNxbFwiXSlcbiAgICAgIC5zZWxlY3QoKGViKSA9PiBbXG4gICAgICAgIGpzb25BcnJheUZyb20oXG4gICAgICAgICAgZWJcbiAgICAgICAgICAgIC5zZWxlY3RGcm9tKGViLmZuPFByYWdtYVRhYmxlWEluZm8+KFwicHJhZ21hX3RhYmxlX3hpbmZvXCIsIFtcInRsLm5hbWVcIl0pLmFzKFwidHhpXCIpKVxuICAgICAgICAgICAgLmxlZnRKb2luKFxuICAgICAgICAgICAgICBlYi5mbjxQcmFnbWFGb3JlaWduS2V5TGlzdD4oXCJwcmFnbWFfZm9yZWlnbl9rZXlfbGlzdFwiLCBbXCJ0bC5uYW1lXCJdKS5hcyhcImZrbFwiKSxcbiAgICAgICAgICAgICAgXCJma2wuZnJvbVwiLFxuICAgICAgICAgICAgICBcInR4aS5uYW1lXCIsXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAvLyBleGNsdWRlIGhpZGRlbiBjb2x1bW5zXG4gICAgICAgICAgICAud2hlcmUoXCJ0eGkuaGlkZGVuXCIsIFwiIT1cIiwgMSlcbiAgICAgICAgICAgIC5zZWxlY3QoW1xuICAgICAgICAgICAgICBcInR4aS5kZmx0X3ZhbHVlIGFzIGRlZmF1bHRcIixcbiAgICAgICAgICAgICAgXCJ0eGkubmFtZVwiLFxuICAgICAgICAgICAgICBcInR4aS5wa1wiLFxuICAgICAgICAgICAgICBcInR4aS50eXBlIGFzIGRhdGF0eXBlXCIsXG4gICAgICAgICAgICAgIFwiZmtsLnRhYmxlIGFzIGZrX3RhYmxlXCIsXG4gICAgICAgICAgICAgIFwiZmtsLnRvIGFzIGZrX2NvbHVtblwiLFxuICAgICAgICAgICAgXSlcbiAgICAgICAgICAgIC5zZWxlY3QoKGViKSA9PiBbZWIoXCJ0eGkuaGlkZGVuXCIsIFwiaW5cIiwgWzIsIDNdKS5hcyhcImNvbXB1dGVkXCIpLCBlYihcInR4aS5ub3RudWxsXCIsIFwiIT1cIiwgMCkuYXMoXCJudWxsYWJsZVwiKV0pLFxuICAgICAgICApLmFzKFwiY29sdW1uc1wiKSxcbiAgICAgIF0pLFxuICAgIHsgdHJhbnNmb3JtYXRpb25zOiB7IGNvbHVtbnM6IFwianNvbi1wYXJzZVwiIH0gfSxcbiAgKTtcbn1cblxuLyoqXG4gKiBGb3IgdGVzdGluZyBwdXJwb3Nlcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1vY2tUYWJsZXNRdWVyeSgpIHtcbiAgcmV0dXJuIFtcbiAgICB7XG4gICAgICBuYW1lOiBcImFuaW1hbHNcIixcbiAgICAgIHNxbDogXCJDUkVBVEUgVEFCTEUgYW5pbWFscyAoaWQgSU5URUdFUiBQUklNQVJZIEtFWSwgbmFtZSBURVhUKTtcIixcbiAgICAgIGNvbHVtbnM6IFtcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6IFwiaWRcIixcbiAgICAgICAgICBkYXRhdHlwZTogXCJJTlRFR0VSXCIsXG4gICAgICAgICAgZGVmYXVsdDogbnVsbCxcbiAgICAgICAgICBwazogMSxcbiAgICAgICAgICBjb21wdXRlZDogMCxcbiAgICAgICAgICBudWxsYWJsZTogMCxcbiAgICAgICAgICBma190YWJsZTogbnVsbCxcbiAgICAgICAgICBma19jb2x1bW46IG51bGwsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiBcIm5hbWVcIixcbiAgICAgICAgICBkYXRhdHlwZTogXCJURVhUXCIsXG4gICAgICAgICAgZGVmYXVsdDogbnVsbCxcbiAgICAgICAgICBwazogMCxcbiAgICAgICAgICBjb21wdXRlZDogMCxcbiAgICAgICAgICBudWxsYWJsZTogMSxcbiAgICAgICAgICBma190YWJsZTogbnVsbCxcbiAgICAgICAgICBma19jb2x1bW46IG51bGwsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogXCJ1c2Vyc1wiLFxuICAgICAgc3FsOiBcIkNSRUFURSBUQUJMRSB1c2VycyAoaWQgVVVJRCBQUklNQVJZIEtFWSwgY3JlYXRlZF9hdCBUSU1FU1RBTVAsIGRlbGV0ZWRfYXQgVElNRVNUQU1QLCByb2xlIHZhcmNoYXIsIG5hbWUgdmFyY2hhciwgbmFtZV9yb2xlIHRleHQpO1wiLFxuICAgICAgY29sdW1uczogW1xuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogXCJpZFwiLFxuICAgICAgICAgIGRhdGF0eXBlOiBcIlVVSURcIixcbiAgICAgICAgICBkZWZhdWx0OiBudWxsLFxuICAgICAgICAgIHBrOiAxLFxuICAgICAgICAgIGNvbXB1dGVkOiAwLFxuICAgICAgICAgIG51bGxhYmxlOiAwLFxuICAgICAgICAgIGZrX3RhYmxlOiBudWxsLFxuICAgICAgICAgIGZrX2NvbHVtbjogbnVsbCxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6IFwiY3JlYXRlZF9hdFwiLFxuICAgICAgICAgIGRhdGF0eXBlOiBcIlRJTUVTVEFNUFwiLFxuICAgICAgICAgIGRlZmF1bHQ6IG51bGwsXG4gICAgICAgICAgcGs6IDAsXG4gICAgICAgICAgY29tcHV0ZWQ6IDAsXG4gICAgICAgICAgbnVsbGFibGU6IDEsXG4gICAgICAgICAgZmtfdGFibGU6IG51bGwsXG4gICAgICAgICAgZmtfY29sdW1uOiBudWxsLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogXCJkZWxldGVkX2F0XCIsXG4gICAgICAgICAgZGF0YXR5cGU6IFwiVElNRVNUQU1QXCIsXG4gICAgICAgICAgZGVmYXVsdDogbnVsbCxcbiAgICAgICAgICBwazogMCxcbiAgICAgICAgICBjb21wdXRlZDogMCxcbiAgICAgICAgICBudWxsYWJsZTogMSxcbiAgICAgICAgICBma190YWJsZTogbnVsbCxcbiAgICAgICAgICBma19jb2x1bW46IG51bGwsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiBcInJvbGVcIixcbiAgICAgICAgICBkYXRhdHlwZTogXCJ2YXJjaGFyXCIsXG4gICAgICAgICAgZGVmYXVsdDogbnVsbCxcbiAgICAgICAgICBwazogMCxcbiAgICAgICAgICBjb21wdXRlZDogMCxcbiAgICAgICAgICBudWxsYWJsZTogMSxcbiAgICAgICAgICBma190YWJsZTogbnVsbCxcbiAgICAgICAgICBma19jb2x1bW46IG51bGwsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiBcIm5hbWVcIixcbiAgICAgICAgICBkYXRhdHlwZTogXCJ2YXJjaGFyXCIsXG4gICAgICAgICAgZGVmYXVsdDogbnVsbCxcbiAgICAgICAgICBwazogMCxcbiAgICAgICAgICBjb21wdXRlZDogMCxcbiAgICAgICAgICBudWxsYWJsZTogMSxcbiAgICAgICAgICBma190YWJsZTogbnVsbCxcbiAgICAgICAgICBma19jb2x1bW46IG51bGwsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiBcIm5hbWVfcm9sZVwiLFxuICAgICAgICAgIGRhdGF0eXBlOiBcInRleHRcIixcbiAgICAgICAgICBkZWZhdWx0OiBudWxsLFxuICAgICAgICAgIHBrOiAwLFxuICAgICAgICAgIGNvbXB1dGVkOiAwLFxuICAgICAgICAgIG51bGxhYmxlOiAxLFxuICAgICAgICAgIGZrX3RhYmxlOiBudWxsLFxuICAgICAgICAgIGZrX2NvbHVtbjogbnVsbCxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiBcImNvbXBvc2l0ZV9wa1wiLFxuICAgICAgc3FsOiBcIkNSRUFURSBUQUJMRSBjb21wb3NpdGVfcGsgKGlkIFVVSUQsIG5hbWUgVEVYVCwgY3JlYXRlZF9hdCB0aW1lc3RhbXAsIFBSSU1BUlkgS0VZIChpZCwgbmFtZSkpO1wiLFxuICAgICAgY29sdW1uczogW1xuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogXCJpZFwiLFxuICAgICAgICAgIGRhdGF0eXBlOiBcIlVVSURcIixcbiAgICAgICAgICBkZWZhdWx0OiBudWxsLFxuICAgICAgICAgIHBrOiAxLFxuICAgICAgICAgIGNvbXB1dGVkOiAwLFxuICAgICAgICAgIG51bGxhYmxlOiAwLFxuICAgICAgICAgIGZrX3RhYmxlOiBudWxsLFxuICAgICAgICAgIGZrX2NvbHVtbjogbnVsbCxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6IFwibmFtZVwiLFxuICAgICAgICAgIGRhdGF0eXBlOiBcIlRFWFRcIixcbiAgICAgICAgICBkZWZhdWx0OiBudWxsLFxuICAgICAgICAgIHBrOiAyLFxuICAgICAgICAgIGNvbXB1dGVkOiAwLFxuICAgICAgICAgIG51bGxhYmxlOiAxLFxuICAgICAgICAgIGZrX3RhYmxlOiBudWxsLFxuICAgICAgICAgIGZrX2NvbHVtbjogbnVsbCxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6IFwiY3JlYXRlZF9hdFwiLFxuICAgICAgICAgIGRhdGF0eXBlOiBcInRpbWVzdGFtcFwiLFxuICAgICAgICAgIGRlZmF1bHQ6IG51bGwsXG4gICAgICAgICAgcGs6IDAsXG4gICAgICAgICAgY29tcHV0ZWQ6IDAsXG4gICAgICAgICAgbnVsbGFibGU6IDEsXG4gICAgICAgICAgZmtfdGFibGU6IG51bGwsXG4gICAgICAgICAgZmtfY29sdW1uOiBudWxsLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9LFxuICBdIGFzIGNvbnN0IHNhdGlzZmllcyBRdWVyeVJlc3VsdDx0eXBlb2YgZ2V0VGFibGVzUXVlcnk+O1xufVxuIiwgIi8vLyA8cmVmZXJlbmNlIHR5cGVzPVwiLi9zcWxpdGUuZC50c1wiIC8+XG5pbXBvcnQgeyBzcWwgfSBmcm9tICcuLi9yYXctYnVpbGRlci9zcWwuanMnO1xuaW1wb3J0IHsgZ2V0SnNvbk9iamVjdEFyZ3MgfSBmcm9tICcuLi91dGlsL2pzb24tb2JqZWN0LWFyZ3MuanMnO1xuLyoqXG4gKiBBIFNRTGl0ZSBoZWxwZXIgZm9yIGFnZ3JlZ2F0aW5nIGEgc3VicXVlcnkgaW50byBhIEpTT04gYXJyYXkuXG4gKlxuICogTk9URTogVGhpcyBoZWxwZXIgb25seSB3b3JrcyBjb3JyZWN0bHkgaWYgeW91J3ZlIGluc3RhbGxlZCB0aGUgYFBhcnNlSlNPTlJlc3VsdHNQbHVnaW5gLlxuICogT3RoZXJ3aXNlIHRoZSBuZXN0ZWQgc2VsZWN0aW9ucyB3aWxsIGJlIHJldHVybmVkIGFzIEpTT04gc3RyaW5ncy5cbiAqXG4gKiBUaGUgcGx1Z2luIGNhbiBiZSBpbnN0YWxsZWQgbGlrZSB0aGlzOlxuICpcbiAqIGBgYHRzXG4gKiBpbXBvcnQgKiBhcyBTcWxpdGUgZnJvbSAnYmV0dGVyLXNxbGl0ZTMnXG4gKiBpbXBvcnQgeyBLeXNlbHksIFBhcnNlSlNPTlJlc3VsdHNQbHVnaW4sIFNxbGl0ZURpYWxlY3QgfSBmcm9tICdreXNlbHknXG4gKiBpbXBvcnQgdHlwZSB7IERhdGFiYXNlIH0gZnJvbSAndHlwZS1lZGl0b3InIC8vIGltYWdpbmFyeSBtb2R1bGVcbiAqXG4gKiBjb25zdCBkYiA9IG5ldyBLeXNlbHk8RGF0YWJhc2U+KHtcbiAqICAgZGlhbGVjdDogbmV3IFNxbGl0ZURpYWxlY3Qoe1xuICogICAgIGRhdGFiYXNlOiBuZXcgU3FsaXRlKCc6bWVtb3J5OicpXG4gKiAgIH0pLFxuICogICBwbHVnaW5zOiBbbmV3IFBhcnNlSlNPTlJlc3VsdHNQbHVnaW4oKV1cbiAqIH0pXG4gKiBgYGBcbiAqXG4gKiAjIyMgRXhhbXBsZXNcbiAqXG4gKiBgYGB0c1xuICogaW1wb3J0IHsganNvbkFycmF5RnJvbSB9IGZyb20gJ2t5c2VseS9oZWxwZXJzL3NxbGl0ZSdcbiAqXG4gKiBjb25zdCByZXN1bHQgPSBhd2FpdCBkYlxuICogICAuc2VsZWN0RnJvbSgncGVyc29uJylcbiAqICAgLnNlbGVjdCgoZWIpID0+IFtcbiAqICAgICAnaWQnLFxuICogICAgIGpzb25BcnJheUZyb20oXG4gKiAgICAgICBlYi5zZWxlY3RGcm9tKCdwZXQnKVxuICogICAgICAgICAuc2VsZWN0KFsncGV0LmlkIGFzIHBldF9pZCcsICdwZXQubmFtZSddKVxuICogICAgICAgICAud2hlcmVSZWYoJ3BldC5vd25lcl9pZCcsICc9JywgJ3BlcnNvbi5pZCcpXG4gKiAgICAgICAgIC5vcmRlckJ5KCdwZXQubmFtZScpXG4gKiAgICAgKS5hcygncGV0cycpXG4gKiAgIF0pXG4gKiAgIC5leGVjdXRlKClcbiAqXG4gKiByZXN1bHRbMF0/LmlkXG4gKiByZXN1bHRbMF0/LnBldHNbMF0ucGV0X2lkXG4gKiByZXN1bHRbMF0/LnBldHNbMF0ubmFtZVxuICogYGBgXG4gKlxuICogVGhlIGdlbmVyYXRlZCBTUUwgKFNRTGl0ZSk6XG4gKlxuICogYGBgc3FsXG4gKiBzZWxlY3QgXCJpZFwiLCAoXG4gKiAgIHNlbGVjdCBjb2FsZXNjZShqc29uX2dyb3VwX2FycmF5KGpzb25fb2JqZWN0KFxuICogICAgICdwZXRfaWQnLCBcImFnZ1wiLlwicGV0X2lkXCIsXG4gKiAgICAgJ25hbWUnLCBcImFnZ1wiLlwibmFtZVwiXG4gKiAgICkpLCAnW10nKSBmcm9tIChcbiAqICAgICBzZWxlY3QgXCJwZXRcIi5cImlkXCIgYXMgXCJwZXRfaWRcIiwgXCJwZXRcIi5cIm5hbWVcIlxuICogICAgIGZyb20gXCJwZXRcIlxuICogICAgIHdoZXJlIFwicGV0XCIuXCJvd25lcl9pZFwiID0gXCJwZXJzb25cIi5cImlkXCJcbiAqICAgICBvcmRlciBieSBcInBldFwiLlwibmFtZVwiXG4gKiAgICkgYXMgXCJhZ2dcIlxuICogKSBhcyBcInBldHNcIlxuICogZnJvbSBcInBlcnNvblwiXG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGpzb25BcnJheUZyb20oZXhwcikge1xuICAgIHJldHVybiBzcWwgYChzZWxlY3QgY29hbGVzY2UoanNvbl9ncm91cF9hcnJheShqc29uX29iamVjdCgke3NxbC5qb2luKGdldFNxbGl0ZUpzb25PYmplY3RBcmdzKGV4cHIudG9PcGVyYXRpb25Ob2RlKCksICdhZ2cnKSl9KSksICdbXScpIGZyb20gJHtleHByfSBhcyBhZ2cpYDtcbn1cbi8qKlxuICogQSBTUUxpdGUgaGVscGVyIGZvciB0dXJuaW5nIGEgc3VicXVlcnkgaW50byBhIEpTT04gb2JqZWN0LlxuICpcbiAqIFRoZSBzdWJxdWVyeSBtdXN0IG9ubHkgcmV0dXJuIG9uZSByb3cuXG4gKlxuICogTk9URTogVGhpcyBoZWxwZXIgb25seSB3b3JrcyBjb3JyZWN0bHkgaWYgeW91J3ZlIGluc3RhbGxlZCB0aGUgYFBhcnNlSlNPTlJlc3VsdHNQbHVnaW5gLlxuICogT3RoZXJ3aXNlIHRoZSBuZXN0ZWQgc2VsZWN0aW9ucyB3aWxsIGJlIHJldHVybmVkIGFzIEpTT04gc3RyaW5ncy5cbiAqXG4gKiBUaGUgcGx1Z2luIGNhbiBiZSBpbnN0YWxsZWQgbGlrZSB0aGlzOlxuICpcbiAqIGBgYHRzXG4gKiBpbXBvcnQgKiBhcyBTcWxpdGUgZnJvbSAnYmV0dGVyLXNxbGl0ZTMnXG4gKiBpbXBvcnQgeyBLeXNlbHksIFBhcnNlSlNPTlJlc3VsdHNQbHVnaW4sIFNxbGl0ZURpYWxlY3QgfSBmcm9tICdreXNlbHknXG4gKiBpbXBvcnQgdHlwZSB7IERhdGFiYXNlIH0gZnJvbSAndHlwZS1lZGl0b3InIC8vIGltYWdpbmFyeSBtb2R1bGVcbiAqXG4gKiBjb25zdCBkYiA9IG5ldyBLeXNlbHk8RGF0YWJhc2U+KHtcbiAqICAgZGlhbGVjdDogbmV3IFNxbGl0ZURpYWxlY3Qoe1xuICogICAgIGRhdGFiYXNlOiBuZXcgU3FsaXRlKCc6bWVtb3J5OicpXG4gKiAgIH0pLFxuICogICBwbHVnaW5zOiBbbmV3IFBhcnNlSlNPTlJlc3VsdHNQbHVnaW4oKV1cbiAqIH0pXG4gKiBgYGBcbiAqXG4gKiAjIyMgRXhhbXBsZXNcbiAqXG4gKiBgYGB0c1xuICogaW1wb3J0IHsganNvbk9iamVjdEZyb20gfSBmcm9tICdreXNlbHkvaGVscGVycy9zcWxpdGUnXG4gKlxuICogY29uc3QgcmVzdWx0ID0gYXdhaXQgZGJcbiAqICAgLnNlbGVjdEZyb20oJ3BlcnNvbicpXG4gKiAgIC5zZWxlY3QoKGViKSA9PiBbXG4gKiAgICAgJ2lkJyxcbiAqICAgICBqc29uT2JqZWN0RnJvbShcbiAqICAgICAgIGViLnNlbGVjdEZyb20oJ3BldCcpXG4gKiAgICAgICAgIC5zZWxlY3QoWydwZXQuaWQgYXMgcGV0X2lkJywgJ3BldC5uYW1lJ10pXG4gKiAgICAgICAgIC53aGVyZVJlZigncGV0Lm93bmVyX2lkJywgJz0nLCAncGVyc29uLmlkJylcbiAqICAgICAgICAgLndoZXJlKCdwZXQuaXNfZmF2b3JpdGUnLCAnPScsIHRydWUpXG4gKiAgICAgKS5hcygnZmF2b3JpdGVfcGV0JylcbiAqICAgXSlcbiAqICAgLmV4ZWN1dGUoKVxuICpcbiAqIHJlc3VsdFswXT8uaWRcbiAqIHJlc3VsdFswXT8uZmF2b3JpdGVfcGV0Py5wZXRfaWRcbiAqIHJlc3VsdFswXT8uZmF2b3JpdGVfcGV0Py5uYW1lXG4gKiBgYGBcbiAqXG4gKiBUaGUgZ2VuZXJhdGVkIFNRTCAoU1FMaXRlKTpcbiAqXG4gKiBgYGBzcWxcbiAqIHNlbGVjdCBcImlkXCIsIChcbiAqICAgc2VsZWN0IGpzb25fb2JqZWN0KFxuICogICAgICdwZXRfaWQnLCBcIm9ialwiLlwicGV0X2lkXCIsXG4gKiAgICAgJ25hbWUnLCBcIm9ialwiLlwibmFtZVwiXG4gKiAgICkgZnJvbSAoXG4gKiAgICAgc2VsZWN0IFwicGV0XCIuXCJpZFwiIGFzIFwicGV0X2lkXCIsIFwicGV0XCIuXCJuYW1lXCJcbiAqICAgICBmcm9tIFwicGV0XCJcbiAqICAgICB3aGVyZSBcInBldFwiLlwib3duZXJfaWRcIiA9IFwicGVyc29uXCIuXCJpZFwiXG4gKiAgICAgYW5kIFwicGV0XCIuXCJpc19mYXZvcml0ZVwiID0gP1xuICogICApIGFzIG9ialxuICogKSBhcyBcImZhdm9yaXRlX3BldFwiXG4gKiBmcm9tIFwicGVyc29uXCI7XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGpzb25PYmplY3RGcm9tKGV4cHIpIHtcbiAgICByZXR1cm4gc3FsIGAoc2VsZWN0IGpzb25fb2JqZWN0KCR7c3FsLmpvaW4oZ2V0U3FsaXRlSnNvbk9iamVjdEFyZ3MoZXhwci50b09wZXJhdGlvbk5vZGUoKSwgJ29iaicpKX0pIGZyb20gJHtleHByfSBhcyBvYmopYDtcbn1cbi8qKlxuICogVGhlIFNRTGl0ZSBganNvbl9vYmplY3RgIGZ1bmN0aW9uLlxuICpcbiAqIE5PVEU6IFRoaXMgaGVscGVyIG9ubHkgd29ya3MgY29ycmVjdGx5IGlmIHlvdSd2ZSBpbnN0YWxsZWQgdGhlIGBQYXJzZUpTT05SZXN1bHRzUGx1Z2luYC5cbiAqIE90aGVyd2lzZSB0aGUgbmVzdGVkIHNlbGVjdGlvbnMgd2lsbCBiZSByZXR1cm5lZCBhcyBKU09OIHN0cmluZ3MuXG4gKlxuICogVGhlIHBsdWdpbiBjYW4gYmUgaW5zdGFsbGVkIGxpa2UgdGhpczpcbiAqXG4gKiBgYGB0c1xuICogaW1wb3J0ICogYXMgU3FsaXRlIGZyb20gJ2JldHRlci1zcWxpdGUzJ1xuICogaW1wb3J0IHsgS3lzZWx5LCBQYXJzZUpTT05SZXN1bHRzUGx1Z2luLCBTcWxpdGVEaWFsZWN0IH0gZnJvbSAna3lzZWx5J1xuICogaW1wb3J0IHR5cGUgeyBEYXRhYmFzZSB9IGZyb20gJ3R5cGUtZWRpdG9yJyAvLyBpbWFnaW5hcnkgbW9kdWxlXG4gKlxuICogY29uc3QgZGIgPSBuZXcgS3lzZWx5PERhdGFiYXNlPih7XG4gKiAgIGRpYWxlY3Q6IG5ldyBTcWxpdGVEaWFsZWN0KHtcbiAqICAgICBkYXRhYmFzZTogbmV3IFNxbGl0ZSgnOm1lbW9yeTonKVxuICogICB9KSxcbiAqICAgcGx1Z2luczogW25ldyBQYXJzZUpTT05SZXN1bHRzUGx1Z2luKCldXG4gKiB9KVxuICogYGBgXG4gKlxuICogIyMjIEV4YW1wbGVzXG4gKlxuICogYGBgdHNcbiAqIGltcG9ydCB7IHNxbCB9IGZyb20gJ2t5c2VseSdcbiAqIGltcG9ydCB7IGpzb25CdWlsZE9iamVjdCB9IGZyb20gJ2t5c2VseS9oZWxwZXJzL3NxbGl0ZSdcbiAqXG4gKiBjb25zdCByZXN1bHQgPSBhd2FpdCBkYlxuICogICAuc2VsZWN0RnJvbSgncGVyc29uJylcbiAqICAgLnNlbGVjdCgoZWIpID0+IFtcbiAqICAgICAnaWQnLFxuICogICAgIGpzb25CdWlsZE9iamVjdCh7XG4gKiAgICAgICBmaXJzdDogZWIucmVmKCdmaXJzdF9uYW1lJyksXG4gKiAgICAgICBsYXN0OiBlYi5yZWYoJ2xhc3RfbmFtZScpLFxuICogICAgICAgZnVsbDogc3FsPHN0cmluZz5gZmlyc3RfbmFtZSB8fFx1MDBBMCcgJyB8fCBsYXN0X25hbWVgXG4gKiAgICAgfSkuYXMoJ25hbWUnKVxuICogICBdKVxuICogICAuZXhlY3V0ZSgpXG4gKlxuICogcmVzdWx0WzBdPy5pZFxuICogcmVzdWx0WzBdPy5uYW1lLmZpcnN0XG4gKiByZXN1bHRbMF0/Lm5hbWUubGFzdFxuICogcmVzdWx0WzBdPy5uYW1lLmZ1bGxcbiAqIGBgYFxuICpcbiAqIFRoZSBnZW5lcmF0ZWQgU1FMIChTUUxpdGUpOlxuICpcbiAqIGBgYHNxbFxuICogc2VsZWN0IFwiaWRcIiwganNvbl9vYmplY3QoXG4gKiAgICdmaXJzdCcsIGZpcnN0X25hbWUsXG4gKiAgICdsYXN0JywgbGFzdF9uYW1lLFxuICogICAnZnVsbCcsIFwiZmlyc3RfbmFtZVwiIHx8ICcgJyB8fCBcImxhc3RfbmFtZVwiXG4gKiApIGFzIFwibmFtZVwiXG4gKiBmcm9tIFwicGVyc29uXCJcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24ganNvbkJ1aWxkT2JqZWN0KG9iaikge1xuICAgIHJldHVybiBzcWwgYGpzb25fb2JqZWN0KCR7c3FsLmpvaW4oT2JqZWN0LmtleXMob2JqKS5mbGF0TWFwKChrKSA9PiBbc3FsLmxpdChrKSwgb2JqW2tdXSkpfSlgO1xufVxuZnVuY3Rpb24gZ2V0U3FsaXRlSnNvbk9iamVjdEFyZ3Mobm9kZSwgdGFibGUpIHtcbiAgICB0cnkge1xuICAgICAgICByZXR1cm4gZ2V0SnNvbk9iamVjdEFyZ3Mobm9kZSwgdGFibGUpO1xuICAgIH1cbiAgICBjYXRjaCB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignU1FMaXRlIGpzb25BcnJheUZyb20gYW5kIGpzb25PYmplY3RGcm9tIGZ1bmN0aW9ucyBjYW4gb25seSBoYW5kbGUgZXhwbGljaXQgc2VsZWN0aW9ucyBkdWUgdG8gbGltaXRhdGlvbnMgb2YgdGhlIGpzb25fb2JqZWN0IGZ1bmN0aW9uLiBzZWxlY3RBbGwoKSBpcyBub3QgYWxsb3dlZCBpbiB0aGUgc3VicXVlcnkuJyk7XG4gICAgfVxufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7aU9BQUFBLElDQUFDLElDQUFDLElBSU8sSUFBTUMsRUFBMEYsQ0FDckcsS0FBTSxDQUNKLE1BQU8sS0FDVCxFQUNBLFFBQVMsQ0FDUCxNQUFPLFNBQ1QsRUFDQSxLQUFNLENBQ0osTUFBTyxLQUNULEVBQ0EsUUFBUyxDQUNQLE1BQU8sU0FDVCxFQUNBLEtBQU0sQ0FDSixNQUFPLFNBQ1QsRUFDQSxLQUFNLENBQ0osTUFBTyxRQUNULENBQ0YsRUFPTyxTQUFTQyxFQUF3QkMsRUFBaUQsQ0FDdkYsR0FBSSxDQUFDQSxFQUNILE1BQU8sT0FHVCxJQUFNQyxFQUFZRCxFQUFpQixZQUFZLEVBRS9DLE9BQUlDLEVBQVUsU0FBUyxLQUFLLEVBQ25CLFVBR0xBLEVBQVUsU0FBUyxNQUFNLEdBQUtBLEVBQVUsU0FBUyxNQUFNLEdBQUtBLEVBQVUsU0FBUyxNQUFNLEVBQ2hGLE9BR0xBLEVBQVUsU0FBUyxNQUFNLEVBQ3BCLE9BR0xBLEVBQVUsU0FBUyxNQUFNLEdBQUtBLEVBQVUsU0FBUyxNQUFNLEdBQUtBLEVBQVUsU0FBUyxNQUFNLEVBQ2hGLE9BR0YsU0FDVCxDQ3REQUMsSUNBQUMsSUFLTyxTQUFTQyxFQUNkQyxFQUNrQixDQUNsQixPQUFPQyxFQUFxQixDQUMxQixHQUFHRCxFQUNILFFBQVNFLEVBQ1QsY0FBZUMsQ0FDakIsQ0FBQyxDQUNILENERE8sU0FBU0MsRUFDZEMsRUFDQUMsRUFDQSxDQUNBLEdBQU0sQ0FDSixPQUFBQyxFQUFTLENBQUUsTUFBTyxNQUFPLFFBQVMsQ0FBQyxFQUFHLEtBQU0sYUFBYyxFQUMxRCxVQUFBQyxFQUNBLFNBQUFDLEVBQ0EsVUFBQUMsRUFDQSxNQUFPLENBQUUsUUFBQUMsRUFBUyxLQUFNQyxDQUFVLENBQ3BDLEVBQUlQLEVBRUVRLEVBQVVDLEVBQTBEUixDQUFZLEVBRWhGUyxFQUFtQkMsRUFBMEJULEVBQU8sUUFBU0ksQ0FBTyxFQUVwRU0sRUFBVyxhQUNYQyxFQUFZLGVBRVpDLEVBQWFOLEVBQ2hCLFdBQVdELENBQVMsRUFDcEIsTUFBTUcsQ0FBZ0IsRUFDdEIsT0FBUUssR0FBT0EsRUFBRyxLQUFtQkEsRUFBRyxHQUFHLFNBQVNBLEVBQUcsR0FBRyxTQUFTLEVBQUdDLEVBQUksSUFBSSxDQUFDLENBQUMsRUFBRyxNQUFNLEVBQUUsR0FBR0gsQ0FBUyxDQUFDLEVBRTNHLE9BQU9JLEVBQ0xULEVBQ0csS0FBS0ksRUFBVSxJQUFNRSxDQUFVLEVBQy9CLFdBQVdQLENBQVMsRUFDcEIsVUFBVUssRUFBV00sR0FBT0EsRUFBRyxPQUFPLENBQUMsRUFFdkMsTUFBTVIsQ0FBZ0IsRUFDdEIsT0FDQyxHQUFHRSxDQUFRLElBQUlDLENBQVMsRUFJMUIsRUFDQyxPQUFPLE9BQU8sS0FBS1AsQ0FBTyxDQUFDLEVBQzNCLE1BQU9hLEdBQU9kLEVBQVUsT0FBTyxDQUFDYyxFQUFJQyxJQUFTRCxFQUFHLFFBQVFDLEVBQUssT0FBUUEsRUFBSyxTQUFTLEVBQUdELENBQUUsQ0FBQyxFQUN6RixNQUFNZixDQUFRLEVBRWQsT0FBT1ksRUFBSSxJQUFJLE9BQU9iLENBQVMsRUFBSSxPQUFPQyxDQUFRLENBQUMsQ0FBQyxDQUN6RCxDQUNGLENBS08sU0FBU2lCLElBQWtCLENBQ2hDLE1BQU8sQ0FDTCxDQUNFLFdBQVksSUFBSSxLQUFLLDBCQUEwQixFQUMvQyxXQUFZLEtBQ1osR0FBSSxFQUNKLEtBQU0sV0FDTixhQUFjLElBQ2QsS0FBTSxRQUNOLFVBQVcsa0JBQ2IsRUFDQSxDQUNFLFdBQVksSUFBSSxLQUFLLDBCQUEwQixFQUMvQyxXQUFZLEtBQ1osR0FBSSxFQUNKLEtBQU0sV0FDTixhQUFjLElBQ2QsS0FBTSxZQUNOLFVBQVcsc0JBQ2IsQ0FDRixDQUlGLENBS08sU0FBU0MsRUFDZHRCLEVBQ0FDLEVBQ0EsQ0FDQSxHQUFNLENBQ0osS0FBQXNCLEVBQ0EsTUFBTyxDQUFFLFFBQUFqQixFQUFTLEtBQU1DLENBQVUsQ0FDcEMsRUFBSVAsRUFFRVEsRUFBVUMsRUFBMERSLENBQVksRUFFdEYsT0FBT2dCLEVBQ0xULEVBQ0csV0FBV0QsQ0FBUyxFQUNwQixNQUFNaUIsRUFBd0JELEVBQU1qQixDQUFPLENBQUMsRUFDNUMsVUFBVSxPQUFPLEtBQUtBLENBQU8sQ0FBQyxFQUM5QixVQUFVbUIsRUFBMEIsRUFBRSxHQUFHLG1CQUFtQixDQUFDLENBQ2xFLENBQ0YsQ0FLTyxTQUFTQyxFQUNkMUIsRUFDQUMsRUFDQSxDQUNBLEdBQU0sQ0FDSixNQUFPLENBQUUsUUFBQUssRUFBUyxLQUFNQyxDQUFVLEVBQ2xDLEtBQUFnQixDQUNGLEVBQUl2QixFQUVFUSxFQUFVQyxFQUEwRFIsQ0FBWSxFQUV0RixPQUFPZ0IsRUFDTFQsRUFDRyxXQUFXRCxDQUFTLEVBQ3BCLE9BQU9nQixFQUFLLElBQUtJLEdBQVMsT0FBTyxLQUFLQSxDQUFHLEVBQUUsU0FBVyxFQUFJLENBQUUsQ0FBQyxPQUFPLEtBQUtyQixDQUFPLEVBQUUsQ0FBQyxDQUFFLEVBQUcsSUFBSyxFQUFJcUIsQ0FBSSxDQUFDLEVBQ3RHLFVBQVUsT0FBTyxLQUFLckIsQ0FBTyxDQUFDLEVBQzlCLFVBQVVtQixFQUEwQixFQUFFLEdBQUcsb0JBQW9CLENBQUMsQ0FDbkUsQ0FDRixDQUtPLFNBQVNHLEVBQ2Q1QixFQUNBQyxFQUNBLENBQ0EsR0FBTSxDQUNKLFFBQUE0QixFQUNBLElBQUFGLEVBQ0EsTUFBTyxDQUFFLFFBQUFyQixFQUFTLEtBQU1DLENBQVUsQ0FDcEMsRUFBSVAsRUFFRVEsRUFBVUMsRUFBMERSLENBQVksRUFFdEYsT0FBT2dCLEVBQ0xULEVBQ0csWUFBWUQsQ0FBUyxFQUNyQixJQUFJc0IsQ0FBTyxFQUNYLE1BQU1MLEVBQXdCLENBQUNHLENBQUcsRUFBR3JCLENBQU8sQ0FBQyxFQUM3QyxVQUFVLE9BQU8sS0FBS0EsQ0FBTyxDQUFDLEVBQzlCLFVBQVVtQixFQUEwQixFQUFFLEdBQUcsbUJBQW1CLENBQUMsQ0FDbEUsQ0FDRixDQUVBLFNBQVNBLEdBQTRCLENBQ25DLElBQU1WLEVBQUtlLEVBQWtCLEVBRTdCLE9BQU9mLEVBQUcsS0FBbUJBLEVBQUcsS0FBS0MsK0NBQWtELFNBQVMsRUFBRyxNQUFNLENBQzNHLENFaktBZSxJQ0FBQyxJQWdFTyxTQUFTQyxFQUFjQyxFQUFNLENBQ2hDLE9BQU9DLGtEQUFxREEsRUFBSSxLQUFLQyxFQUF3QkYsRUFBSyxnQkFBZ0IsRUFBRyxLQUFLLENBQUMsQ0FBQyxrQkFBa0JBLENBQUksVUFDdEosQ0E4SEEsU0FBU0csRUFBd0JDLEVBQU1DLEVBQU8sQ0FDMUMsR0FBSSxDQUNBLE9BQU9DLEVBQWtCRixFQUFNQyxDQUFLLENBQ3hDLE1BQ00sQ0FDRixNQUFNLElBQUksTUFBTSxtTEFBbUwsQ0FDdk0sQ0FDSixDRDFITyxTQUFTRSxFQUFlQyxFQUF1RSxDQUNwRyxPQUFPQyxFQUNMQyxFQUEyQkYsQ0FBWSxFQUNwQyxXQUFXRyxFQUFrQixFQUFFLEdBQW9CLG9CQUFxQixDQUFDLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxFQUNwRixTQUFTLHNCQUF3QkMsR0FBT0EsRUFBRyxNQUFNLFVBQVcsSUFBSyxTQUFTLEVBQUUsTUFBTSxVQUFXLElBQUssU0FBUyxDQUFDLEVBQzVHLE1BQU0sVUFBVyxLQUFNLENBQUMsUUFBUyxNQUFNLENBQUMsRUFFeEMsTUFBTSxZQUFhLElBQUssTUFBTSxFQUU5QixNQUFNLFVBQVcsV0FBWSxVQUFVLEVBQ3ZDLE9BQU8sQ0FBQyxVQUFXLFFBQVEsQ0FBQyxFQUM1QixPQUFRQyxHQUFPLENBQ2RDLEVBQ0VELEVBQ0csV0FBV0EsRUFBRyxHQUFxQixxQkFBc0IsQ0FBQyxTQUFTLENBQUMsRUFBRSxHQUFHLEtBQUssQ0FBQyxFQUMvRSxTQUNDQSxFQUFHLEdBQXlCLDBCQUEyQixDQUFDLFNBQVMsQ0FBQyxFQUFFLEdBQUcsS0FBSyxFQUM1RSxXQUNBLFVBQ0YsRUFFQyxNQUFNLGFBQWMsS0FBTSxDQUFDLEVBQzNCLE9BQU8sQ0FDTiw0QkFDQSxXQUNBLFNBQ0EsdUJBQ0Esd0JBQ0EscUJBQ0YsQ0FBQyxFQUNBLE9BQVFBLEdBQU8sQ0FBQ0EsRUFBRyxhQUFjLEtBQU0sQ0FBQyxFQUFHLENBQUMsQ0FBQyxFQUFFLEdBQUcsVUFBVSxFQUFHQSxFQUFHLGNBQWUsS0FBTSxDQUFDLEVBQUUsR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUM5RyxFQUFFLEdBQUcsU0FBUyxDQUNoQixDQUFDLEVBQ0gsQ0FBRSxnQkFBaUIsQ0FBRSxRQUFTLFlBQWEsQ0FBRSxDQUMvQyxDQUNGLENBS08sU0FBU0UsR0FBa0IsQ0FDaEMsTUFBTyxDQUNMLENBQ0UsS0FBTSxVQUNOLElBQUssNERBQ0wsUUFBUyxDQUNQLENBQ0UsS0FBTSxLQUNOLFNBQVUsVUFDVixRQUFTLEtBQ1QsR0FBSSxFQUNKLFNBQVUsRUFDVixTQUFVLEVBQ1YsU0FBVSxLQUNWLFVBQVcsSUFDYixFQUNBLENBQ0UsS0FBTSxPQUNOLFNBQVUsT0FDVixRQUFTLEtBQ1QsR0FBSSxFQUNKLFNBQVUsRUFDVixTQUFVLEVBQ1YsU0FBVSxLQUNWLFVBQVcsSUFDYixDQUNGLENBQ0YsRUFDQSxDQUNFLEtBQU0sUUFDTixJQUFLLG9JQUNMLFFBQVMsQ0FDUCxDQUNFLEtBQU0sS0FDTixTQUFVLE9BQ1YsUUFBUyxLQUNULEdBQUksRUFDSixTQUFVLEVBQ1YsU0FBVSxFQUNWLFNBQVUsS0FDVixVQUFXLElBQ2IsRUFDQSxDQUNFLEtBQU0sYUFDTixTQUFVLFlBQ1YsUUFBUyxLQUNULEdBQUksRUFDSixTQUFVLEVBQ1YsU0FBVSxFQUNWLFNBQVUsS0FDVixVQUFXLElBQ2IsRUFDQSxDQUNFLEtBQU0sYUFDTixTQUFVLFlBQ1YsUUFBUyxLQUNULEdBQUksRUFDSixTQUFVLEVBQ1YsU0FBVSxFQUNWLFNBQVUsS0FDVixVQUFXLElBQ2IsRUFDQSxDQUNFLEtBQU0sT0FDTixTQUFVLFVBQ1YsUUFBUyxLQUNULEdBQUksRUFDSixTQUFVLEVBQ1YsU0FBVSxFQUNWLFNBQVUsS0FDVixVQUFXLElBQ2IsRUFDQSxDQUNFLEtBQU0sT0FDTixTQUFVLFVBQ1YsUUFBUyxLQUNULEdBQUksRUFDSixTQUFVLEVBQ1YsU0FBVSxFQUNWLFNBQVUsS0FDVixVQUFXLElBQ2IsRUFDQSxDQUNFLEtBQU0sWUFDTixTQUFVLE9BQ1YsUUFBUyxLQUNULEdBQUksRUFDSixTQUFVLEVBQ1YsU0FBVSxFQUNWLFNBQVUsS0FDVixVQUFXLElBQ2IsQ0FDRixDQUNGLEVBQ0EsQ0FDRSxLQUFNLGVBQ04sSUFBSyxnR0FDTCxRQUFTLENBQ1AsQ0FDRSxLQUFNLEtBQ04sU0FBVSxPQUNWLFFBQVMsS0FDVCxHQUFJLEVBQ0osU0FBVSxFQUNWLFNBQVUsRUFDVixTQUFVLEtBQ1YsVUFBVyxJQUNiLEVBQ0EsQ0FDRSxLQUFNLE9BQ04sU0FBVSxPQUNWLFFBQVMsS0FDVCxHQUFJLEVBQ0osU0FBVSxFQUNWLFNBQVUsRUFDVixTQUFVLEtBQ1YsVUFBVyxJQUNiLEVBQ0EsQ0FDRSxLQUFNLGFBQ04sU0FBVSxZQUNWLFFBQVMsS0FDVCxHQUFJLEVBQ0osU0FBVSxFQUNWLFNBQVUsRUFDVixTQUFVLEtBQ1YsVUFBVyxJQUNiLENBQ0YsQ0FDRixDQUNGLENBQ0YsQ0puT0EsSUFBTUMsRUFBUyxPQUVUQyxFQUFrQixDQUN0QixJQUNBLEtBQ0EsSUFDQSxLQUNBLElBQ0EsS0FDQSxLQUNBLFNBQ0EsT0FDQSxVQUNGLEVBRU8sU0FBU0MsR0FBb0JDLEVBQWtELENBQ3BGLEdBQU0sQ0FBRSxTQUFBQyxFQUFVLEdBQUdDLENBQWtCLEVBQUlGLEVBRTNDLE1BQU8sQ0FDTCxjQUFlSCxFQUVmLE1BQU0sT0FBT00sRUFBU0MsRUFBNkQsQ0FDakYsR0FBSSxDQUNGLElBQU1DLEVBQVFDLEVBQWVILEVBQVNELENBQWlCLEVBR2pELENBQUNLLENBQUssRUFBSSxNQUFNTixFQUFTLFFBQVFJLEVBQU9ELENBQU8sRUFFckQsT0FBSUcsRUFDS0MsRUFBbUIsQ0FBRSxNQUFBRCxFQUFPLE1BQUFGLENBQU0sQ0FBQyxFQUdyQyxDQUFDLEtBQU0sQ0FBRSxHQUFHRixFQUFTLE1BQUFFLENBQU0sQ0FBQyxDQUNyQyxPQUFTRSxFQUFnQixDQUN2QixPQUFPQyxFQUFtQixDQUFFLE1BQU9ELENBQWUsQ0FBQyxDQUNyRCxDQUNGLEVBRUEsTUFBTSxPQUFPSixFQUFTQyxFQUE2RCxDQUNqRixHQUFJLENBQ0YsSUFBTUMsRUFBUUksRUFBZU4sRUFBU0QsQ0FBaUIsRUFFakQsQ0FBQ0ssRUFBT0csQ0FBSSxFQUFJLE1BQU1ULEVBQVMsUUFBUUksRUFBT0QsQ0FBTyxFQUUzRCxPQUFJRyxFQUNLQyxFQUFtQixDQUFFLE1BQUFELEVBQU8sTUFBQUYsQ0FBTSxDQUFDLEVBR3JDLENBQUMsS0FBTSxDQUFFLEtBQUFLLEVBQU0sTUFBQUwsQ0FBTSxDQUFDLENBQy9CLE9BQVNFLEVBQWdCLENBQ3ZCLE9BQU9DLEVBQW1CLENBQUUsTUFBT0QsQ0FBZSxDQUFDLENBQ3JELENBQ0YsRUFFQSxNQUFNLFdBQVdILEVBQWlFLENBQ2hGLEdBQUksQ0FDRixJQUFNTyxFQUFjQyxFQUFlWixDQUFZLEVBRXpDLENBQUNhLEVBQWFDLENBQU0sRUFBSSxNQUFNYixFQUFTLFFBQVFVLEVBQWFQLENBQU8sRUFFekUsT0FBSVMsRUFDS0wsRUFBbUIsQ0FBRSxNQUFPSyxFQUFhLE1BQU9GLENBQVksQ0FBQyxFQUcvRCxDQUFDLEtBQU1JLEVBQW9CLENBQUUsTUFBT0osRUFBYSxPQUFBRyxDQUFPLENBQUMsQ0FBQyxDQUNuRSxPQUFTUCxFQUFnQixDQUN2QixPQUFPQyxFQUFtQixDQUFFLE1BQU9ELENBQWUsQ0FBQyxDQUNyRCxDQUNGLEVBRUEsTUFBTSxNQUFNSixFQUFTQyxFQUE0RCxDQUMvRSxHQUFJLENBQ0YsSUFBTUMsRUFBUVcsRUFBZWIsRUFBU0QsQ0FBaUIsRUFFakQsQ0FBQ0ssRUFBT1UsQ0FBTyxFQUFJLE1BQU1oQixFQUFTLFFBQVFJLEVBQU9ELENBQU8sRUFFOUQsT0FBSUcsRUFDS0MsRUFBbUIsQ0FBRSxNQUFBRCxFQUFPLE1BQUFGLENBQU0sQ0FBQyxFQUdyQyxDQUFDLEtBQU0sQ0FBRSxpQkFBa0JZLEVBQVEsQ0FBQyxHQUFHLGNBQWdCLElBQUssS0FBTUEsRUFBUyxNQUFBWixDQUFNLENBQUMsQ0FDM0YsT0FBU0UsRUFBZ0IsQ0FFdkIsT0FBT0MsRUFBbUIsQ0FBRSxNQUFPRCxDQUFlLENBQUMsQ0FDckQsQ0FDRixFQUVBLE1BQU0sT0FBT0osRUFBU0MsRUFBNkQsQ0FDakYsR0FBSSxDQUNGLElBQU1DLEVBQVFhLEVBQWVmLEVBQVNELENBQWlCLEVBRWpELENBQUNLLEVBQU9VLENBQU8sRUFBSSxNQUFNaEIsRUFBUyxRQUFRSSxFQUFPRCxDQUFPLEVBRTlELEdBQUlHLEVBQ0YsT0FBT0MsRUFBbUIsQ0FBRSxNQUFBRCxFQUFPLE1BQUFGLENBQU0sQ0FBQyxFQUc1QyxHQUFNLENBQUNjLENBQUcsRUFBSUYsRUFFZCxPQUFLRSxFQUtFLENBQUMsS0FBTSxDQUFFLElBQUFBLEVBQUssTUFBQWQsQ0FBTSxDQUFDLEVBSG5CRyxFQUFtQixDQUFFLE1BQU8sSUFBSSxNQUFNLGVBQWUsRUFBRyxNQUFBSCxDQUFNLENBQUMsQ0FJMUUsT0FBU0UsRUFBZ0IsQ0FDdkIsT0FBT0MsRUFBbUIsQ0FBRSxNQUFPRCxDQUFlLENBQUMsQ0FDckQsQ0FDRixDQUNGLENBQ0YsQ0FFQSxTQUFTUSxFQUFvQkssRUFHRCxDQUMxQixHQUFNLENBQUUsT0FBQU4sRUFBUSxNQUFPSCxDQUFZLEVBQUlTLEVBRXZDLE1BQU8sQ0FDTCxnQkFBQXRCLEVBQ0EsTUFBT2EsRUFDUCxRQUFTRyxFQUFPLE9BQ2QsQ0FBQ08sRUFBU0MsSUFBVSxDQUNsQixHQUFNLENBQUUsUUFBQUMsRUFBUyxLQUFNQyxFQUFXLElBQUtDLENBQUssRUFBSUgsRUFFMUNJLEVBQWdCSCxFQUFRLE9BQzVCLENBQUNBLEVBQVNJLElBQVcsQ0FDbkIsR0FBTSxDQUFFLFNBQUFDLEVBQVUsUUFBU0MsRUFBYyxVQUFBQyxFQUFXLEtBQU1DLEVBQVksR0FBQUMsQ0FBRyxFQUFJTCxFQUV2RU0sRUFBV0MsRUFBd0JOLENBQVEsRUFFM0NPLEVBQWEsRUFBUVIsRUFBTyxTQUM1QlMsRUFBVyxFQUFRVCxFQUFPLFNBRWhDLE9BQUFKLEVBQVFRLENBQVUsRUFBSSxDQUNwQixTQUFVLENBRVIsR0FBR00sRUFBNEJKLENBQVEsRUFDdkMsU0FBQUEsRUFDQSxRQUFTLEdBQ1QsU0FBVSxHQUNWLEtBQU1MLEVBRU4sUUFBUyxDQUFDLEVBQ1YsT0FBQS9CLENBQ0YsRUFDQSxhQUFBZ0MsRUFDQSxTQUFVQyxFQUNWLFNBQVVBLEVBQVlqQyxFQUFTLEtBQy9CLFFBQVM4QixFQUFPLFNBRWhCLGdCQUFpQixHQUNqQixXQUFBUSxFQUVBLFdBQVksQ0FBQ0MsR0FBWSxDQUFDRCxHQUFjTixHQUFnQixLQUN4RCxLQUFNRSxFQUNOLFNBQUFLLEVBQ0EsV0FBWUosRUFBSyxFQUFJQSxFQUFLLEtBQzFCLE9BQUFuQyxFQUNBLE1BQU8yQixDQUNULEVBRU9ELENBQ1QsRUFDQSxDQUFDLENBQ0gsRUFFQSxPQUFBRixFQUFRLEtBQU0sT0FBT0csQ0FBUyxFQUFJLENBQ2hDLFFBQVNFLEVBQ1QsS0FBTUYsRUFDTixPQUFRLE1BQ1YsRUFFT0gsQ0FDVCxFQUNBLENBQ0UsS0FBTSxDQUFFLE9BQVEsQ0FBQyxFQUFHLEtBQU0sTUFBTyxDQUNuQyxDQUNGLEVBQ0EsU0FBVSxLQUNaLENBQ0YsQ0FLTyxTQUFTaUIsSUFBaUIsQ0FDL0IsSUFBTWpDLEVBQVEsQ0FBRSxXQUFZLENBQUMsRUFBRyxJQUFLLFVBQVcsRUFDMUNTLEVBQVN5QixFQUFnQixFQUUvQixPQUFPeEIsRUFBb0IsQ0FBRSxNQUFBVixFQUFPLE9BQUFTLENBQU8sQ0FBQyxDQWM5QyIsCiAgIm5hbWVzIjogWyJpbml0X2RlZmluZV9BQ0NFTEVSQVRFX1NDSEVNQV9CWV9QUk9WSURFUiIsICJpbml0X2RlZmluZV9BQ0NFTEVSQVRFX1NDSEVNQV9CWV9QUk9WSURFUiIsICJpbml0X2RlZmluZV9BQ0NFTEVSQVRFX1NDSEVNQV9CWV9QUk9WSURFUiIsICJTUUxJVEVfQUZGSU5JVFlfVE9fTUVUQURBVEEiLCAiZGV0ZXJtaW5lQ29sdW1uQWZmaW5pdHkiLCAiZGVjbGFyZWREYXRhVHlwZSIsICJ1cHBlclR5cGUiLCAiaW5pdF9kZWZpbmVfQUNDRUxFUkFURV9TQ0hFTUFfQllfUFJPVklERVIiLCAiaW5pdF9kZWZpbmVfQUNDRUxFUkFURV9TQ0hFTUFfQllfUFJPVklERVIiLCAiZ2V0U1FMaXRlQnVpbGRlciIsICJyZXF1aXJlbWVudHMiLCAiZ2V0QnVpbGRlciIsICJTcWxpdGVBZGFwdGVyIiwgIlNxbGl0ZVF1ZXJ5Q29tcGlsZXIiLCAiZ2V0U2VsZWN0UXVlcnkiLCAiZGV0YWlscyIsICJyZXF1aXJlbWVudHMiLCAiZmlsdGVyIiwgInBhZ2VJbmRleCIsICJwYWdlU2l6ZSIsICJzb3J0T3JkZXIiLCAiY29sdW1ucyIsICJ0YWJsZU5hbWUiLCAiYnVpbGRlciIsICJnZXRTUUxpdGVCdWlsZGVyIiwgImZpbHRlckV4cHJlc3Npb24iLCAiZ2V0U2VsZWN0RmlsdGVyRXhwcmVzc2lvbiIsICJBR0dfTkFNRSIsICJDT1VOVF9SRUYiLCAiY291bnRRdWVyeSIsICJlYiIsICJzcWwiLCAiY29tcGlsZSIsICJqYiIsICJxYiIsICJpdGVtIiwgIm1vY2tTZWxlY3RRdWVyeSIsICJnZXREZWxldGVRdWVyeSIsICJyb3dzIiwgImFwcGx5SW5mZXJyZWRSb3dGaWx0ZXJzIiwgImdldEN1cnJlbnRUaW1lc3RhbXBNaWxsaXMiLCAiZ2V0SW5zZXJ0UXVlcnkiLCAicm93IiwgImdldFVwZGF0ZVF1ZXJ5IiwgImNoYW5nZXMiLCAiZXhwcmVzc2lvbkJ1aWxkZXIiLCAiaW5pdF9kZWZpbmVfQUNDRUxFUkFURV9TQ0hFTUFfQllfUFJPVklERVIiLCAiaW5pdF9kZWZpbmVfQUNDRUxFUkFURV9TQ0hFTUFfQllfUFJPVklERVIiLCAianNvbkFycmF5RnJvbSIsICJleHByIiwgInNxbCIsICJnZXRTcWxpdGVKc29uT2JqZWN0QXJncyIsICJnZXRTcWxpdGVKc29uT2JqZWN0QXJncyIsICJub2RlIiwgInRhYmxlIiwgImdldEpzb25PYmplY3RBcmdzIiwgImdldFRhYmxlc1F1ZXJ5IiwgInJlcXVpcmVtZW50cyIsICJjb21waWxlIiwgImdldFNRTGl0ZUJ1aWxkZXIiLCAiZXhwcmVzc2lvbkJ1aWxkZXIiLCAiamIiLCAiZWIiLCAianNvbkFycmF5RnJvbSIsICJtb2NrVGFibGVzUXVlcnkiLCAic2NoZW1hIiwgImZpbHRlck9wZXJhdG9ycyIsICJjcmVhdGVTUUxpdGVBZGFwdGVyIiwgInJlcXVpcmVtZW50cyIsICJleGVjdXRvciIsICJvdGhlclJlcXVpcmVtZW50cyIsICJkZXRhaWxzIiwgIm9wdGlvbnMiLCAicXVlcnkiLCAiZ2V0RGVsZXRlUXVlcnkiLCAiZXJyb3IiLCAiY3JlYXRlQWRhcHRlckVycm9yIiwgImdldEluc2VydFF1ZXJ5IiwgInJvd3MiLCAidGFibGVzUXVlcnkiLCAiZ2V0VGFibGVzUXVlcnkiLCAidGFibGVzRXJyb3IiLCAidGFibGVzIiwgImNyZWF0ZUludHJvc3BlY3Rpb24iLCAiZ2V0U2VsZWN0UXVlcnkiLCAicmVzdWx0cyIsICJnZXRVcGRhdGVRdWVyeSIsICJyb3ciLCAiYXJncyIsICJzY2hlbWFzIiwgInRhYmxlIiwgImNvbHVtbnMiLCAidGFibGVOYW1lIiwgIl9zcWwiLCAiY29sdW1uc1JlY29yZCIsICJjb2x1bW4iLCAiZGF0YXR5cGUiLCAiZGVmYXVsdFZhbHVlIiwgImZrX2NvbHVtbiIsICJjb2x1bW5OYW1lIiwgInBrIiwgImFmZmluaXR5IiwgImRldGVybWluZUNvbHVtbkFmZmluaXR5IiwgImlzQ29tcHV0ZWQiLCAibnVsbGFibGUiLCAiU1FMSVRFX0FGRklOSVRZX1RPX01FVEFEQVRBIiwgIm1vY2tJbnRyb3NwZWN0IiwgIm1vY2tUYWJsZXNRdWVyeSJdCn0K
@@ -71,7 +71,7 @@ interface Table {
71
71
  }
72
72
  interface Column {
73
73
  datatype: DataType;
74
- defaultValue: "CURRENT_DATE" | "CURRENT_TIME" | "CURRENT_TIMESTAMP" | "gen_random_uuid()" | "(JSON_ARRAY())" | `nextval(${string})` | `now()` | "(UUID_TO_BIN(UUID()))" | (string & {}) | null;
74
+ defaultValue: "CURRENT_DATE" | "CURRENT_TIME" | "CURRENT_TIMESTAMP" | "datetime('now')" | "gen_random_uuid()" | "json_array()" | `nextval(${string})` | `now()` | "uuid_to_bin(uuid())" | "uuid()" | (string & {}) | null;
75
75
  fkColumn: ColumnName | null;
76
76
  fkSchema: SchemaName | null;
77
77
  fkTable: TableName | null;
@@ -71,7 +71,7 @@ interface Table {
71
71
  }
72
72
  interface Column {
73
73
  datatype: DataType;
74
- defaultValue: "CURRENT_DATE" | "CURRENT_TIME" | "CURRENT_TIMESTAMP" | "gen_random_uuid()" | "(JSON_ARRAY())" | `nextval(${string})` | `now()` | "(UUID_TO_BIN(UUID()))" | (string & {}) | null;
74
+ defaultValue: "CURRENT_DATE" | "CURRENT_TIME" | "CURRENT_TIMESTAMP" | "datetime('now')" | "gen_random_uuid()" | "json_array()" | `nextval(${string})` | `now()` | "uuid_to_bin(uuid())" | "uuid()" | (string & {}) | null;
75
75
  fkColumn: ColumnName | null;
76
76
  fkSchema: SchemaName | null;
77
77
  fkTable: TableName | null;