@prisma/studio-core-licensed 0.0.0-dev.202511160207 → 0.0.0-dev.202511160907
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.
- package/dist/chunk-GESZYQR2.js +10 -0
- package/dist/chunk-N3MVVUQR.js +10 -0
- package/dist/data/accelerate/index.d.cts +1 -1
- package/dist/data/accelerate/index.d.ts +1 -1
- package/dist/data/bff/index.d.cts +1 -1
- package/dist/data/bff/index.d.ts +1 -1
- package/dist/data/index.d.cts +1 -1
- package/dist/data/index.d.ts +1 -1
- package/dist/data/node-sqlite/index.cjs +2 -2
- package/dist/data/node-sqlite/index.d.cts +1 -1
- package/dist/data/node-sqlite/index.d.ts +1 -1
- package/dist/data/node-sqlite/index.js +1 -1
- package/dist/data/pglite/index.cjs +2 -2
- package/dist/data/pglite/index.d.cts +1 -1
- package/dist/data/pglite/index.d.ts +1 -1
- package/dist/data/pglite/index.js +1 -1
- package/dist/data/postgres-core/index.cjs +2 -2
- package/dist/data/postgres-core/index.d.cts +1 -1
- package/dist/data/postgres-core/index.d.ts +1 -1
- package/dist/data/postgres-core/index.js +1 -1
- package/dist/data/postgresjs/index.cjs +2 -2
- package/dist/data/postgresjs/index.d.cts +1 -1
- package/dist/data/postgresjs/index.d.ts +1 -1
- package/dist/data/postgresjs/index.js +1 -1
- package/dist/data/ppg/index.d.cts +1 -1
- package/dist/data/ppg/index.d.ts +1 -1
- package/dist/data/sqlite-core/index.cjs +2 -2
- package/dist/data/sqlite-core/index.d.cts +8 -2
- package/dist/data/sqlite-core/index.d.ts +8 -2
- package/dist/data/sqlite-core/index.js +1 -1
- package/dist/{index-QHiosBWl.d.cts → index-DSeTZ-is.d.cts} +1 -1
- package/dist/{index-QHiosBWl.d.ts → index-DSeTZ-is.d.ts} +1 -1
- package/dist/metafile-cjs.json +1 -1
- package/dist/metafile-esm.json +1 -1
- package/dist/ui/index.cjs +1 -1
- package/dist/ui/index.d.cts +1 -1
- package/dist/ui/index.d.ts +1 -1
- package/dist/ui/index.js +1 -1
- package/package.json +1 -1
- package/dist/chunk-4ML6JJCH.js +0 -10
- package/dist/chunk-MEAZKIQ2.js +0 -10
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import * as ___react___ from 'react';
|
|
2
|
+
import * as ___react_dom___ from 'react-dom';
|
|
3
|
+
|
|
4
|
+
function require(mod) {
|
|
5
|
+
if (mod === 'react') return ___react___;
|
|
6
|
+
if (mod === 'react-dom') return ___react_dom___;
|
|
7
|
+
throw new Error(`Unknown module ${mod}`);
|
|
8
|
+
}
|
|
9
|
+
import{a as p}from"./chunk-OTK4ZF2W.js";import{i as g,l as D,m as E,n as q,o as I,p as _,q as R,s as w,t as S}from"./chunk-WHLVNWIR.js";import{e as u}from"./chunk-GDQBQ7MK.js";u();u();u();var B={bool:{group:"boolean"},boolean:{group:"boolean"},bytea:{group:"string"},char:{group:"string"},citext:{group:"string"},date:{group:"datetime"},interval:{group:"string"},name:{group:"string"},varchar:{group:"string"},text:{group:"string"},time:{group:"time"},timestamp:{group:"datetime"},timestamptz:{group:"datetime"},"timestamp without time zone":{group:"datetime"},"timestamp with time zone":{group:"datetime"},timetz:{group:"time"},"time without time zone":{group:"time"},"time with time zone":{group:"datetime"},uuid:{group:"raw"},int2:{group:"numeric"},int4:{group:"numeric"},int8:{group:"numeric"},smallint:{group:"numeric"},integer:{group:"numeric"},bigint:{group:"numeric"},decimal:{group:"numeric"},numeric:{group:"numeric"},real:{group:"numeric"},float4:{group:"numeric"},float8:{group:"numeric"},"double precision":{group:"numeric"},json:{group:"json"},jsonb:{group:"json"}};u();u();function y(o){return q({...o,Adapter:E,QueryCompiler:D})}function z(o,s){let{table:{name:r,schema:t,columns:n},rows:e}=o,a=y(s);return _(a.withSchema(t).insertInto(r).values(w("insert",e,n)).returning(Object.keys(n)))}function j(o,s){let{pageIndex:r,pageSize:t,sortOrder:n,table:{name:e,schema:a,columns:l},filter:c={kind:"FilterGroup",after:"and",filters:[]}}=o,i=y(s),d=S(c.filters,l),h=i.withSchema(a).selectFrom(e).where(d).select(m=>m.cast(m.fn.coalesce(m.fn.countAll(),g.lit(0)),"text").as("value"));return _(i.with("count",()=>h).withSchema(a).selectFrom([e,"count"]).where(d).select(g.ref("count.value").as("__ps_count__")).select(Object.keys(l)).$call(m=>n.reduce((k,b)=>k.orderBy(b.column,b.direction),m)).limit(t).offset(g.lit(BigInt(r)*BigInt(t))))}function ae(){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 O(o,s){let{changes:r,row:t,table:{columns:n,name:e,schema:a}}=o,l=y(s),c=Object.keys(n);return _(l.withSchema(a).updateTable(e).set(w("update",r,n)).$call(R([t],n)).returning(c).returning(i=>i.cast(i.fn("floor",[i(i.fn("extract",[g`epoch from now()`]),"*",1e6)]),"text").as("__ps_updated_at__")))}function P(o,s){let{rows:r,table:{columns:t,name:n,schema:e}}=o,a=y(s);return _(a.withSchema(e).deleteFrom(n).$call(R(r,t)).returning(Object.keys(t)).returning(l=>l.cast(l.fn("floor",[l(l.fn("extract",[g`epoch from now()`]),"*",1e6)]),"text").as("__ps_deleted_at__")))}u();u();function F(o){return g`(select coalesce(json_agg(agg), '[]') from ${o} as agg)`}var L="r",U="v",G=[L,U];function C(o){return _(y(o).selectFrom("pg_catalog.pg_class as cls").innerJoin("pg_catalog.pg_namespace as ns","cls.relnamespace","ns.oid").$call(M).where("cls.relkind","in",G).select(s=>["ns.nspname as schema","cls.relname as name",F(s.selectFrom("pg_catalog.pg_attribute as att").innerJoin("pg_catalog.pg_type as typ","typ.oid","att.atttypid").innerJoin("pg_catalog.pg_namespace as tns","tns.oid","typ.typnamespace").leftJoin("pg_catalog.pg_constraint as pk_con",r=>r.on("pk_con.contype","=","p").onRef("pk_con.conrelid","=","cls.oid").on(t=>t("att.attnum","=",t.fn.any("pk_con.conkey")))).leftJoin("pg_catalog.pg_constraint as fk_con",r=>r.on("fk_con.contype","=","f").onRef("fk_con.conrelid","=","cls.oid").on(t=>t("att.attnum","=",t.fn.any("fk_con.conkey")))).leftJoin("pg_catalog.pg_class as fk_cls","fk_cls.oid","fk_con.confrelid").leftJoin("pg_catalog.pg_namespace as fk_ns","fk_ns.oid","fk_cls.relnamespace").leftJoin("pg_catalog.pg_attribute as fk_att",r=>r.onRef("fk_att.attrelid","=","fk_cls.oid").on(t=>t("fk_att.attnum","=",t.fn.any("fk_con.confkey")))).whereRef("att.attrelid","=","cls.oid").where("att.attnum",">=",0).where("att.attisdropped","!=",!0).select(["att.attname as name","typ.typname as datatype","tns.nspname as datatype_schema","fk_ns.nspname as foreign_key_schema","fk_cls.relname as foreign_key_table","fk_att.attname as foreign_key_column"]).select(r=>[r("pk_con.conkey","is not",null).$castTo().as("pk"),r("att.attgenerated","!=","").$castTo().as("computed"),r("att.attnotnull","!=",!0).$castTo().as("nullable"),r.fn.coalesce(r.selectFrom("pg_catalog.pg_enum as enm").whereRef("enm.enumtypid","=","typ.oid").select(t=>t.fn.jsonAgg(t.ref("enm.enumlabel")).as("o")),g`'[]'`).as("options")])).as("columns")]))}function J(){return[{schema:"zoo",name:"animals",columns:[{name:"id",datatype:"int4",datatype_schema:"pg_catalog",pk:!0,computed:!1,options:[],nullable:!1,foreign_key_schema:null,foreign_key_table:null,foreign_key_column:null},{name:"name",datatype:"text",datatype_schema:"pg_catalog",pk:!1,computed:!1,options:[],nullable:!0,foreign_key_schema:null,foreign_key_table:null,foreign_key_column:null}]},{schema:"public",name:"users",columns:[{name:"id",datatype:"int4",datatype_schema:"pg_catalog",pk:!0,computed:!1,options:[],nullable:!1,foreign_key_schema:null,foreign_key_table:null,foreign_key_column:null},{name:"created_at",datatype:"timestamp",datatype_schema:"pg_catalog",pk:!1,computed:!1,options:[],nullable:!0,foreign_key_schema:null,foreign_key_table:null,foreign_key_column:null},{name:"deleted_at",datatype:"timestamp",datatype_schema:"pg_catalog",pk:!1,computed:!1,options:[],nullable:!0,foreign_key_schema:null,foreign_key_table:null,foreign_key_column:null},{name:"role",datatype:"varchar",datatype_schema:"pg_catalog",pk:!1,computed:!1,options:[],nullable:!0,foreign_key_schema:null,foreign_key_table:null,foreign_key_column:null},{name:"name",datatype:"varchar",datatype_schema:"pg_catalog",pk:!1,computed:!1,options:[],nullable:!0,foreign_key_schema:null,foreign_key_table:null,foreign_key_column:null},{name:"name_role",datatype:"text",datatype_schema:"pg_catalog",pk:!1,computed:!0,options:[],nullable:!1,foreign_key_schema:null,foreign_key_table:null,foreign_key_column:null}]},{schema:"public",name:"composite_pk",columns:[{name:"id",datatype:"uuid",datatype_schema:"pg_catalog",pk:!0,computed:!1,options:[],nullable:!1,foreign_key_schema:null,foreign_key_table:null,foreign_key_column:null},{name:"name",datatype:"text",datatype_schema:"pg_catalog",pk:!0,computed:!1,options:[],nullable:!0,foreign_key_schema:null,foreign_key_table:null,foreign_key_column:null},{name:"created_at",datatype:"timestamp",datatype_schema:"pg_catalog",pk:!1,computed:!1,options:[],nullable:!0,foreign_key_schema:null,foreign_key_table:null,foreign_key_column:null}]}]}function K(){let o=y();return _(o.selectNoFrom(o.fn("current_setting",[g.lit("timezone")]).as("timezone")))}function N(){return[{timezone:"UTC"}]}function M(o){return o.where("ns.nspname","!~","^pg_").where("ns.nspname","!=","information_schema")}function he(o){let{executor:s,...r}=o;return{defaultSchema:"public",async introspect(t){try{let n=C(r),e=K(),[[a,l],[c,i]]=await Promise.all([s.execute(n,t),s.execute(e,t)]);if(a)return p({error:a,query:n});if(c)return p({error:c,query:e});let d=i[0]?.timezone;return d?[null,$({query:n,tables:l,timezone:d})]:p({error:new Error("Timezone not found"),query:e})}catch(n){return p({error:n})}},async query(t,n){try{let e=j(t,r),[a,l]=await s.execute(e,n);return a?p({error:a,query:e}):[null,{filteredRowCount:l[0]?.__ps_count__||"0",rows:l,query:e}]}catch(e){return p({error:e})}},async insert(t,n){try{let e=z(t,r),[a,l]=await s.execute(e,n);return a?p({error:a,query:e}):[null,{rows:l,query:e}]}catch(e){return p({error:e})}},async update(t,n){try{let e=O(t,r),[a,l]=await s.execute(e,n);if(a)return p({error:a,query:e});let[c]=l;return c?[null,{row:c,query:e}]:p({error:new Error("Update failed"),query:e})}catch(e){return p({error:e})}},async delete(t,n){try{let e=P(t,r),[a]=await s.execute(e,n);return a?p({error:a,query:e}):[null,{...t,query:e}]}catch(e){return p({error:e})}}}}function $(o){let{tables:s,timezone:r,query:t}=o;return s.reduce((n,e)=>{let{schemas:a}=n,{columns:l,name:c,schema:i}=e,d=l.reduce((h,m)=>{let{datatype:k,datatype_schema:b,name:T,options:x,nullable:v}=m,A=k.startsWith("_"),Q=A?k.slice(1):k;return{...h,[T]:{datatype:{...B[Q]||{group:x.length>0?"enum":"raw"},isArray:A,isNative:b==="pg_catalog",name:A?`${Q}[]`:Q,options:x,schema:b},isComputed:m.computed,isInPrimaryKey:m.pk,name:T,nullable:v,schema:i,table:c,fkSchema:m.foreign_key_schema,fkTable:m.foreign_key_table,fkColumn:m.foreign_key_column}}},{});return a[i]===void 0&&(a[i]={name:i,tables:{}}),a[i].tables[c]={columns:d,name:c,schema:i},n},{schemas:{public:{tables:{},name:"public"}},timezone:r,filterOperators:W,query:t})}var W=["=","!=",">",">=","<","<=","is","is not","like","not like","ilike","not ilike"];function Ae(){let o=J(),[{timezone:s}]=N();return $({tables:o,timezone:s,query:{parameters:[],sql:"<mocked>"}})}u();function Te(){return I("select pg_backend_pid() as pid")}function xe(o){return{parameters:[o],sql:"select pg_cancel_backend($1);"}}export{z as a,j as b,ae as c,O as d,P as e,C as f,J as g,K as h,N as i,he as j,Ae as k,Te as l,xe as m};
|
|
10
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vZGF0YS9wb3N0Z3Jlcy1jb3JlL2luZGV4LnRzIiwgIi4uL2RhdGEvcG9zdGdyZXMtY29yZS9hZGFwdGVyLnRzIiwgIi4uL2RhdGEvcG9zdGdyZXMtY29yZS9kYXRhdHlwZS50cyIsICIuLi9kYXRhL3Bvc3RncmVzLWNvcmUvZG1sLnRzIiwgIi4uL2RhdGEvcG9zdGdyZXMtY29yZS9idWlsZGVyLnRzIiwgIi4uL2RhdGEvcG9zdGdyZXMtY29yZS9pbnRyb3NwZWN0aW9uLnRzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9reXNlbHlAMC4yOC44L25vZGVfbW9kdWxlcy9reXNlbHkvZGlzdC9lc20vaGVscGVycy9wb3N0Z3Jlcy5qcyIsICIuLi9kYXRhL3Bvc3RncmVzLWNvcmUvdXRpbGl0eS50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiZXhwb3J0ICogZnJvbSBcIi4vYWRhcHRlclwiO1xuZXhwb3J0ICogZnJvbSBcIi4vZG1sXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9pbnRyb3NwZWN0aW9uXCI7XG5leHBvcnQgKiBmcm9tIFwiLi91dGlsaXR5XCI7XG4iLCAiaW1wb3J0IHtcbiAgdHlwZSBBZGFwdGVyLFxuICB0eXBlIEFkYXB0ZXJEZWxldGVSZXN1bHQsXG4gIHR5cGUgQWRhcHRlckVycm9yLFxuICB0eXBlIEFkYXB0ZXJJbnNlcnRSZXN1bHQsXG4gIHR5cGUgQWRhcHRlckludHJvc3BlY3RSZXN1bHQsXG4gIHR5cGUgQWRhcHRlclF1ZXJ5UmVzdWx0LFxuICB0eXBlIEFkYXB0ZXJSZXF1aXJlbWVudHMsXG4gIHR5cGUgQWRhcHRlclVwZGF0ZVJlc3VsdCxcbiAgdHlwZSBDb2x1bW4sXG4gIGNyZWF0ZUFkYXB0ZXJFcnJvcixcbiAgdHlwZSBGaWx0ZXJPcGVyYXRvcixcbiAgdHlwZSBUYWJsZSxcbn0gZnJvbSBcIi4uL2FkYXB0ZXJcIjtcbmltcG9ydCB0eXBlIHsgUXVlcnksIFF1ZXJ5UmVzdWx0IH0gZnJvbSBcIi4uL3F1ZXJ5XCI7XG5pbXBvcnQgdHlwZSB7IEVpdGhlciB9IGZyb20gXCIuLi90eXBlLXV0aWxzXCI7XG5pbXBvcnQgeyBQT1NUR1JFU1FMX0RBVEFfVFlQRVNfVE9fTUVUQURBVEEgfSBmcm9tIFwiLi9kYXRhdHlwZVwiO1xuaW1wb3J0IHsgZ2V0RGVsZXRlUXVlcnksIGdldEluc2VydFF1ZXJ5LCBnZXRTZWxlY3RRdWVyeSwgZ2V0VXBkYXRlUXVlcnkgfSBmcm9tIFwiLi9kbWxcIjtcbmltcG9ydCB7IGdldFRhYmxlc1F1ZXJ5LCBnZXRUaW1lem9uZVF1ZXJ5LCBtb2NrVGFibGVzUXVlcnksIG1vY2tUaW1lem9uZVF1ZXJ5IH0gZnJvbSBcIi4vaW50cm9zcGVjdGlvblwiO1xuXG5leHBvcnQgdHlwZSBQb3N0Z3Jlc0FkYXB0ZXJSZXF1aXJlbWVudHMgPSBBZGFwdGVyUmVxdWlyZW1lbnRzO1xuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlUG9zdGdyZXNBZGFwdGVyKHJlcXVpcmVtZW50czogUG9zdGdyZXNBZGFwdGVyUmVxdWlyZW1lbnRzKTogQWRhcHRlciB7XG4gIGNvbnN0IHsgZXhlY3V0b3IsIC4uLm90aGVyUmVxdWlyZW1lbnRzIH0gPSByZXF1aXJlbWVudHM7XG5cbiAgcmV0dXJuIHtcbiAgICBkZWZhdWx0U2NoZW1hOiBcInB1YmxpY1wiLFxuXG4gICAgYXN5bmMgaW50cm9zcGVjdChvcHRpb25zKTogUHJvbWlzZTxFaXRoZXI8QWRhcHRlckVycm9yLCBBZGFwdGVySW50cm9zcGVjdFJlc3VsdD4+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHRhYmxlc1F1ZXJ5ID0gZ2V0VGFibGVzUXVlcnkob3RoZXJSZXF1aXJlbWVudHMpO1xuICAgICAgICBjb25zdCB0aW1lem9uZVF1ZXJ5ID0gZ2V0VGltZXpvbmVRdWVyeSgpO1xuXG4gICAgICAgIGNvbnN0IFtbdGFibGVzRXJyb3IsIHRhYmxlc10sIFt0aW1lem9uZUVycm9yLCB0aW1lem9uZXNdXSA9IGF3YWl0IFByb21pc2UuYWxsKFtcbiAgICAgICAgICBleGVjdXRvci5leGVjdXRlKHRhYmxlc1F1ZXJ5LCBvcHRpb25zKSxcbiAgICAgICAgICBleGVjdXRvci5leGVjdXRlKHRpbWV6b25lUXVlcnksIG9wdGlvbnMpLFxuICAgICAgICBdKTtcblxuICAgICAgICBpZiAodGFibGVzRXJyb3IpIHtcbiAgICAgICAgICByZXR1cm4gY3JlYXRlQWRhcHRlckVycm9yKHsgZXJyb3I6IHRhYmxlc0Vycm9yLCBxdWVyeTogdGFibGVzUXVlcnkgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGltZXpvbmVFcnJvcikge1xuICAgICAgICAgIHJldHVybiBjcmVhdGVBZGFwdGVyRXJyb3IoeyBlcnJvcjogdGltZXpvbmVFcnJvciwgcXVlcnk6IHRpbWV6b25lUXVlcnkgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB0aW1lem9uZSA9IHRpbWV6b25lc1swXT8udGltZXpvbmU7XG5cbiAgICAgICAgaWYgKCF0aW1lem9uZSkge1xuICAgICAgICAgIHJldHVybiBjcmVhdGVBZGFwdGVyRXJyb3IoeyBlcnJvcjogbmV3IEVycm9yKFwiVGltZXpvbmUgbm90IGZvdW5kXCIpLCBxdWVyeTogdGltZXpvbmVRdWVyeSB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBbbnVsbCwgY3JlYXRlSW50cm9zcGVjdGlvbih7IHF1ZXJ5OiB0YWJsZXNRdWVyeSwgdGFibGVzLCB0aW1lem9uZSB9KV07XG4gICAgICB9IGNhdGNoIChlcnJvcjogdW5rbm93bikge1xuICAgICAgICAvLyBUT0RPOiBoYW5kbGUgcHJvcGVybHlcbiAgICAgICAgcmV0dXJuIGNyZWF0ZUFkYXB0ZXJFcnJvcih7IGVycm9yOiBlcnJvciBhcyBFcnJvciB9KTtcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgYXN5bmMgcXVlcnkoZGV0YWlscywgb3B0aW9ucyk6IFByb21pc2U8RWl0aGVyPEFkYXB0ZXJFcnJvciwgQWRhcHRlclF1ZXJ5UmVzdWx0Pj4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcXVlcnkgPSBnZXRTZWxlY3RRdWVyeShkZXRhaWxzLCBvdGhlclJlcXVpcmVtZW50cyk7XG5cbiAgICAgICAgY29uc3QgW2Vycm9yLCByZXN1bHRzXSA9IGF3YWl0IGV4ZWN1dG9yLmV4ZWN1dGUocXVlcnksIG9wdGlvbnMpO1xuXG4gICAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgIHJldHVybiBjcmVhdGVBZGFwdGVyRXJyb3IoeyBlcnJvciwgcXVlcnkgfSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gW251bGwsIHsgZmlsdGVyZWRSb3dDb3VudDogcmVzdWx0c1swXT8uX19wc19jb3VudF9fIHx8IFwiMFwiLCByb3dzOiByZXN1bHRzLCBxdWVyeSB9XTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yOiB1bmtub3duKSB7XG4gICAgICAgIC8vIFRPRE86IGhhbmRsZSBwcm9wZXJseVxuICAgICAgICByZXR1cm4gY3JlYXRlQWRhcHRlckVycm9yKHsgZXJyb3I6IGVycm9yIGFzIEVycm9yIH0pO1xuICAgICAgfVxuICAgIH0sXG5cbiAgICBhc3luYyBpbnNlcnQoZGV0YWlscywgb3B0aW9ucyk6IFByb21pc2U8RWl0aGVyPEFkYXB0ZXJFcnJvciwgQWRhcHRlckluc2VydFJlc3VsdD4+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHF1ZXJ5ID0gZ2V0SW5zZXJ0UXVlcnkoZGV0YWlscywgb3RoZXJSZXF1aXJlbWVudHMpO1xuXG4gICAgICAgIGNvbnN0IFtlcnJvciwgcm93c10gPSBhd2FpdCBleGVjdXRvci5leGVjdXRlKHF1ZXJ5LCBvcHRpb25zKTtcblxuICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICByZXR1cm4gY3JlYXRlQWRhcHRlckVycm9yKHsgZXJyb3IsIHF1ZXJ5IH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIFtudWxsLCB7IHJvd3MsIHF1ZXJ5IH1dO1xuICAgICAgfSBjYXRjaCAoZXJyb3I6IHVua25vd24pIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZUFkYXB0ZXJFcnJvcih7IGVycm9yOiBlcnJvciBhcyBFcnJvciB9KTtcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgYXN5bmMgdXBkYXRlKGRldGFpbHMsIG9wdGlvbnMpOiBQcm9taXNlPEVpdGhlcjxBZGFwdGVyRXJyb3IsIEFkYXB0ZXJVcGRhdGVSZXN1bHQ+PiB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBxdWVyeSA9IGdldFVwZGF0ZVF1ZXJ5KGRldGFpbHMsIG90aGVyUmVxdWlyZW1lbnRzKTtcbiAgICAgICAgY29uc3QgW2Vycm9yLCByZXN1bHRzXSA9IGF3YWl0IGV4ZWN1dG9yLmV4ZWN1dGUocXVlcnksIG9wdGlvbnMpO1xuXG4gICAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgIHJldHVybiBjcmVhdGVBZGFwdGVyRXJyb3IoeyBlcnJvciwgcXVlcnkgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBbcm93XSA9IHJlc3VsdHM7XG5cbiAgICAgICAgaWYgKCFyb3cpIHtcbiAgICAgICAgICAvLyBUT0RPOiBjdXN0b20gZXJyb3I/XG4gICAgICAgICAgcmV0dXJuIGNyZWF0ZUFkYXB0ZXJFcnJvcih7IGVycm9yOiBuZXcgRXJyb3IoXCJVcGRhdGUgZmFpbGVkXCIpLCBxdWVyeSB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBbbnVsbCwgeyByb3csIHF1ZXJ5IH1dO1xuICAgICAgfSBjYXRjaCAoZXJyb3I6IHVua25vd24pIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZUFkYXB0ZXJFcnJvcih7IGVycm9yOiBlcnJvciBhcyBFcnJvciB9KTtcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlKGRldGFpbHMsIG9wdGlvbnMpOiBQcm9taXNlPEVpdGhlcjxBZGFwdGVyRXJyb3IsIEFkYXB0ZXJEZWxldGVSZXN1bHQ+PiB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBxdWVyeSA9IGdldERlbGV0ZVF1ZXJ5KGRldGFpbHMsIG90aGVyUmVxdWlyZW1lbnRzKTtcblxuICAgICAgICAvLyBUT0RPOiB1c2UgcmVzdWx0cyB0b28uXG4gICAgICAgIGNvbnN0IFtlcnJvcl0gPSBhd2FpdCBleGVjdXRvci5leGVjdXRlKHF1ZXJ5LCBvcHRpb25zKTtcblxuICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICByZXR1cm4gY3JlYXRlQWRhcHRlckVycm9yKHsgZXJyb3IsIHF1ZXJ5IH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIFtudWxsLCB7IC4uLmRldGFpbHMsIHF1ZXJ5IH1dO1xuICAgICAgfSBjYXRjaCAoZXJyb3I6IHVua25vd24pIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZUFkYXB0ZXJFcnJvcih7IGVycm9yOiBlcnJvciBhcyBFcnJvciB9KTtcbiAgICAgIH1cbiAgICB9LFxuICB9O1xufVxuXG5mdW5jdGlvbiBjcmVhdGVJbnRyb3NwZWN0aW9uKGFyZ3M6IHtcbiAgdGFibGVzOiBRdWVyeVJlc3VsdDx0eXBlb2YgZ2V0VGFibGVzUXVlcnk+O1xuICB0aW1lem9uZTogc3RyaW5nO1xuICBxdWVyeTogUXVlcnk7XG59KTogQWRhcHRlckludHJvc3BlY3RSZXN1bHQge1xuICBjb25zdCB7IHRhYmxlcywgdGltZXpvbmUsIHF1ZXJ5IH0gPSBhcmdzO1xuXG4gIHJldHVybiB0YWJsZXMucmVkdWNlKFxuICAgIChyZXN1bHQsIHJvdykgPT4ge1xuICAgICAgY29uc3QgeyBzY2hlbWFzIH0gPSByZXN1bHQ7XG4gICAgICBjb25zdCB7IGNvbHVtbnMsIG5hbWU6IHRhYmxlTmFtZSwgc2NoZW1hIH0gPSByb3c7XG5cbiAgICAgIGNvbnN0IGNvbHVtbnNSZWNvcmQgPSBjb2x1bW5zLnJlZHVjZShcbiAgICAgICAgKGNvbHVtbnMsIGNvbHVtbikgPT4ge1xuICAgICAgICAgIGNvbnN0IHsgZGF0YXR5cGUsIGRhdGF0eXBlX3NjaGVtYSwgbmFtZTogY29sdW1uTmFtZSwgb3B0aW9ucywgbnVsbGFibGUgfSA9IGNvbHVtbjtcblxuICAgICAgICAgIGNvbnN0IGlzQXJyYXkgPSBkYXRhdHlwZS5zdGFydHNXaXRoKFwiX1wiKTtcbiAgICAgICAgICBjb25zdCBzdHJpcHBlZERhdGFUeXBlID0gaXNBcnJheSA/IGRhdGF0eXBlLnNsaWNlKDEpIDogZGF0YXR5cGU7XG5cbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgLi4uY29sdW1ucyxcbiAgICAgICAgICAgIFtjb2x1bW5OYW1lXToge1xuICAgICAgICAgICAgICBkYXRhdHlwZToge1xuICAgICAgICAgICAgICAgIC4uLihQT1NUR1JFU1FMX0RBVEFfVFlQRVNfVE9fTUVUQURBVEFbc3RyaXBwZWREYXRhVHlwZV0gfHwge1xuICAgICAgICAgICAgICAgICAgZ3JvdXA6IG9wdGlvbnMubGVuZ3RoID4gMCA/IFwiZW51bVwiIDogXCJyYXdcIixcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICBpc0FycmF5LFxuICAgICAgICAgICAgICAgIGlzTmF0aXZlOiBkYXRhdHlwZV9zY2hlbWEgPT09IFwicGdfY2F0YWxvZ1wiLFxuICAgICAgICAgICAgICAgIG5hbWU6IGlzQXJyYXkgPyBgJHtzdHJpcHBlZERhdGFUeXBlfVtdYCA6IHN0cmlwcGVkRGF0YVR5cGUsXG4gICAgICAgICAgICAgICAgb3B0aW9ucyxcbiAgICAgICAgICAgICAgICBzY2hlbWE6IGRhdGF0eXBlX3NjaGVtYSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgaXNDb21wdXRlZDogY29sdW1uLmNvbXB1dGVkLFxuICAgICAgICAgICAgICBpc0luUHJpbWFyeUtleTogY29sdW1uLnBrLFxuICAgICAgICAgICAgICBuYW1lOiBjb2x1bW5OYW1lLFxuICAgICAgICAgICAgICBudWxsYWJsZSxcbiAgICAgICAgICAgICAgc2NoZW1hLFxuICAgICAgICAgICAgICB0YWJsZTogdGFibGVOYW1lLFxuICAgICAgICAgICAgICBma1NjaGVtYTogY29sdW1uLmZvcmVpZ25fa2V5X3NjaGVtYSxcbiAgICAgICAgICAgICAgZmtUYWJsZTogY29sdW1uLmZvcmVpZ25fa2V5X3RhYmxlLFxuICAgICAgICAgICAgICBma0NvbHVtbjogY29sdW1uLmZvcmVpZ25fa2V5X2NvbHVtbixcbiAgICAgICAgICAgIH0gYXMgY29uc3Qgc2F0aXNmaWVzIENvbHVtbixcbiAgICAgICAgICB9O1xuICAgICAgICB9LFxuICAgICAgICB7fSBhcyBUYWJsZVtcImNvbHVtbnNcIl0sXG4gICAgICApO1xuXG4gICAgICBpZiAoc2NoZW1hc1tzY2hlbWFdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgc2NoZW1hc1tzY2hlbWFdID0ge1xuICAgICAgICAgIG5hbWU6IHNjaGVtYSxcbiAgICAgICAgICB0YWJsZXM6IHt9LFxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICBzY2hlbWFzW3NjaGVtYV0udGFibGVzW3RhYmxlTmFtZV0gPSB7XG4gICAgICAgIGNvbHVtbnM6IGNvbHVtbnNSZWNvcmQsXG4gICAgICAgIG5hbWU6IHRhYmxlTmFtZSxcbiAgICAgICAgc2NoZW1hLFxuICAgICAgfTtcblxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuICAgIHtcbiAgICAgIHNjaGVtYXM6IHsgcHVibGljOiB7IHRhYmxlczoge30sIG5hbWU6IFwicHVibGljXCIgfSB9LFxuICAgICAgdGltZXpvbmUsXG4gICAgICBmaWx0ZXJPcGVyYXRvcnMsXG4gICAgICBxdWVyeSxcbiAgICB9IHNhdGlzZmllcyBBZGFwdGVySW50cm9zcGVjdFJlc3VsdCBhcyBBZGFwdGVySW50cm9zcGVjdFJlc3VsdCxcbiAgKTtcbn1cblxuY29uc3QgZmlsdGVyT3BlcmF0b3JzID0gW1xuICBcIj1cIixcbiAgXCIhPVwiLFxuICBcIj5cIixcbiAgXCI+PVwiLFxuICBcIjxcIixcbiAgXCI8PVwiLFxuICBcImlzXCIsXG4gIFwiaXMgbm90XCIsXG4gIFwibGlrZVwiLFxuICBcIm5vdCBsaWtlXCIsXG4gIFwiaWxpa2VcIixcbiAgXCJub3QgaWxpa2VcIixcbl0gc2F0aXNmaWVzIEZpbHRlck9wZXJhdG9yW107XG5cbi8qKlxuICogRm9yIHRlc3RpbmcgcHVycG9zZXMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtb2NrSW50cm9zcGVjdCgpIHtcbiAgY29uc3QgdGFibGVzID0gbW9ja1RhYmxlc1F1ZXJ5KCk7XG4gIGNvbnN0IFt7IHRpbWV6b25lIH1dID0gbW9ja1RpbWV6b25lUXVlcnkoKTtcbiAgY29uc3QgcXVlcnkgPSB7IHBhcmFtZXRlcnM6IFtdLCBzcWw6IFwiPG1vY2tlZD5cIiB9IGFzIFF1ZXJ5O1xuXG4gIHJldHVybiBjcmVhdGVJbnRyb3NwZWN0aW9uKHsgdGFibGVzLCB0aW1lem9uZSwgcXVlcnkgfSkgYXMge1xuICAgIC8vIGJlc3QgZWZmb3J0LCBubyBuZWVkIGdvIG92ZXJib2FyZC5cbiAgICBzY2hlbWFzOiB7XG4gICAgICBbSyBpbiAodHlwZW9mIHRhYmxlcylbbnVtYmVyXVtcInNjaGVtYVwiXV06IHtcbiAgICAgICAgbmFtZTogSztcbiAgICAgICAgdGFibGVzOiB7XG4gICAgICAgICAgW1QgaW4gKHR5cGVvZiB0YWJsZXMpW251bWJlcl1bXCJuYW1lXCJdXTogVGFibGU7XG4gICAgICAgIH07XG4gICAgICB9O1xuICAgIH07XG4gICAgdGltZXpvbmU6IHR5cGVvZiB0aW1lem9uZTtcbiAgICBmaWx0ZXJPcGVyYXRvcnM6IEZpbHRlck9wZXJhdG9yW107XG4gICAgcXVlcnk6IFF1ZXJ5O1xuICB9IHNhdGlzZmllcyBBZGFwdGVySW50cm9zcGVjdFJlc3VsdDtcbn1cbiIsICJpbXBvcnQgeyBEYXRhVHlwZSB9IGZyb20gXCIuLi9hZGFwdGVyXCI7XG5cbmV4cG9ydCBjb25zdCBQT1NUR1JFU1FMX0RBVEFfVFlQRVNfVE9fTUVUQURBVEE6IFJlY29yZDxzdHJpbmcsIFBpY2s8RGF0YVR5cGUsIFwiZ3JvdXBcIj4+ID0ge1xuICBib29sOiB7XG4gICAgZ3JvdXA6IFwiYm9vbGVhblwiLFxuICB9LFxuICBib29sZWFuOiB7XG4gICAgZ3JvdXA6IFwiYm9vbGVhblwiLFxuICB9LFxuICBieXRlYToge1xuICAgIGdyb3VwOiBcInN0cmluZ1wiLFxuICB9LFxuICBjaGFyOiB7XG4gICAgZ3JvdXA6IFwic3RyaW5nXCIsXG4gIH0sXG4gIGNpdGV4dDoge1xuICAgIGdyb3VwOiBcInN0cmluZ1wiLFxuICB9LFxuICAvKipcbiAgICogQGV4YW1wbGUgJzIwMjUtMDQtMTQnXG4gICAqL1xuICBkYXRlOiB7XG4gICAgZ3JvdXA6IFwiZGF0ZXRpbWVcIixcbiAgfSxcbiAgLyoqXG4gICAqIEBleGFtcGxlICcxIGRheSAyIGhvdXJzJ1xuICAgKi9cbiAgaW50ZXJ2YWw6IHtcbiAgICBncm91cDogXCJzdHJpbmdcIixcbiAgfSxcbiAgbmFtZToge1xuICAgIGdyb3VwOiBcInN0cmluZ1wiLFxuICB9LFxuICB2YXJjaGFyOiB7XG4gICAgZ3JvdXA6IFwic3RyaW5nXCIsXG4gIH0sXG4gIHRleHQ6IHtcbiAgICBncm91cDogXCJzdHJpbmdcIixcbiAgfSxcbiAgLyoqXG4gICAqIHNob3J0IGZvcm0gb2YgYHRpbWUgd2l0aG91dCB0aW1lIHpvbmVgLlxuICAgKlxuICAgKiBAZXhhbXBsZSAnMTQ6MzA6MDAnXG4gICAqL1xuICB0aW1lOiB7XG4gICAgZ3JvdXA6IFwidGltZVwiLFxuICB9LFxuICAvKipcbiAgICogc2hvcnQgZm9ybSBvZiBgdGltZXN0YW1wIHdpdGhvdXQgdGltZSB6b25lYC5cbiAgICpcbiAgICogQGV4YW1wbGUgJzIwMjUtMDQtMTQgMTQ6MzA6MDAnXG4gICAqL1xuICB0aW1lc3RhbXA6IHtcbiAgICBncm91cDogXCJkYXRldGltZVwiLFxuICB9LFxuICAvKipcbiAgICogc2hvcnQgZm9ybSBvZiBgdGltZXN0YW1wIHdpdGggdGltZSB6b25lYC5cbiAgICpcbiAgICogQGV4YW1wbGUgJzIwMjUtMDQtMTQgMTQ6MzA6MDArMDAnXG4gICAqL1xuICB0aW1lc3RhbXB0ejoge1xuICAgIGdyb3VwOiBcImRhdGV0aW1lXCIsXG4gIH0sXG4gIC8qKlxuICAgKiBsb25nIGZvcm0gb2YgYHRpbWVzdGFtcGAuXG4gICAqXG4gICAqIEBleGFtcGxlICcyMDI1LTA0LTE0IDE0OjMwOjAwJ1xuICAgKi9cbiAgXCJ0aW1lc3RhbXAgd2l0aG91dCB0aW1lIHpvbmVcIjoge1xuICAgIGdyb3VwOiBcImRhdGV0aW1lXCIsXG4gIH0sXG4gIC8qKlxuICAgKiBsb25nIGZvcm0gb2YgYHRpbWVzdGFtcHR6YC5cbiAgICpcbiAgICogQGV4YW1wbGUgJzIwMjUtMDQtMTQgMTQ6MzA6MDArMDAnXG4gICAqL1xuICBcInRpbWVzdGFtcCB3aXRoIHRpbWUgem9uZVwiOiB7XG4gICAgZ3JvdXA6IFwiZGF0ZXRpbWVcIixcbiAgfSxcbiAgLyoqXG4gICAqIHNob3J0IGZvcm0gb2YgYHRpbWUgd2l0aCB0aW1lIHpvbmVgLlxuICAgKlxuICAgKiBAZXhhbXBsZSAnMTQ6MzA6MDArMDA6MDAnXG4gICAqL1xuICB0aW1ldHo6IHtcbiAgICBncm91cDogXCJ0aW1lXCIsXG4gIH0sXG4gIC8qKlxuICAgKiBsb25nIGZvcm0gb2YgYHRpbWVgLlxuICAgKlxuICAgKiBAZXhhbXBsZSAnMTQ6MzA6MDAnXG4gICAqL1xuICBcInRpbWUgd2l0aG91dCB0aW1lIHpvbmVcIjoge1xuICAgIGdyb3VwOiBcInRpbWVcIixcbiAgfSxcbiAgLyoqXG4gICAqIGxvbmcgZm9ybSBvZiBgdGltZXR6YC5cbiAgICpcbiAgICogQGV4YW1wbGUgJzIwMjUtMDQtMTQgMTQ6MzA6MDArMDAnXG4gICAqL1xuICBcInRpbWUgd2l0aCB0aW1lIHpvbmVcIjoge1xuICAgIGdyb3VwOiBcImRhdGV0aW1lXCIsXG4gIH0sXG4gIHV1aWQ6IHtcbiAgICAvLyBUT0RPOiBwb3NzaWJseSBjaGFuZ2UgdG8gYW5vdGhlciBncm91cCBsYXRlci5cbiAgICBncm91cDogXCJyYXdcIixcbiAgfSxcbiAgLy8gTnVtZXJpYyB0eXBlc1xuICBpbnQyOiB7XG4gICAgZ3JvdXA6IFwibnVtZXJpY1wiLFxuICB9LFxuICBpbnQ0OiB7XG4gICAgZ3JvdXA6IFwibnVtZXJpY1wiLFxuICB9LFxuICBpbnQ4OiB7XG4gICAgZ3JvdXA6IFwibnVtZXJpY1wiLFxuICB9LFxuICBzbWFsbGludDoge1xuICAgIGdyb3VwOiBcIm51bWVyaWNcIixcbiAgfSxcbiAgaW50ZWdlcjoge1xuICAgIGdyb3VwOiBcIm51bWVyaWNcIixcbiAgfSxcbiAgYmlnaW50OiB7XG4gICAgZ3JvdXA6IFwibnVtZXJpY1wiLFxuICB9LFxuICBkZWNpbWFsOiB7XG4gICAgZ3JvdXA6IFwibnVtZXJpY1wiLFxuICB9LFxuICBudW1lcmljOiB7XG4gICAgZ3JvdXA6IFwibnVtZXJpY1wiLFxuICB9LFxuICByZWFsOiB7XG4gICAgZ3JvdXA6IFwibnVtZXJpY1wiLFxuICB9LFxuICBmbG9hdDQ6IHtcbiAgICBncm91cDogXCJudW1lcmljXCIsXG4gIH0sXG4gIGZsb2F0ODoge1xuICAgIGdyb3VwOiBcIm51bWVyaWNcIixcbiAgfSxcbiAgXCJkb3VibGUgcHJlY2lzaW9uXCI6IHtcbiAgICBncm91cDogXCJudW1lcmljXCIsXG4gIH0sXG4gIGpzb246IHtcbiAgICBncm91cDogXCJqc29uXCIsXG4gIH0sXG4gIGpzb25iOiB7XG4gICAgZ3JvdXA6IFwianNvblwiLFxuICB9LFxufTtcbiIsICJpbXBvcnQgeyB0eXBlIEluZmVyUmVzdWx0LCB0eXBlIFJlZmVyZW5jZUV4cHJlc3Npb24sIHNxbCB9IGZyb20gXCJreXNlbHlcIjtcblxuaW1wb3J0IHR5cGUgeyBBZGFwdGVyRGVsZXRlRGV0YWlscywgQWRhcHRlckluc2VydERldGFpbHMsIEFkYXB0ZXJRdWVyeURldGFpbHMsIEFkYXB0ZXJVcGRhdGVEZXRhaWxzIH0gZnJvbSBcIi4uL2FkYXB0ZXJcIjtcbmltcG9ydCB7XG4gIGFwcGx5SW5mZXJyZWRSb3dGaWx0ZXJzLFxuICBhcHBseVRyYW5zZm9ybWF0aW9ucyxcbiAgdHlwZSBCdWlsZGVyUmVxdWlyZW1lbnRzLFxuICBjb21waWxlLFxuICBnZXRTZWxlY3RGaWx0ZXJFeHByZXNzaW9uLFxufSBmcm9tIFwiLi4vcXVlcnlcIjtcbmltcG9ydCB0eXBlIHsgQmlnSW50U3RyaW5nIH0gZnJvbSBcIi4uL3R5cGUtdXRpbHNcIjtcbmltcG9ydCB7IGdldFBvc3RncmVTUUxCdWlsZGVyIH0gZnJvbSBcIi4vYnVpbGRlclwiO1xuaW1wb3J0IHR5cGUgeyBtb2NrVGFibGVzUXVlcnkgfSBmcm9tIFwiLi9pbnRyb3NwZWN0aW9uXCI7XG5cbi8qKlxuICogSW5zZXJ0cyBvbmUgb3IgbW9yZSByb3dzIGludG8gYSB0YWJsZSBhbmQgcmV0dXJucyB0aGUgaW5zZXJ0ZWQgcm93cyBhbG9uZyB3aXRoIHRoZWlyIGBjdGlkYC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEluc2VydFF1ZXJ5KFxuICBkZXRhaWxzOiBBZGFwdGVySW5zZXJ0RGV0YWlscyxcbiAgcmVxdWlyZW1lbnRzPzogT21pdDxCdWlsZGVyUmVxdWlyZW1lbnRzLCBcIkFkYXB0ZXJcIiB8IFwiUXVlcnlDb21waWxlclwiPixcbikge1xuICBjb25zdCB7XG4gICAgdGFibGU6IHsgbmFtZTogdGFibGVOYW1lLCBzY2hlbWEsIGNvbHVtbnMgfSxcbiAgICByb3dzLFxuICB9ID0gZGV0YWlscztcblxuICBjb25zdCBidWlsZGVyID0gZ2V0UG9zdGdyZVNRTEJ1aWxkZXI8UmVjb3JkPHN0cmluZywgUmVjb3JkPHN0cmluZywgdW5rbm93bj4+PihyZXF1aXJlbWVudHMpO1xuXG4gIHJldHVybiBjb21waWxlKFxuICAgIGJ1aWxkZXJcbiAgICAgIC53aXRoU2NoZW1hKHNjaGVtYSlcbiAgICAgIC5pbnNlcnRJbnRvKHRhYmxlTmFtZSlcbiAgICAgIC52YWx1ZXMoYXBwbHlUcmFuc2Zvcm1hdGlvbnMoXCJpbnNlcnRcIiwgcm93cywgY29sdW1ucykpXG4gICAgICAucmV0dXJuaW5nKE9iamVjdC5rZXlzKGNvbHVtbnMpKSxcbiAgKTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGEgcXVlcnkgdGhhdCBzZWxlY3RzIGFsbCBjb2x1bW5zIGZyb20gYSB0YWJsZSwgYWxvbmcgd2l0aCBhbiB1bmJvdW5kIHJvdyBjb3VudCBhcyBgX19wc19jb3VudF9fYC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFNlbGVjdFF1ZXJ5KFxuICBkZXRhaWxzOiBBZGFwdGVyUXVlcnlEZXRhaWxzLFxuICByZXF1aXJlbWVudHM/OiBPbWl0PEJ1aWxkZXJSZXF1aXJlbWVudHMsIFwiQWRhcHRlclwiIHwgXCJRdWVyeUNvbXBpbGVyXCI+LFxuKSB7XG4gIGNvbnN0IHtcbiAgICBwYWdlSW5kZXgsXG4gICAgcGFnZVNpemUsXG4gICAgc29ydE9yZGVyLFxuICAgIHRhYmxlOiB7IG5hbWU6IHRhYmxlTmFtZSwgc2NoZW1hLCBjb2x1bW5zIH0sXG4gICAgZmlsdGVyID0geyBraW5kOiBcIkZpbHRlckdyb3VwXCIsIGFmdGVyOiBcImFuZFwiLCBmaWx0ZXJzOiBbXSB9LFxuICB9ID0gZGV0YWlscztcblxuICBjb25zdCBidWlsZGVyID0gZ2V0UG9zdGdyZVNRTEJ1aWxkZXI8UmVjb3JkPHN0cmluZywgUmVjb3JkPHN0cmluZywgdW5rbm93bj4+PihyZXF1aXJlbWVudHMpO1xuXG4gIGNvbnN0IGZpbHRlckV4cHJlc3Npb24gPSBnZXRTZWxlY3RGaWx0ZXJFeHByZXNzaW9uKGZpbHRlci5maWx0ZXJzLCBjb2x1bW5zKTtcblxuICBjb25zdCBjb3VudFF1ZXJ5ID0gYnVpbGRlclxuICAgIC53aXRoU2NoZW1hKHNjaGVtYSlcbiAgICAuc2VsZWN0RnJvbSh0YWJsZU5hbWUpXG4gICAgLndoZXJlKGZpbHRlckV4cHJlc3Npb24pXG4gICAgLnNlbGVjdCgoZWIpID0+IGViLmNhc3Q8QmlnSW50U3RyaW5nPihlYi5mbi5jb2FsZXNjZShlYi5mbi5jb3VudEFsbCgpLCBzcWwubGl0KDApKSwgXCJ0ZXh0XCIpLmFzKFwidmFsdWVcIikpO1xuXG4gIHJldHVybiBjb21waWxlKFxuICAgIGJ1aWxkZXJcbiAgICAgIC53aXRoKFwiY291bnRcIiwgKCkgPT4gY291bnRRdWVyeSlcbiAgICAgIC53aXRoU2NoZW1hKHNjaGVtYSlcbiAgICAgIC5zZWxlY3RGcm9tKFt0YWJsZU5hbWUsIFwiY291bnRcIl0pXG4gICAgICAvLyBUT0RPOiBjdXJzb3IgcGFnaW5hdGlvbj9cbiAgICAgIC53aGVyZShmaWx0ZXJFeHByZXNzaW9uKVxuICAgICAgLnNlbGVjdChcbiAgICAgICAgc3FsXG4gICAgICAgICAgLnJlZjxCaWdJbnRTdHJpbmc+KFxuICAgICAgICAgICAgXCJjb3VudC52YWx1ZVwiIHNhdGlzZmllcyBSZWZlcmVuY2VFeHByZXNzaW9uPHsgY291bnQ6IEluZmVyUmVzdWx0PHR5cGVvZiBjb3VudFF1ZXJ5PltudW1iZXJdIH0sIFwiY291bnRcIj4sXG4gICAgICAgICAgKVxuICAgICAgICAgIC5hcyhcIl9fcHNfY291bnRfX1wiKSxcbiAgICAgIClcbiAgICAgIC5zZWxlY3QoT2JqZWN0LmtleXMoY29sdW1ucykpXG4gICAgICAuJGNhbGwoKHFiKSA9PiBzb3J0T3JkZXIucmVkdWNlKChxYiwgaXRlbSkgPT4gcWIub3JkZXJCeShpdGVtLmNvbHVtbiwgaXRlbS5kaXJlY3Rpb24pLCBxYikpXG4gICAgICAubGltaXQocGFnZVNpemUpXG4gICAgICAvLyB3ZSdyZSBpbmplY3RpbmcgdGhlIG9mZnNldCB2YWx1ZSBoZXJlIHRvIGF2b2lkIHNlcmlhbGl6YXRpb24gY29tcGxleGl0eSAoYGJpZ2ludGAgaXMgYSBuby1nbyBmb3IgYEpTT04uc3RyaW5naWZ5YCkuXG4gICAgICAub2Zmc2V0KHNxbC5saXQoQmlnSW50KHBhZ2VJbmRleCkgKiBCaWdJbnQocGFnZVNpemUpKSksXG4gICk7XG59XG5cbi8qKlxuICogRm9yIHRlc3RpbmcgcHVycG9zZXMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtb2NrU2VsZWN0UXVlcnkoKSB7XG4gIHJldHVybiBbXG4gICAge1xuICAgICAgY3JlYXRlZF9hdDogbmV3IERhdGUoXCIyMDI1LTAxLTI2VDIxOjU2OjEyLjM0NVpcIiksXG4gICAgICBkZWxldGVkX2F0OiBudWxsLFxuICAgICAgaWQ6IDEsXG4gICAgICBuYW1lOiBcIkpvaG4gRG9lXCIsXG4gICAgICBfX3BzX2NvdW50X186IFwiMlwiLFxuICAgICAgcm9sZTogXCJhZG1pblwiLFxuICAgICAgbmFtZV9yb2xlOiBcIkpvbm4gRG9lIC0gYWRtaW5cIixcbiAgICB9LFxuICAgIHtcbiAgICAgIGNyZWF0ZWRfYXQ6IG5ldyBEYXRlKFwiMjAyNS0wMS0yNlQyMDo1NjoxMi4zNDVaXCIpLFxuICAgICAgZGVsZXRlZF9hdDogbnVsbCxcbiAgICAgIGlkOiAyLFxuICAgICAgbmFtZTogXCJKYW5lIERvZVwiLFxuICAgICAgX19wc19jb3VudF9fOiBcIjJcIixcbiAgICAgIHJvbGU6IFwicG93ZXJ1c2VyXCIsXG4gICAgICBuYW1lX3JvbGU6IFwiSmFuZSBEb2UgLSBwb3dlcnVzZXJcIixcbiAgICB9LFxuICBdIGFzIGNvbnN0IHNhdGlzZmllcyB7XG4gICAgLy8gYmVzdCBlZmZvcnQgbm8gbmVlZCB0byBnbyBvdmVyYm9hcmRcbiAgICBbSyBpbiBSZXR1cm5UeXBlPHR5cGVvZiBtb2NrVGFibGVzUXVlcnk+WzFdW1wiY29sdW1uc1wiXVtudW1iZXJdW1wibmFtZVwiXSB8IFwiX19wc19jb3VudF9fXCJdOiB1bmtub3duO1xuICB9W107XG59XG5cbi8qKlxuICogUmV0dXJucyBhIHF1ZXJ5IHRoYXQgdXBkYXRlcyBhIGdpdmVuIHJvdyBpbiBhIHRhYmxlIHdpdGggZ2l2ZW4gY2hhbmdlcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFVwZGF0ZVF1ZXJ5KFxuICBkZXRhaWxzOiBBZGFwdGVyVXBkYXRlRGV0YWlscyxcbiAgcmVxdWlyZW1lbnRzPzogT21pdDxCdWlsZGVyUmVxdWlyZW1lbnRzLCBcIkFkYXB0ZXJcIiB8IFwiUXVlcnlDb21waWxlclwiPixcbikge1xuICBjb25zdCB7XG4gICAgY2hhbmdlcyxcbiAgICByb3csXG4gICAgdGFibGU6IHsgY29sdW1ucywgbmFtZTogdGFibGVOYW1lLCBzY2hlbWEgfSxcbiAgfSA9IGRldGFpbHM7XG5cbiAgY29uc3QgYnVpbGRlciA9IGdldFBvc3RncmVTUUxCdWlsZGVyPFJlY29yZDxzdHJpbmcsIFJlY29yZDxzdHJpbmcsIHVua25vd24+Pj4ocmVxdWlyZW1lbnRzKTtcbiAgY29uc3QgY29scyA9IE9iamVjdC5rZXlzKGNvbHVtbnMpO1xuXG4gIHJldHVybiBjb21waWxlKFxuICAgIGJ1aWxkZXJcbiAgICAgIC53aXRoU2NoZW1hKHNjaGVtYSlcbiAgICAgIC51cGRhdGVUYWJsZSh0YWJsZU5hbWUpXG4gICAgICAuc2V0KGFwcGx5VHJhbnNmb3JtYXRpb25zKFwidXBkYXRlXCIsIGNoYW5nZXMsIGNvbHVtbnMpKVxuICAgICAgLiRjYWxsKGFwcGx5SW5mZXJyZWRSb3dGaWx0ZXJzKFtyb3ddLCBjb2x1bW5zKSlcbiAgICAgIC5yZXR1cm5pbmcoY29scylcbiAgICAgIC5yZXR1cm5pbmcoKGViKSA9PlxuICAgICAgICBlYlxuICAgICAgICAgIC5jYXN0PEJpZ0ludFN0cmluZz4oZWIuZm4oXCJmbG9vclwiLCBbZWIoZWIuZm4oXCJleHRyYWN0XCIsIFtzcWxgZXBvY2ggZnJvbSBub3coKWBdKSwgXCIqXCIsIDFfMDAwXzAwMCldKSwgXCJ0ZXh0XCIpXG4gICAgICAgICAgLmFzKFwiX19wc191cGRhdGVkX2F0X19cIiksXG4gICAgICApLFxuICApO1xufVxuXG4vKipcbiAqIFJldHVybnMgYSBxdWVyeSB0aGF0IGRlbGV0ZXMgYSBnaXZlbiBzZXQgb2Ygcm93cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldERlbGV0ZVF1ZXJ5KFxuICBkZXRhaWxzOiBBZGFwdGVyRGVsZXRlRGV0YWlscyxcbiAgcmVxdWlyZW1lbnRzPzogT21pdDxCdWlsZGVyUmVxdWlyZW1lbnRzLCBcIkFkYXB0ZXJcIiB8IFwiUXVlcnlDb21waWxlclwiPixcbikge1xuICBjb25zdCB7XG4gICAgcm93cyxcbiAgICB0YWJsZTogeyBjb2x1bW5zLCBuYW1lOiB0YWJsZU5hbWUsIHNjaGVtYSB9LFxuICB9ID0gZGV0YWlscztcblxuICBjb25zdCBidWlsZGVyID0gZ2V0UG9zdGdyZVNRTEJ1aWxkZXI8UmVjb3JkPHN0cmluZywgUmVjb3JkPHN0cmluZywgdW5rbm93bj4+PihyZXF1aXJlbWVudHMpO1xuXG4gIHJldHVybiBjb21waWxlKFxuICAgIGJ1aWxkZXJcbiAgICAgIC53aXRoU2NoZW1hKHNjaGVtYSlcbiAgICAgIC5kZWxldGVGcm9tKHRhYmxlTmFtZSlcbiAgICAgIC4kY2FsbChhcHBseUluZmVycmVkUm93RmlsdGVycyhyb3dzLCBjb2x1bW5zKSlcbiAgICAgIC5yZXR1cm5pbmcoT2JqZWN0LmtleXMoY29sdW1ucykpXG4gICAgICAucmV0dXJuaW5nKChlYikgPT5cbiAgICAgICAgZWJcbiAgICAgICAgICAuY2FzdDxCaWdJbnRTdHJpbmc+KGViLmZuKFwiZmxvb3JcIiwgW2ViKGViLmZuKFwiZXh0cmFjdFwiLCBbc3FsYGVwb2NoIGZyb20gbm93KClgXSksIFwiKlwiLCAxXzAwMF8wMDApXSksIFwidGV4dFwiKVxuICAgICAgICAgIC5hcyhcIl9fcHNfZGVsZXRlZF9hdF9fXCIpLFxuICAgICAgKSxcbiAgKTtcbn1cbiIsICJpbXBvcnQgeyB0eXBlIEt5c2VseSwgUG9zdGdyZXNBZGFwdGVyLCBQb3N0Z3Jlc1F1ZXJ5Q29tcGlsZXIgfSBmcm9tIFwia3lzZWx5XCI7XG5cbmltcG9ydCB7IHR5cGUgQnVpbGRlclJlcXVpcmVtZW50cywgZ2V0QnVpbGRlciB9IGZyb20gXCIuLi9xdWVyeVwiO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuZXhwb3J0IGZ1bmN0aW9uIGdldFBvc3RncmVTUUxCdWlsZGVyPERhdGFiYXNlID0gYW55PihcbiAgcmVxdWlyZW1lbnRzPzogT21pdDxCdWlsZGVyUmVxdWlyZW1lbnRzLCBcIkFkYXB0ZXJcIiB8IFwiUXVlcnlDb21waWxlclwiPixcbik6IEt5c2VseTxEYXRhYmFzZT4ge1xuICByZXR1cm4gZ2V0QnVpbGRlcih7IC4uLnJlcXVpcmVtZW50cywgQWRhcHRlcjogUG9zdGdyZXNBZGFwdGVyLCBRdWVyeUNvbXBpbGVyOiBQb3N0Z3Jlc1F1ZXJ5Q29tcGlsZXIgfSk7XG59XG4iLCAiaW1wb3J0IHsgdHlwZSBTZWxlY3RRdWVyeUJ1aWxkZXIsIHNxbCB9IGZyb20gXCJreXNlbHlcIjtcbmltcG9ydCB7IGpzb25BcnJheUZyb20gfSBmcm9tIFwia3lzZWx5L2hlbHBlcnMvcG9zdGdyZXNcIjtcblxuaW1wb3J0IHsgdHlwZSBCdWlsZGVyUmVxdWlyZW1lbnRzLCBjb21waWxlLCB0eXBlIFF1ZXJ5UmVzdWx0IH0gZnJvbSBcIi4uL3F1ZXJ5XCI7XG5pbXBvcnQgeyBnZXRQb3N0Z3JlU1FMQnVpbGRlciB9IGZyb20gXCIuL2J1aWxkZXJcIjtcblxuY29uc3QgUkVHVUxBUl9UQUJMRV9LSU5EID0gXCJyXCI7XG5jb25zdCBWSUVXX1RBQkxFX0tJTkQgPSBcInZcIjtcbmNvbnN0IFRBQkxFX0tJTkRTID0gW1JFR1VMQVJfVEFCTEVfS0lORCwgVklFV19UQUJMRV9LSU5EXSBhcyBjb25zdDtcbnR5cGUgVGFibGVLaW5kID0gKHR5cGVvZiBUQUJMRV9LSU5EUylbbnVtYmVyXTtcblxuaW50ZXJmYWNlIERhdGFiYXNlIHtcbiAgLyoqIGNvbHVtbnMgKi9cbiAgXCJwZ19jYXRhbG9nLnBnX2F0dHJpYnV0ZVwiOiB7XG4gICAgLyoqIGNvbHVtbiBvcmRlciBudW1iZXIgaW4gaXRzIHRhYmxlICovXG4gICAgYXR0bnVtOiBudW1iZXI7XG4gICAgLyoqIHRhYmxlL3ZpZXcgaWRlbnRpZmllciAqL1xuICAgIGF0dHJlbGlkOiBzdHJpbmc7XG4gICAgLyoqIGNvbHVtbiBuYW1lICovXG4gICAgYXR0bmFtZTogc3RyaW5nO1xuICAgIC8qKiB3YXMgdGhlIGNvbHVtbiBkcm9wcGVkLiBkcm9wcGVkIGNvbHVtbnMgbWlnaHQgbm90IGJlIDEwMCUgcmVtb3ZlZCBpbW1lZGlhdGVseS4gKi9cbiAgICBhdHRpc2Ryb3BwZWQ6IGJvb2xlYW47XG4gICAgLyoqIGNvbHVtbiBkYXRhdHlwZSBpZGVudGlmaWVyICovXG4gICAgYXR0dHlwaWQ6IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBnZW5lcmF0aW9uIGZsYWcgZm9yIGNvbXB1dGVkIGNvbHVtbnM6XG4gICAgICogJycgKGVtcHR5KSBmb3IgcmVndWxhciBjb2x1bW5zLFxuICAgICAqICdzJyBmb3IgU1RPUkVEIGdlbmVyYXRlZCBjb2x1bW5zIChQb3N0Z3JlcyBHRU5FUkFURUQgQUxXQVlTIEFTKS5cbiAgICAgKi9cbiAgICBhdHRnZW5lcmF0ZWQ6IFwiXCIgfCBcInNcIjtcbiAgICAvKiogTk9UIE5VTEwgY29uc3RyYWludDogdHJ1ZSBpZiB0aGUgY29sdW1uIGhhcyBhIE5PVCBOVUxMIGNvbnN0cmFpbnQgKi9cbiAgICBhdHRub3RudWxsOiBib29sZWFuO1xuICB9O1xuICAvKiogcmVzb3VyY2VzLCBlLmcuIHRhYmxlcywgc2VxdWVuY2VzLCBldGMuICovXG4gIFwicGdfY2F0YWxvZy5wZ19jbGFzc1wiOiB7XG4gICAgLyoqIHJlc291cmNlIGlkICovXG4gICAgb2lkOiBudW1iZXI7XG4gICAgLyoqIHJlc291cmNlIG5hbWUgKi9cbiAgICByZWxuYW1lOiBzdHJpbmc7XG4gICAgLyoqIHNjaGVtYSBpZCAqL1xuICAgIHJlbG5hbWVzcGFjZTogbnVtYmVyO1xuICAgIC8qKiByZXNvdXJjZSBraW5kOiByZWd1bGFyIHRhYmxlLCB2aWV3ICovXG4gICAgcmVsa2luZDogVGFibGVLaW5kO1xuICB9O1xuICAvKiogZW51bSB0eXBlcycgdmFsdWVzICovXG4gIFwicGdfY2F0YWxvZy5wZ19lbnVtXCI6IHtcbiAgICAvKiogZW51bSB2YWx1ZSAqL1xuICAgIGVudW1sYWJlbDogc3RyaW5nO1xuICAgIC8qKiBlbnVtJ3MgdHlwZSBpZCAqL1xuICAgIGVudW10eXBpZDogbnVtYmVyO1xuICB9O1xuICAvKiogc2NoZW1hcyAqL1xuICBcInBnX2NhdGFsb2cucGdfbmFtZXNwYWNlXCI6IHtcbiAgICAvKiogc2NoZW1hIG5hbWUgKi9cbiAgICBuc3BuYW1lOiBzdHJpbmc7XG4gICAgLyoqIHNjaGVtYSBpZCAqL1xuICAgIG9pZDogbnVtYmVyO1xuICB9O1xuICAvKiogZGF0YXR5cGVzICovXG4gIFwicGdfY2F0YWxvZy5wZ190eXBlXCI6IHtcbiAgICAvKiogdHlwZSBpZCAqL1xuICAgIG9pZDogbnVtYmVyO1xuICAgIC8qKiB0eXBlIG5hbWUgKi9cbiAgICB0eXBuYW1lOiBzdHJpbmc7XG4gICAgLyoqIHR5cGUncyBzY2hlbWEgKGFrYSBuYW1lc3BhY2UpIGlkICovXG4gICAgdHlwbmFtZXNwYWNlOiBudW1iZXI7XG4gICAgLyoqXG4gICAgICogdHlwZSdzIGtpbmRcbiAgICAgKlxuICAgICAqICdlJyAtIGVudW0gdHlwZVxuICAgICAqL1xuICAgIHR5cHR5cGU6IFwiZVwiIHwgKHN0cmluZyAmIHt9KTtcbiAgfTtcbiAgLyoqIGNvbnN0cmFpbnRzICovXG4gIFwicGdfY2F0YWxvZy5wZ19jb25zdHJhaW50XCI6IHtcbiAgICAvKiogcmVsYXRpb24gKHRhYmxlKSBpZCB3aGljaCB0aGlzIGNvbnN0cmFpbnQgd2FzIGNyZWF0ZWQgZm9yICovXG4gICAgY29ucmVsaWQ6IG51bWJlcjtcbiAgICAvKipcbiAgICAgKiBjb25zdHJhaW50IHR5cGUuXG4gICAgICpcbiAgICAgKiBgJ3AnYCAtIHByaW1hcnkga2V5IGNvbnN0cmFpbnQuXG4gICAgICogYCdmJ2AgLSBmb3JlaWduIGtleSBjb25zdHJhaW50LlxuICAgICAqL1xuICAgIGNvbnR5cGU6IFwicFwiIHwgXCJmXCIgfCAoc3RyaW5nICYge30pO1xuICAgIC8qKlxuICAgICAqIGFuIG9yZGVyZWQgYXJyYXkgb2YgY29sdW1ucyBpbmNsdWRlZCBpbiB0aGUgY29uc3RyYWludC5cbiAgICAgKlxuICAgICAqIHRoZSBjb2x1bW5zIGFyZSByZXByZXNlbnRlZCBieSB0aGVpciBvcmRpbmFsIG51bWJlciAoYGF0dG51bWApIGluIHRoZWlyIHJlbGF0aW9uICh0YWJsZSkuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZSBgJ3sxLDN9J2AgLSBhIGNvbnN0cmFpbnQgd2l0aCAyIGNvbHVtbnMsIHRoZSAxc3QgJiAzcmQgaW4gdGhlaXIgdGFibGUuXG4gICAgICovXG4gICAgY29ua2V5OiBudW1iZXJbXTtcbiAgICAvKiogaWYgYSBmb3JlaWduIGtleSwgdGhlIHJlZmVyZW5jZWQgdGFibGUgKi9cbiAgICBjb25mcmVsaWQ6IG51bWJlcjtcbiAgICAvKiogaWYgYSBmb3JlaWduIGtleSwgdGhlIHJlZmVyZW5jZWQgY29sdW1ucyAqL1xuICAgIGNvbmZrZXk6IG51bWJlcltdO1xuICB9O1xufVxuXG4vKipcbiAqIFJldHVybnMgYSBxdWVyeSB0aGF0IHJldHVybnMgbWV0YWRhdGEgZm9yIGFsbCB1c2VyLWRlZmluZWQgdGFibGVzIGFuZCB2aWV3cyBpbiB0aGUgZGF0YWJhc2UuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRUYWJsZXNRdWVyeShyZXF1aXJlbWVudHM/OiBPbWl0PEJ1aWxkZXJSZXF1aXJlbWVudHMsIFwiQWRhcHRlclwiIHwgXCJRdWVyeUNvbXBpbGVyXCI+KSB7XG4gIHJldHVybiBjb21waWxlKFxuICAgIGdldFBvc3RncmVTUUxCdWlsZGVyPERhdGFiYXNlPihyZXF1aXJlbWVudHMpXG4gICAgICAuc2VsZWN0RnJvbShcInBnX2NhdGFsb2cucGdfY2xhc3MgYXMgY2xzXCIpXG4gICAgICAuaW5uZXJKb2luKFwicGdfY2F0YWxvZy5wZ19uYW1lc3BhY2UgYXMgbnNcIiwgXCJjbHMucmVsbmFtZXNwYWNlXCIsIFwibnMub2lkXCIpXG4gICAgICAuJGNhbGwoZXhjbHVkZVN5c3RlbVRhYmxlcylcbiAgICAgIC8vIHJlZ3VsYXIgdGFibGVzIG9yIHZpZXdzXG4gICAgICAud2hlcmUoXCJjbHMucmVsa2luZFwiLCBcImluXCIsIFRBQkxFX0tJTkRTKVxuICAgICAgLnNlbGVjdCgoZWIpID0+IFtcbiAgICAgICAgXCJucy5uc3BuYW1lIGFzIHNjaGVtYVwiLFxuICAgICAgICBcImNscy5yZWxuYW1lIGFzIG5hbWVcIixcbiAgICAgICAganNvbkFycmF5RnJvbShcbiAgICAgICAgICBlYlxuICAgICAgICAgICAgLnNlbGVjdEZyb20oXCJwZ19jYXRhbG9nLnBnX2F0dHJpYnV0ZSBhcyBhdHRcIilcbiAgICAgICAgICAgIC5pbm5lckpvaW4oXCJwZ19jYXRhbG9nLnBnX3R5cGUgYXMgdHlwXCIsIFwidHlwLm9pZFwiLCBcImF0dC5hdHR0eXBpZFwiKVxuICAgICAgICAgICAgLmlubmVySm9pbihcInBnX2NhdGFsb2cucGdfbmFtZXNwYWNlIGFzIHRuc1wiLCBcInRucy5vaWRcIiwgXCJ0eXAudHlwbmFtZXNwYWNlXCIpXG4gICAgICAgICAgICAubGVmdEpvaW4oXCJwZ19jYXRhbG9nLnBnX2NvbnN0cmFpbnQgYXMgcGtfY29uXCIsIChqYikgPT5cbiAgICAgICAgICAgICAgamJcbiAgICAgICAgICAgICAgICAub24oXCJwa19jb24uY29udHlwZVwiLCBcIj1cIiwgXCJwXCIpXG4gICAgICAgICAgICAgICAgLm9uUmVmKFwicGtfY29uLmNvbnJlbGlkXCIsIFwiPVwiLCBcImNscy5vaWRcIilcbiAgICAgICAgICAgICAgICAub24oKGViKSA9PiBlYihcImF0dC5hdHRudW1cIiwgXCI9XCIsIGViLmZuLmFueShcInBrX2Nvbi5jb25rZXlcIikpKSxcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5sZWZ0Sm9pbihcInBnX2NhdGFsb2cucGdfY29uc3RyYWludCBhcyBma19jb25cIiwgKGpiKSA9PlxuICAgICAgICAgICAgICBqYlxuICAgICAgICAgICAgICAgIC5vbihcImZrX2Nvbi5jb250eXBlXCIsIFwiPVwiLCBcImZcIilcbiAgICAgICAgICAgICAgICAub25SZWYoXCJma19jb24uY29ucmVsaWRcIiwgXCI9XCIsIFwiY2xzLm9pZFwiKVxuICAgICAgICAgICAgICAgIC5vbigoZWIpID0+IGViKFwiYXR0LmF0dG51bVwiLCBcIj1cIiwgZWIuZm4uYW55KFwiZmtfY29uLmNvbmtleVwiKSkpLFxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLmxlZnRKb2luKFwicGdfY2F0YWxvZy5wZ19jbGFzcyBhcyBma19jbHNcIiwgXCJma19jbHMub2lkXCIsIFwiZmtfY29uLmNvbmZyZWxpZFwiKVxuICAgICAgICAgICAgLmxlZnRKb2luKFwicGdfY2F0YWxvZy5wZ19uYW1lc3BhY2UgYXMgZmtfbnNcIiwgXCJma19ucy5vaWRcIiwgXCJma19jbHMucmVsbmFtZXNwYWNlXCIpXG4gICAgICAgICAgICAubGVmdEpvaW4oXCJwZ19jYXRhbG9nLnBnX2F0dHJpYnV0ZSBhcyBma19hdHRcIiwgKGpiKSA9PlxuICAgICAgICAgICAgICBqYlxuICAgICAgICAgICAgICAgIC5vblJlZihcImZrX2F0dC5hdHRyZWxpZFwiLCBcIj1cIiwgXCJma19jbHMub2lkXCIpXG4gICAgICAgICAgICAgICAgLy8gVXNlIGEgY2FsbGJhY2sgZm9yIHRoZSAub24oKSBjb25kaXRpb24gdG8gZW5zdXJlIGNvcnJlY3QgY29udGV4dCBmb3IgdHlwZXNcbiAgICAgICAgICAgICAgICAub24oKG9uX2ViKSA9PiBvbl9lYihcImZrX2F0dC5hdHRudW1cIiwgXCI9XCIsIG9uX2ViLmZuLmFueShcImZrX2Nvbi5jb25ma2V5XCIpKSksXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAud2hlcmVSZWYoXCJhdHQuYXR0cmVsaWRcIiwgXCI9XCIsIFwiY2xzLm9pZFwiKVxuICAgICAgICAgICAgLy8gZXhjbHVkZSBzeXN0ZW0gY29sdW1uc1xuICAgICAgICAgICAgLndoZXJlKFwiYXR0LmF0dG51bVwiLCBcIj49XCIsIDApXG4gICAgICAgICAgICAud2hlcmUoXCJhdHQuYXR0aXNkcm9wcGVkXCIsIFwiIT1cIiwgdHJ1ZSlcbiAgICAgICAgICAgIC5zZWxlY3QoW1xuICAgICAgICAgICAgICBcImF0dC5hdHRuYW1lIGFzIG5hbWVcIixcbiAgICAgICAgICAgICAgXCJ0eXAudHlwbmFtZSBhcyBkYXRhdHlwZVwiLFxuICAgICAgICAgICAgICBcInRucy5uc3BuYW1lIGFzIGRhdGF0eXBlX3NjaGVtYVwiLFxuICAgICAgICAgICAgICBcImZrX25zLm5zcG5hbWUgYXMgZm9yZWlnbl9rZXlfc2NoZW1hXCIsXG4gICAgICAgICAgICAgIFwiZmtfY2xzLnJlbG5hbWUgYXMgZm9yZWlnbl9rZXlfdGFibGVcIixcbiAgICAgICAgICAgICAgXCJma19hdHQuYXR0bmFtZSBhcyBmb3JlaWduX2tleV9jb2x1bW5cIixcbiAgICAgICAgICAgIF0pXG4gICAgICAgICAgICAuc2VsZWN0KChlYikgPT4gW1xuICAgICAgICAgICAgICBlYihcInBrX2Nvbi5jb25rZXlcIiwgXCJpcyBub3RcIiwgbnVsbCkuJGNhc3RUbzxib29sZWFuPigpLmFzKFwicGtcIiksXG4gICAgICAgICAgICAgIGViKFwiYXR0LmF0dGdlbmVyYXRlZFwiLCBcIiE9XCIsIFwiXCIpLiRjYXN0VG88Ym9vbGVhbj4oKS5hcyhcImNvbXB1dGVkXCIpLFxuICAgICAgICAgICAgICBlYihcImF0dC5hdHRub3RudWxsXCIsIFwiIT1cIiwgdHJ1ZSkuJGNhc3RUbzxib29sZWFuPigpLmFzKFwibnVsbGFibGVcIiksXG4gICAgICAgICAgICAgIGViLmZuXG4gICAgICAgICAgICAgICAgLmNvYWxlc2NlKFxuICAgICAgICAgICAgICAgICAgZWJcbiAgICAgICAgICAgICAgICAgICAgLnNlbGVjdEZyb20oXCJwZ19jYXRhbG9nLnBnX2VudW0gYXMgZW5tXCIpXG4gICAgICAgICAgICAgICAgICAgIC53aGVyZVJlZihcImVubS5lbnVtdHlwaWRcIiwgXCI9XCIsIFwidHlwLm9pZFwiKVxuICAgICAgICAgICAgICAgICAgICAuc2VsZWN0KChlYikgPT4gZWIuZm4uanNvbkFnZyhlYi5yZWYoXCJlbm0uZW51bWxhYmVsXCIpKS5hcyhcIm9cIikpLFxuICAgICAgICAgICAgICAgICAgc3FsPHN0cmluZ1tdPmAnW10nYCxcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgLmFzKFwib3B0aW9uc1wiKSxcbiAgICAgICAgICAgIF0pLFxuICAgICAgICApLmFzKFwiY29sdW1uc1wiKSxcbiAgICAgIF0pLFxuICApO1xufVxuXG4vKipcbiAqIEZvciB0ZXN0aW5nIHB1cnBvc2VzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gbW9ja1RhYmxlc1F1ZXJ5KCkge1xuICByZXR1cm4gW1xuICAgIHtcbiAgICAgIHNjaGVtYTogXCJ6b29cIixcbiAgICAgIG5hbWU6IFwiYW5pbWFsc1wiLFxuICAgICAgY29sdW1uczogW1xuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogXCJpZFwiLFxuICAgICAgICAgIGRhdGF0eXBlOiBcImludDRcIixcbiAgICAgICAgICBkYXRhdHlwZV9zY2hlbWE6IFwicGdfY2F0YWxvZ1wiLFxuICAgICAgICAgIHBrOiB0cnVlLFxuICAgICAgICAgIGNvbXB1dGVkOiBmYWxzZSxcbiAgICAgICAgICBvcHRpb25zOiBbXSxcbiAgICAgICAgICBudWxsYWJsZTogZmFsc2UsXG4gICAgICAgICAgZm9yZWlnbl9rZXlfc2NoZW1hOiBudWxsLFxuICAgICAgICAgIGZvcmVpZ25fa2V5X3RhYmxlOiBudWxsLFxuICAgICAgICAgIGZvcmVpZ25fa2V5X2NvbHVtbjogbnVsbCxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6IFwibmFtZVwiLFxuICAgICAgICAgIGRhdGF0eXBlOiBcInRleHRcIixcbiAgICAgICAgICBkYXRhdHlwZV9zY2hlbWE6IFwicGdfY2F0YWxvZ1wiLFxuICAgICAgICAgIHBrOiBmYWxzZSxcbiAgICAgICAgICBjb21wdXRlZDogZmFsc2UsXG4gICAgICAgICAgb3B0aW9uczogW10sXG4gICAgICAgICAgbnVsbGFibGU6IHRydWUsXG4gICAgICAgICAgZm9yZWlnbl9rZXlfc2NoZW1hOiBudWxsLFxuICAgICAgICAgIGZvcmVpZ25fa2V5X3RhYmxlOiBudWxsLFxuICAgICAgICAgIGZvcmVpZ25fa2V5X2NvbHVtbjogbnVsbCxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfSxcbiAgICB7XG4gICAgICBzY2hlbWE6IFwicHVibGljXCIsXG4gICAgICBuYW1lOiBcInVzZXJzXCIsXG4gICAgICBjb2x1bW5zOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiBcImlkXCIsXG4gICAgICAgICAgZGF0YXR5cGU6IFwiaW50NFwiLFxuICAgICAgICAgIGRhdGF0eXBlX3NjaGVtYTogXCJwZ19jYXRhbG9nXCIsXG4gICAgICAgICAgcGs6IHRydWUsXG4gICAgICAgICAgY29tcHV0ZWQ6IGZhbHNlLFxuICAgICAgICAgIG9wdGlvbnM6IFtdLFxuICAgICAgICAgIG51bGxhYmxlOiBmYWxzZSxcbiAgICAgICAgICBmb3JlaWduX2tleV9zY2hlbWE6IG51bGwsXG4gICAgICAgICAgZm9yZWlnbl9rZXlfdGFibGU6IG51bGwsXG4gICAgICAgICAgZm9yZWlnbl9rZXlfY29sdW1uOiBudWxsLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogXCJjcmVhdGVkX2F0XCIsXG4gICAgICAgICAgZGF0YXR5cGU6IFwidGltZXN0YW1wXCIsXG4gICAgICAgICAgZGF0YXR5cGVfc2NoZW1hOiBcInBnX2NhdGFsb2dcIixcbiAgICAgICAgICBwazogZmFsc2UsXG4gICAgICAgICAgY29tcHV0ZWQ6IGZhbHNlLFxuICAgICAgICAgIG9wdGlvbnM6IFtdLFxuICAgICAgICAgIG51bGxhYmxlOiB0cnVlLFxuICAgICAgICAgIGZvcmVpZ25fa2V5X3NjaGVtYTogbnVsbCxcbiAgICAgICAgICBmb3JlaWduX2tleV90YWJsZTogbnVsbCxcbiAgICAgICAgICBmb3JlaWduX2tleV9jb2x1bW46IG51bGwsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiBcImRlbGV0ZWRfYXRcIixcbiAgICAgICAgICBkYXRhdHlwZTogXCJ0aW1lc3RhbXBcIixcbiAgICAgICAgICBkYXRhdHlwZV9zY2hlbWE6IFwicGdfY2F0YWxvZ1wiLFxuICAgICAgICAgIHBrOiBmYWxzZSxcbiAgICAgICAgICBjb21wdXRlZDogZmFsc2UsXG4gICAgICAgICAgb3B0aW9uczogW10sXG4gICAgICAgICAgbnVsbGFibGU6IHRydWUsXG4gICAgICAgICAgZm9yZWlnbl9rZXlfc2NoZW1hOiBudWxsLFxuICAgICAgICAgIGZvcmVpZ25fa2V5X3RhYmxlOiBudWxsLFxuICAgICAgICAgIGZvcmVpZ25fa2V5X2NvbHVtbjogbnVsbCxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6IFwicm9sZVwiLFxuICAgICAgICAgIGRhdGF0eXBlOiBcInZhcmNoYXJcIixcbiAgICAgICAgICBkYXRhdHlwZV9zY2hlbWE6IFwicGdfY2F0YWxvZ1wiLFxuICAgICAgICAgIHBrOiBmYWxzZSxcbiAgICAgICAgICBjb21wdXRlZDogZmFsc2UsXG4gICAgICAgICAgb3B0aW9uczogW10sXG4gICAgICAgICAgbnVsbGFibGU6IHRydWUsXG4gICAgICAgICAgZm9yZWlnbl9rZXlfc2NoZW1hOiBudWxsLFxuICAgICAgICAgIGZvcmVpZ25fa2V5X3RhYmxlOiBudWxsLFxuICAgICAgICAgIGZvcmVpZ25fa2V5X2NvbHVtbjogbnVsbCxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6IFwibmFtZVwiLFxuICAgICAgICAgIGRhdGF0eXBlOiBcInZhcmNoYXJcIixcbiAgICAgICAgICBkYXRhdHlwZV9zY2hlbWE6IFwicGdfY2F0YWxvZ1wiLFxuICAgICAgICAgIHBrOiBmYWxzZSxcbiAgICAgICAgICBjb21wdXRlZDogZmFsc2UsXG4gICAgICAgICAgb3B0aW9uczogW10sXG4gICAgICAgICAgbnVsbGFibGU6IHRydWUsXG4gICAgICAgICAgZm9yZWlnbl9rZXlfc2NoZW1hOiBudWxsLFxuICAgICAgICAgIGZvcmVpZ25fa2V5X3RhYmxlOiBudWxsLFxuICAgICAgICAgIGZvcmVpZ25fa2V5X2NvbHVtbjogbnVsbCxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6IFwibmFtZV9yb2xlXCIsXG4gICAgICAgICAgZGF0YXR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgIGRhdGF0eXBlX3NjaGVtYTogXCJwZ19jYXRhbG9nXCIsXG4gICAgICAgICAgcGs6IGZhbHNlLFxuICAgICAgICAgIGNvbXB1dGVkOiB0cnVlLFxuICAgICAgICAgIG9wdGlvbnM6IFtdLFxuICAgICAgICAgIG51bGxhYmxlOiBmYWxzZSxcbiAgICAgICAgICBmb3JlaWduX2tleV9zY2hlbWE6IG51bGwsXG4gICAgICAgICAgZm9yZWlnbl9rZXlfdGFibGU6IG51bGwsXG4gICAgICAgICAgZm9yZWlnbl9rZXlfY29sdW1uOiBudWxsLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9LFxuICAgIHtcbiAgICAgIHNjaGVtYTogXCJwdWJsaWNcIixcbiAgICAgIG5hbWU6IFwiY29tcG9zaXRlX3BrXCIsXG4gICAgICBjb2x1bW5zOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiBcImlkXCIsXG4gICAgICAgICAgZGF0YXR5cGU6IFwidXVpZFwiLFxuICAgICAgICAgIGRhdGF0eXBlX3NjaGVtYTogXCJwZ19jYXRhbG9nXCIsXG4gICAgICAgICAgcGs6IHRydWUsXG4gICAgICAgICAgY29tcHV0ZWQ6IGZhbHNlLFxuICAgICAgICAgIG9wdGlvbnM6IFtdLFxuICAgICAgICAgIG51bGxhYmxlOiBmYWxzZSxcbiAgICAgICAgICBmb3JlaWduX2tleV9zY2hlbWE6IG51bGwsXG4gICAgICAgICAgZm9yZWlnbl9rZXlfdGFibGU6IG51bGwsXG4gICAgICAgICAgZm9yZWlnbl9rZXlfY29sdW1uOiBudWxsLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogXCJuYW1lXCIsXG4gICAgICAgICAgZGF0YXR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgIGRhdGF0eXBlX3NjaGVtYTogXCJwZ19jYXRhbG9nXCIsXG4gICAgICAgICAgcGs6IHRydWUsXG4gICAgICAgICAgY29tcHV0ZWQ6IGZhbHNlLFxuICAgICAgICAgIG9wdGlvbnM6IFtdLFxuICAgICAgICAgIG51bGxhYmxlOiB0cnVlLFxuICAgICAgICAgIGZvcmVpZ25fa2V5X3NjaGVtYTogbnVsbCxcbiAgICAgICAgICBmb3JlaWduX2tleV90YWJsZTogbnVsbCxcbiAgICAgICAgICBmb3JlaWduX2tleV9jb2x1bW46IG51bGwsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiBcImNyZWF0ZWRfYXRcIixcbiAgICAgICAgICBkYXRhdHlwZTogXCJ0aW1lc3RhbXBcIixcbiAgICAgICAgICBkYXRhdHlwZV9zY2hlbWE6IFwicGdfY2F0YWxvZ1wiLFxuICAgICAgICAgIHBrOiBmYWxzZSxcbiAgICAgICAgICBjb21wdXRlZDogZmFsc2UsXG4gICAgICAgICAgb3B0aW9uczogW10sXG4gICAgICAgICAgbnVsbGFibGU6IHRydWUsXG4gICAgICAgICAgZm9yZWlnbl9rZXlfc2NoZW1hOiBudWxsLFxuICAgICAgICAgIGZvcmVpZ25fa2V5X3RhYmxlOiBudWxsLFxuICAgICAgICAgIGZvcmVpZ25fa2V5X2NvbHVtbjogbnVsbCxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfSxcbiAgXSBhcyBjb25zdCBzYXRpc2ZpZXMgUXVlcnlSZXN1bHQ8dHlwZW9mIGdldFRhYmxlc1F1ZXJ5Pjtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGEgcXVlcnkgdGhhdCByZXR1cm5zIHRoZSBjdXJyZW50IHRpbWV6b25lIHNldHRpbmcgb2YgdGhlIFBvc3RncmVTUUwgZGF0YWJhc2UuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRUaW1lem9uZVF1ZXJ5KCkge1xuICBjb25zdCBidWlsZGVyID0gZ2V0UG9zdGdyZVNRTEJ1aWxkZXIoKTtcblxuICByZXR1cm4gY29tcGlsZShidWlsZGVyLnNlbGVjdE5vRnJvbShidWlsZGVyLmZuPHN0cmluZz4oXCJjdXJyZW50X3NldHRpbmdcIiwgW3NxbC5saXQoXCJ0aW1lem9uZVwiKV0pLmFzKFwidGltZXpvbmVcIikpKTtcbn1cblxuLyoqXG4gKiBGb3IgdGVzdGluZyBwdXJwb3Nlcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1vY2tUaW1lem9uZVF1ZXJ5KCkge1xuICByZXR1cm4gW3sgdGltZXpvbmU6IFwiVVRDXCIgfV0gYXMgY29uc3Qgc2F0aXNmaWVzIFF1ZXJ5UmVzdWx0PHR5cGVvZiBnZXRUaW1lem9uZVF1ZXJ5Pjtcbn1cblxuLyoqXG4gKiBXZSBkb24ndCB3YW50IFBvc3RncmVTUUwgaW50ZXJuYWxzIGluIGludHJvc3BlY3Rpb24gcmVzdWx0cy4gVG8gYmUgdXNlZCBpbiBgJGNhbGxgLlxuICovXG5mdW5jdGlvbiBleGNsdWRlU3lzdGVtVGFibGVzPFxuICBUIGV4dGVuZHMgU2VsZWN0UXVlcnlCdWlsZGVyPFxuICAgIERhdGFiYXNlICYgeyBuczogRGF0YWJhc2VbXCJwZ19jYXRhbG9nLnBnX25hbWVzcGFjZVwiXTsgY2xzOiBEYXRhYmFzZVtcInBnX2NhdGFsb2cucGdfY2xhc3NcIl0gfSxcbiAgICBcIm5zXCIgfCBcImNsc1wiLFxuICAgIG9iamVjdFxuICA+LFxuPihxYjogVCk6IFQge1xuICByZXR1cm4gcWIud2hlcmUoYG5zLm5zcG5hbWVgLCBgIX5gLCBgXnBnX2ApLndoZXJlKGBucy5uc3BuYW1lYCwgYCE9YCwgYGluZm9ybWF0aW9uX3NjaGVtYWApIGFzIG5ldmVyO1xufVxuIiwgIi8vLyA8cmVmZXJlbmNlIHR5cGVzPVwiLi9wb3N0Z3Jlcy5kLnRzXCIgLz5cbmltcG9ydCB7IHNxbCB9IGZyb20gJy4uL3Jhdy1idWlsZGVyL3NxbC5qcyc7XG4vKipcbiAqIEEgcG9zdGdyZXMgaGVscGVyIGZvciBhZ2dyZWdhdGluZyBhIHN1YnF1ZXJ5IChvciBvdGhlciBleHByZXNzaW9uKSBpbnRvIGEgSlNPTkIgYXJyYXkuXG4gKlxuICogIyMjIEV4YW1wbGVzXG4gKlxuICogPCEtLSBzaXRlRXhhbXBsZShcInNlbGVjdFwiLCBcIk5lc3RlZCBhcnJheVwiLCAxMTApIC0tPlxuICpcbiAqIFdoaWxlIGt5c2VseSBpcyBub3QgYW4gT1JNIGFuZCBpdCBkb2Vzbid0IGhhdmUgdGhlIGNvbmNlcHQgb2YgcmVsYXRpb25zLCB3ZSBkbyBwcm92aWRlXG4gKiBoZWxwZXJzIGZvciBmZXRjaGluZyBuZXN0ZWQgb2JqZWN0cyBhbmQgYXJyYXlzIGluIGEgc2luZ2xlIHF1ZXJ5LiBJbiB0aGlzIGV4YW1wbGUgd2VcbiAqIHVzZSB0aGUgYGpzb25BcnJheUZyb21gIGhlbHBlciB0byBmZXRjaCBwZXJzb24ncyBwZXRzIGFsb25nIHdpdGggdGhlIHBlcnNvbidzIGlkLlxuICpcbiAqIFBsZWFzZSBrZWVwIGluIG1pbmQgdGhhdCB0aGUgaGVscGVycyB1bmRlciB0aGUgYGt5c2VseS9oZWxwZXJzYCBmb2xkZXIsIGluY2x1ZGluZ1xuICogYGpzb25BcnJheUZyb21gLCBhcmUgbm90IGd1YXJhbnRlZWQgdG8gd29yayB3aXRoIHRoaXJkIHBhcnR5IGRpYWxlY3RzLiBJbiBvcmRlciBmb3JcbiAqIHRoZW0gdG8gd29yaywgdGhlIGRpYWxlY3QgbXVzdCBhdXRvbWF0aWNhbGx5IHBhcnNlIHRoZSBganNvbmAgZGF0YSB0eXBlIGludG9cbiAqIEphdmFTY3JpcHQgSlNPTiB2YWx1ZXMgbGlrZSBvYmplY3RzIGFuZCBhcnJheXMuIFNvbWUgZGlhbGVjdHMgbWlnaHQgc2ltcGx5IHJldHVyblxuICogdGhlIGRhdGEgYXMgYSBKU09OIHN0cmluZy4gSW4gdGhlc2UgY2FzZXMgeW91IGNhbiB1c2UgdGhlIGJ1aWx0IGluIGBQYXJzZUpTT05SZXN1bHRzUGx1Z2luYFxuICogdG8gcGFyc2UgdGhlIHJlc3VsdHMuXG4gKlxuICogYGBgdHNcbiAqIGltcG9ydCB7IGpzb25BcnJheUZyb20gfSBmcm9tICdreXNlbHkvaGVscGVycy9wb3N0Z3JlcydcbiAqXG4gKiBjb25zdCByZXN1bHQgPSBhd2FpdCBkYlxuICogICAuc2VsZWN0RnJvbSgncGVyc29uJylcbiAqICAgLnNlbGVjdCgoZWIpID0+IFtcbiAqICAgICAnaWQnLFxuICogICAgIGpzb25BcnJheUZyb20oXG4gKiAgICAgICBlYi5zZWxlY3RGcm9tKCdwZXQnKVxuICogICAgICAgICAuc2VsZWN0KFsncGV0LmlkIGFzIHBldF9pZCcsICdwZXQubmFtZSddKVxuICogICAgICAgICAud2hlcmVSZWYoJ3BldC5vd25lcl9pZCcsICc9JywgJ3BlcnNvbi5pZCcpXG4gKiAgICAgICAgIC5vcmRlckJ5KCdwZXQubmFtZScpXG4gKiAgICAgKS5hcygncGV0cycpXG4gKiAgIF0pXG4gKiAgIC5leGVjdXRlKClcbiAqIGBgYFxuICpcbiAqIFRoZSBnZW5lcmF0ZWQgU1FMIChQb3N0Z3JlU1FMKTpcbiAqXG4gKiBgYGBzcWxcbiAqIHNlbGVjdCBcImlkXCIsIChcbiAqICAgc2VsZWN0IGNvYWxlc2NlKGpzb25fYWdnKGFnZyksICdbXScpIGZyb20gKFxuICogICAgIHNlbGVjdCBcInBldFwiLlwiaWRcIiBhcyBcInBldF9pZFwiLCBcInBldFwiLlwibmFtZVwiXG4gKiAgICAgZnJvbSBcInBldFwiXG4gKiAgICAgd2hlcmUgXCJwZXRcIi5cIm93bmVyX2lkXCIgPSBcInBlcnNvblwiLlwiaWRcIlxuICogICAgIG9yZGVyIGJ5IFwicGV0XCIuXCJuYW1lXCJcbiAqICAgKSBhcyBhZ2dcbiAqICkgYXMgXCJwZXRzXCJcbiAqIGZyb20gXCJwZXJzb25cIlxuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBqc29uQXJyYXlGcm9tKGV4cHIpIHtcbiAgICByZXR1cm4gc3FsIGAoc2VsZWN0IGNvYWxlc2NlKGpzb25fYWdnKGFnZyksICdbXScpIGZyb20gJHtleHByfSBhcyBhZ2cpYDtcbn1cbi8qKlxuICogQSBwb3N0Z3JlcyBoZWxwZXIgZm9yIHR1cm5pbmcgYSBzdWJxdWVyeSAob3Igb3RoZXIgZXhwcmVzc2lvbikgaW50byBhIEpTT04gb2JqZWN0LlxuICpcbiAqIFRoZSBzdWJxdWVyeSBtdXN0IG9ubHkgcmV0dXJuIG9uZSByb3cuXG4gKlxuICogIyMjIEV4YW1wbGVzXG4gKlxuICogPCEtLSBzaXRlRXhhbXBsZShcInNlbGVjdFwiLCBcIk5lc3RlZCBvYmplY3RcIiwgMTIwKSAtLT5cbiAqXG4gKiBXaGlsZSBreXNlbHkgaXMgbm90IGFuIE9STSBhbmQgaXQgZG9lc24ndCBoYXZlIHRoZSBjb25jZXB0IG9mIHJlbGF0aW9ucywgd2UgZG8gcHJvdmlkZVxuICogaGVscGVycyBmb3IgZmV0Y2hpbmcgbmVzdGVkIG9iamVjdHMgYW5kIGFycmF5cyBpbiBhIHNpbmdsZSBxdWVyeS4gSW4gdGhpcyBleGFtcGxlIHdlXG4gKiB1c2UgdGhlIGBqc29uT2JqZWN0RnJvbWAgaGVscGVyIHRvIGZldGNoIHBlcnNvbidzIGZhdm9yaXRlIHBldCBhbG9uZyB3aXRoIHRoZSBwZXJzb24ncyBpZC5cbiAqXG4gKiBQbGVhc2Uga2VlcCBpbiBtaW5kIHRoYXQgdGhlIGhlbHBlcnMgdW5kZXIgdGhlIGBreXNlbHkvaGVscGVyc2AgZm9sZGVyLCBpbmNsdWRpbmdcbiAqIGBqc29uT2JqZWN0RnJvbWAsIGFyZSBub3QgZ3VhcmFudGVlZCB0byB3b3JrIHdpdGggdGhpcmQtcGFydHkgZGlhbGVjdHMuIEluIG9yZGVyIGZvclxuICogdGhlbSB0byB3b3JrLCB0aGUgZGlhbGVjdCBtdXN0IGF1dG9tYXRpY2FsbHkgcGFyc2UgdGhlIGBqc29uYCBkYXRhIHR5cGUgaW50b1xuICogSmF2YVNjcmlwdCBKU09OIHZhbHVlcyBsaWtlIG9iamVjdHMgYW5kIGFycmF5cy4gU29tZSBkaWFsZWN0cyBtaWdodCBzaW1wbHkgcmV0dXJuXG4gKiB0aGUgZGF0YSBhcyBhIEpTT04gc3RyaW5nLiBJbiB0aGVzZSBjYXNlcyB5b3UgY2FuIHVzZSB0aGUgYnVpbHQgaW4gYFBhcnNlSlNPTlJlc3VsdHNQbHVnaW5gXG4gKiB0byBwYXJzZSB0aGUgcmVzdWx0cy5cbiAqXG4gKiBgYGB0c1xuICogaW1wb3J0IHsganNvbk9iamVjdEZyb20gfSBmcm9tICdreXNlbHkvaGVscGVycy9wb3N0Z3JlcydcbiAqXG4gKiBjb25zdCByZXN1bHQgPSBhd2FpdCBkYlxuICogICAuc2VsZWN0RnJvbSgncGVyc29uJylcbiAqICAgLnNlbGVjdCgoZWIpID0+IFtcbiAqICAgICAnaWQnLFxuICogICAgIGpzb25PYmplY3RGcm9tKFxuICogICAgICAgZWIuc2VsZWN0RnJvbSgncGV0JylcbiAqICAgICAgICAgLnNlbGVjdChbJ3BldC5pZCBhcyBwZXRfaWQnLCAncGV0Lm5hbWUnXSlcbiAqICAgICAgICAgLndoZXJlUmVmKCdwZXQub3duZXJfaWQnLCAnPScsICdwZXJzb24uaWQnKVxuICogICAgICAgICAud2hlcmUoJ3BldC5pc19mYXZvcml0ZScsICc9JywgdHJ1ZSlcbiAqICAgICApLmFzKCdmYXZvcml0ZV9wZXQnKVxuICogICBdKVxuICogICAuZXhlY3V0ZSgpXG4gKiBgYGBcbiAqXG4gKiBUaGUgZ2VuZXJhdGVkIFNRTCAoUG9zdGdyZVNRTCk6XG4gKlxuICogYGBgc3FsXG4gKiBzZWxlY3QgXCJpZFwiLCAoXG4gKiAgIHNlbGVjdCB0b19qc29uKG9iaikgZnJvbSAoXG4gKiAgICAgc2VsZWN0IFwicGV0XCIuXCJpZFwiIGFzIFwicGV0X2lkXCIsIFwicGV0XCIuXCJuYW1lXCJcbiAqICAgICBmcm9tIFwicGV0XCJcbiAqICAgICB3aGVyZSBcInBldFwiLlwib3duZXJfaWRcIiA9IFwicGVyc29uXCIuXCJpZFwiXG4gKiAgICAgYW5kIFwicGV0XCIuXCJpc19mYXZvcml0ZVwiID0gJDFcbiAqICAgKSBhcyBvYmpcbiAqICkgYXMgXCJmYXZvcml0ZV9wZXRcIlxuICogZnJvbSBcInBlcnNvblwiXG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGpzb25PYmplY3RGcm9tKGV4cHIpIHtcbiAgICByZXR1cm4gc3FsIGAoc2VsZWN0IHRvX2pzb24ob2JqKSBmcm9tICR7ZXhwcn0gYXMgb2JqKWA7XG59XG4vKipcbiAqIFRoZSBQb3N0Z3JlU1FMIGBqc29uX2J1aWxkX29iamVjdGAgZnVuY3Rpb24uXG4gKlxuICogTk9URTogVGhpcyBoZWxwZXIgaXMgb25seSBndWFyYW50ZWVkIHRvIGZ1bGx5IHdvcmsgd2l0aCB0aGUgYnVpbHQtaW4gYFBvc3RncmVzRGlhbGVjdGAuXG4gKiBXaGlsZSB0aGUgcHJvZHVjZWQgU1FMIGlzIGNvbXBhdGlibGUgd2l0aCBhbGwgUG9zdGdyZVNRTCBkYXRhYmFzZXMsIHNvbWUgdGhpcmQtcGFydHkgZGlhbGVjdHNcbiAqIG1heSBub3QgcGFyc2UgdGhlIG5lc3RlZCBKU09OIGludG8gb2JqZWN0cy4gSW4gdGhlc2UgY2FzZXMgeW91IGNhbiB1c2UgdGhlIGJ1aWx0IGluXG4gKiBgUGFyc2VKU09OUmVzdWx0c1BsdWdpbmAgdG8gcGFyc2UgdGhlIHJlc3VsdHMuXG4gKlxuICogIyMjIEV4YW1wbGVzXG4gKlxuICogYGBgdHNcbiAqIGltcG9ydCB7IHNxbCB9IGZyb20gJ2t5c2VseSdcbiAqIGltcG9ydCB7IGpzb25CdWlsZE9iamVjdCB9IGZyb20gJ2t5c2VseS9oZWxwZXJzL3Bvc3RncmVzJ1xuICpcbiAqIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGRiXG4gKiAgIC5zZWxlY3RGcm9tKCdwZXJzb24nKVxuICogICAuc2VsZWN0KChlYikgPT4gW1xuICogICAgICdpZCcsXG4gKiAgICAganNvbkJ1aWxkT2JqZWN0KHtcbiAqICAgICAgIGZpcnN0OiBlYi5yZWYoJ2ZpcnN0X25hbWUnKSxcbiAqICAgICAgIGxhc3Q6IGViLnJlZignbGFzdF9uYW1lJyksXG4gKiAgICAgICBmdWxsOiBzcWw8c3RyaW5nPmBmaXJzdF9uYW1lIHx8XHUwMEEwJyAnIHx8IGxhc3RfbmFtZWBcbiAqICAgICB9KS5hcygnbmFtZScpXG4gKiAgIF0pXG4gKiAgIC5leGVjdXRlKClcbiAqXG4gKiByZXN1bHRbMF0/LmlkXG4gKiByZXN1bHRbMF0/Lm5hbWUuZmlyc3RcbiAqIHJlc3VsdFswXT8ubmFtZS5sYXN0XG4gKiByZXN1bHRbMF0/Lm5hbWUuZnVsbFxuICogYGBgXG4gKlxuICogVGhlIGdlbmVyYXRlZCBTUUwgKFBvc3RncmVTUUwpOlxuICpcbiAqIGBgYHNxbFxuICogc2VsZWN0IFwiaWRcIiwganNvbl9idWlsZF9vYmplY3QoXG4gKiAgICdmaXJzdCcsIGZpcnN0X25hbWUsXG4gKiAgICdsYXN0JywgbGFzdF9uYW1lLFxuICogICAnZnVsbCcsIGZpcnN0X25hbWUgfHwgJyAnIHx8IGxhc3RfbmFtZVxuICogKSBhcyBcIm5hbWVcIlxuICogZnJvbSBcInBlcnNvblwiXG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGpzb25CdWlsZE9iamVjdChvYmopIHtcbiAgICByZXR1cm4gc3FsIGBqc29uX2J1aWxkX29iamVjdCgke3NxbC5qb2luKE9iamVjdC5rZXlzKG9iaikuZmxhdE1hcCgoaykgPT4gW3NxbC5saXQoayksIG9ialtrXV0pKX0pYDtcbn1cbi8qKlxuICogVGhlIFBvc3RncmVTUUwgYG1lcmdlX2FjdGlvbmAgZnVuY3Rpb24uXG4gKlxuICogVGhpcyBmdW5jdGlvbiBjYW4gYmUgdXNlZCBpbiBhIGByZXR1cm5pbmdgIGNsYXVzZSB0byBnZXQgdGhlIGFjdGlvbiB0aGF0IHdhc1xuICogcGVyZm9ybWVkIGluIGEgYG1lcmdlSW50b2AgcXVlcnkuIFRoZSBmdW5jdGlvbiByZXR1cm5zIG9uZSBvZiB0aGUgZm9sbG93aW5nXG4gKiBzdHJpbmdzOiBgJ0lOU0VSVCdgLCBgJ1VQREFURSdgLCBvciBgJ0RFTEVURSdgLlxuICpcbiAqICMjIyBFeGFtcGxlc1xuICpcbiAqIGBgYHRzXG4gKiBpbXBvcnQgeyBtZXJnZUFjdGlvbiB9IGZyb20gJ2t5c2VseS9oZWxwZXJzL3Bvc3RncmVzJ1xuICpcbiAqIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGRiXG4gKiAgIC5tZXJnZUludG8oJ3BlcnNvbiBhcyBwJylcbiAqICAgLnVzaW5nKCdwZXJzb25fYmFja3VwIGFzIHBiJywgJ3AuaWQnLCAncGIuaWQnKVxuICogICAud2hlbk1hdGNoZWQoKVxuICogICAudGhlblVwZGF0ZVNldCgoeyByZWYgfSkgPT4gKHtcbiAqICAgICBmaXJzdF9uYW1lOiByZWYoJ3BiLmZpcnN0X25hbWUnKSxcbiAqICAgICB1cGRhdGVkX2F0OiByZWYoJ3BiLnVwZGF0ZWRfYXQnKS4kY2FzdFRvPHN0cmluZyB8IG51bGw+KCksXG4gKiAgIH0pKVxuICogICAud2hlbk5vdE1hdGNoZWQoKVxuICogICAudGhlbkluc2VydFZhbHVlcygoeyByZWZ9KSA9PiAoe1xuICogICAgIGlkOiByZWYoJ3BiLmlkJyksXG4gKiAgICAgZmlyc3RfbmFtZTogcmVmKCdwYi5maXJzdF9uYW1lJyksXG4gKiAgICAgY3JlYXRlZF9hdDogcmVmKCdwYi51cGRhdGVkX2F0JyksXG4gKiAgICAgdXBkYXRlZF9hdDogcmVmKCdwYi51cGRhdGVkX2F0JykuJGNhc3RUbzxzdHJpbmcgfCBudWxsPigpLFxuICogICB9KSlcbiAqICAgLnJldHVybmluZyhbbWVyZ2VBY3Rpb24oKS5hcygnYWN0aW9uJyksICdwLmlkJywgJ3AudXBkYXRlZF9hdCddKVxuICogICAuZXhlY3V0ZSgpXG4gKlxuICogcmVzdWx0WzBdLmFjdGlvblxuICogYGBgXG4gKlxuICogVGhlIGdlbmVyYXRlZCBTUUwgKFBvc3RncmVTUUwpOlxuICpcbiAqIGBgYHNxbFxuICogbWVyZ2UgaW50byBcInBlcnNvblwiIGFzIFwicFwiXG4gKiB1c2luZyBcInBlcnNvbl9iYWNrdXBcIiBhcyBcInBiXCIgb24gXCJwXCIuXCJpZFwiID0gXCJwYlwiLlwiaWRcIlxuICogd2hlbiBtYXRjaGVkIHRoZW4gdXBkYXRlIHNldFxuICogICBcImZpcnN0X25hbWVcIiA9IFwicGJcIi5cImZpcnN0X25hbWVcIixcbiAqICAgXCJ1cGRhdGVkX2F0XCIgPSBcInBiXCIuXCJ1cGRhdGVkX2F0XCI6OnRleHRcbiAqIHdoZW4gbm90IG1hdGNoZWQgdGhlbiBpbnNlcnQgdmFsdWVzIChcImlkXCIsIFwiZmlyc3RfbmFtZVwiLCBcImNyZWF0ZWRfYXRcIiwgXCJ1cGRhdGVkX2F0XCIpXG4gKiB2YWx1ZXMgKFwicGJcIi5cImlkXCIsIFwicGJcIi5cImZpcnN0X25hbWVcIiwgXCJwYlwiLlwidXBkYXRlZF9hdFwiLCBcInBiXCIuXCJ1cGRhdGVkX2F0XCIpXG4gKiByZXR1cm5pbmcgbWVyZ2VfYWN0aW9uKCkgYXMgXCJhY3Rpb25cIiwgXCJwXCIuXCJpZFwiLCBcInBcIi5cInVwZGF0ZWRfYXRcIlxuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtZXJnZUFjdGlvbigpIHtcbiAgICByZXR1cm4gc3FsIGBtZXJnZV9hY3Rpb24oKWA7XG59XG4iLCAiaW1wb3J0IHsgYXNRdWVyeSwgdHlwZSBRdWVyeSB9IGZyb20gXCIuLi9xdWVyeVwiO1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0UElEUXVlcnkoKTogUXVlcnk8eyBwaWQ6IHVua25vd24gfT4ge1xuICByZXR1cm4gYXNRdWVyeShcInNlbGVjdCBwZ19iYWNrZW5kX3BpZCgpIGFzIHBpZFwiKTtcbn1cblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1lbXB0eS1vYmplY3QtdHlwZVxuZXhwb3J0IGZ1bmN0aW9uIGdldENhbmNlbFF1ZXJ5KHBpZDoge30pOiBRdWVyeTx1bmtub3duPiB7XG4gIHJldHVybiB7XG4gICAgcGFyYW1ldGVyczogW3BpZF0sXG4gICAgc3FsOiBcInNlbGVjdCBwZ19jYW5jZWxfYmFja2VuZCgkMSk7XCIsXG4gIH07XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7OztnTEFBQUEsSUNBQUMsSUNBQUMsSUFFTyxJQUFNQyxFQUE2RSxDQUN4RixLQUFNLENBQ0osTUFBTyxTQUNULEVBQ0EsUUFBUyxDQUNQLE1BQU8sU0FDVCxFQUNBLE1BQU8sQ0FDTCxNQUFPLFFBQ1QsRUFDQSxLQUFNLENBQ0osTUFBTyxRQUNU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bml0X2RlZmluZV9BQ0NFTEVSQVRFX1NDSEVNQV9CWV9QUk9WSURFUiIsICJpbml0X2RlZmluZV9BQ0NFTEVSQVRFX1NDSEVNQV9CWV9QUk9WSURFUiIsICJQT1NUR1JFU1FMX0RBVEFfVFlQRVNfVE9fTUVUQURBVEEiLCAiaW5pdF9kZWZpbmVfQUNDRUxFUkFURV9TQ0hFTUFfQllfUFJPVklERVIiLCAiaW5pdF9kZWZpbmVfQUNDRUxFUkFURV9TQ0hFTUFfQllfUFJPVklERVIiLCAiZ2V0UG9zdGdyZVNRTEJ1aWxkZXIiLCAicmVxdWlyZW1lbnRzIiwgImdldEJ1aWxkZXIiLCAiUG9zdGdyZXNBZGFwdGVyIiwgIlBvc3RncmVzUXVlcnlDb21waWxlciIsICJnZXRJbnNlcnRRdWVyeSIsICJkZXRhaWxzIiwgInJlcXVpcmVtZW50cyIsICJ0YWJsZU5hbWUiLCAic2NoZW1hIiwgImNvbHVtbnMiLCAicm93cyIsICJidWlsZGVyIiwgImdldFBvc3RncmVTUUxCdWlsZGVyIiwgImNvbXBpbGUiLCAiYXBwbHlUcmFuc2Zvcm1hdGlvbnMiLCAiZ2V0U2VsZWN0UXVlcnkiLCAicGFnZUluZGV4IiwgInBhZ2VTaXplIiwgInNvcnRPcmRlciIsICJmaWx0ZXIiLCAiZmlsdGVyRXhwcmVzc2lvbiIsICJnZXRTZWxlY3RGaWx0ZXJFeHByZXNzaW9uIiwgImNvdW50UXVlcnkiLCAiZWIiLCAic3FsIiwgInFiIiwgIml0ZW0iLCAibW9ja1NlbGVjdFF1ZXJ5IiwgImdldFVwZGF0ZVF1ZXJ5IiwgImNoYW5nZXMiLCAicm93IiwgImNvbHMiLCAiYXBwbHlJbmZlcnJlZFJvd0ZpbHRlcnMiLCAiZ2V0RGVsZXRlUXVlcnkiLCAiaW5pdF9kZWZpbmVfQUNDRUxFUkFURV9TQ0hFTUFfQllfUFJPVklERVIiLCAiaW5pdF9kZWZpbmVfQUNDRUxFUkFURV9TQ0hFTUFfQllfUFJPVklERVIiLCAianNvbkFycmF5RnJvbSIsICJleHByIiwgInNxbCIsICJSRUdVTEFSX1RBQkxFX0tJTkQiLCAiVklFV19UQUJMRV9LSU5EIiwgIlRBQkxFX0tJTkRTIiwgImdldFRhYmxlc1F1ZXJ5IiwgInJlcXVpcmVtZW50cyIsICJjb21waWxlIiwgImdldFBvc3RncmVTUUxCdWlsZGVyIiwgImV4Y2x1ZGVTeXN0ZW1UYWJsZXMiLCAiZWIiLCAianNvbkFycmF5RnJvbSIsICJqYiIsICJvbl9lYiIsICJzcWwiLCAibW9ja1RhYmxlc1F1ZXJ5IiwgImdldFRpbWV6b25lUXVlcnkiLCAiYnVpbGRlciIsICJtb2NrVGltZXpvbmVRdWVyeSIsICJxYiIsICJjcmVhdGVQb3N0Z3Jlc0FkYXB0ZXIiLCAicmVxdWlyZW1lbnRzIiwgImV4ZWN1dG9yIiwgIm90aGVyUmVxdWlyZW1lbnRzIiwgIm9wdGlvbnMiLCAidGFibGVzUXVlcnkiLCAiZ2V0VGFibGVzUXVlcnkiLCAidGltZXpvbmVRdWVyeSIsICJnZXRUaW1lem9uZVF1ZXJ5IiwgInRhYmxlc0Vycm9yIiwgInRhYmxlcyIsICJ0aW1lem9uZUVycm9yIiwgInRpbWV6b25lcyIsICJjcmVhdGVBZGFwdGVyRXJyb3IiLCAidGltZXpvbmUiLCAiY3JlYXRlSW50cm9zcGVjdGlvbiIsICJlcnJvciIsICJkZXRhaWxzIiwgInF1ZXJ5IiwgImdldFNlbGVjdFF1ZXJ5IiwgInJlc3VsdHMiLCAiZ2V0SW5zZXJ0UXVlcnkiLCAicm93cyIsICJnZXRVcGRhdGVRdWVyeSIsICJyb3ciLCAiZ2V0RGVsZXRlUXVlcnkiLCAiYXJncyIsICJyZXN1bHQiLCAic2NoZW1hcyIsICJjb2x1bW5zIiwgInRhYmxlTmFtZSIsICJzY2hlbWEiLCAiY29sdW1uc1JlY29yZCIsICJjb2x1bW4iLCAiZGF0YXR5cGUiLCAiZGF0YXR5cGVfc2NoZW1hIiwgImNvbHVtbk5hbWUiLCAibnVsbGFibGUiLCAiaXNBcnJheSIsICJzdHJpcHBlZERhdGFUeXBlIiwgIlBPU1RHUkVTUUxfREFUQV9UWVBFU19UT19NRVRBREFUQSIsICJmaWx0ZXJPcGVyYXRvcnMiLCAibW9ja0ludHJvc3BlY3QiLCAibW9ja1RhYmxlc1F1ZXJ5IiwgIm1vY2tUaW1lem9uZVF1ZXJ5IiwgImluaXRfZGVmaW5lX0FDQ0VMRVJBVEVfU0NIRU1BX0JZX1BST1ZJREVSIiwgImdldFBJRFF1ZXJ5IiwgImFzUXVlcnkiLCAiZ2V0Q2FuY2VsUXVlcnkiLCAicGlkIl0KfQo=
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import * as ___react___ from 'react';
|
|
2
|
+
import * as ___react_dom___ from 'react-dom';
|
|
3
|
+
|
|
4
|
+
function require(mod) {
|
|
5
|
+
if (mod === 'react') return ___react___;
|
|
6
|
+
if (mod === 'react-dom') return ___react_dom___;
|
|
7
|
+
throw new Error(`Unknown module ${mod}`);
|
|
8
|
+
}
|
|
9
|
+
import{a as s}from"./chunk-OTK4ZF2W.js";import{a as w,b as q,c as B,d as k,e as E,f as O,g as I,h as T,i as c,j as L,k as j,n as D,p as y,q as S,t as N}from"./chunk-WHLVNWIR.js";import{e as i}from"./chunk-GDQBQ7MK.js";i();i();i();var C={BLOB:{group:"raw"},INTEGER:{group:"numeric"},NULL:{group:"raw"},NUMERIC:{group:"numeric"},REAL:{group:"numeric"},TEXT:{group:"string"}};function F(t){if(!t)return"BLOB";let e=t.toUpperCase();return e.includes("INT")?"INTEGER":e.includes("TEXT")||e.includes("CHAR")||e.includes("CLOB")?"TEXT":e.includes("BLOB")?"BLOB":e.includes("REAL")||e.includes("FLOA")||e.includes("DOUB")?"REAL":"NUMERIC"}i();i();function f(t){return D({...t,Adapter:j,QueryCompiler:L})}function M(t,e){let{filter:o={after:"and",filters:[],kind:"FilterGroup"},pageIndex:r,pageSize:a,sortOrder:n,table:{columns:l,name:u}}=t,b=f(e),_=N(o.filters,l),p=b.selectFrom(u).where(_).select(m=>m.cast(m.fn.coalesce(m.fn.countAll(),c.lit(0)),"text").as("value"));return y(b.with("count",()=>p).selectFrom([u,"count"]).where(_).select(c.ref("count.value").as("__ps_count__")).select(Object.keys(l)).$call(m=>n.reduce((A,g)=>A.orderBy(g.column,g.direction),m)).limit(a).offset(c.lit(BigInt(r)*BigInt(a))))}function ae(){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 P(t,e){let{rows:o,table:{columns:r,name:a}}=t,n=f(e);return y(n.deleteFrom(a).$call(S(o,r)).returning(Object.keys(r)).returning($().as("__ps_deleted_at__")))}function U(t,e){let{table:{columns:o,name:r},rows:a}=t,n=f(e);return y(n.insertInto(r).values(a.map(l=>Object.keys(l).length===0?{[Object.keys(o)[0]]:null}:l)).returning(Object.keys(o)))}function $(){let t=T();return t.cast(t.cast(c`(julianday('now') - 2440587.5) * 86400000.0`,"integer"),"text")}i();i();i();function v(t,e){let o=[];for(let{selection:r}of t.selections??[])if(E.is(r)&&k.is(r.column))o.push(h(r.column.column.name),Q(e,r.column.column.name));else if(k.is(r))o.push(h(r.column.name),Q(e,r.column.name));else if(q.is(r)&&w.is(r.alias))o.push(h(r.alias.name),Q(e,r.alias.name));else throw new Error("can't extract column names from the select query node");return o}function h(t){return new I(O.createImmediate(t))}function Q(t,e){return new I(E.create(k.create(e),B.create(t)))}function X(t){return c`(select coalesce(json_group_array(json_object(${c.join(G(t.toOperationNode(),"agg"))})), '[]') from ${t} as agg)`}function G(t,e){try{return v(t,e)}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 J(t){return y(f(t).selectFrom(T().fn("pragma_table_list",[]).as("tl")).leftJoin("sqlite_schema as ss",e=>e.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(e=>[X(e.selectFrom(e.fn("pragma_table_xinfo",["tl.name"]).as("txi")).leftJoin(e.fn("pragma_foreign_key_list",["tl.name"]).as("fkl"),"fkl.from","txi.name").where("txi.hidden","!=",1).select(["txi.name","txi.type as datatype","fkl.table as foreign_key_table","fkl.to as foreign_key_column"]).select(o=>[o("txi.hidden","in",[2,3]).as("computed"),o("txi.notnull","!=",0).as("nullable"),o("txi.pk","!=",0).as("pk")])).as("columns")]),{transformations:{columns:"json-parse"}})}function K(){return[{name:"animals",sql:"CREATE TABLE animals (id INTEGER PRIMARY KEY, name TEXT);",columns:[{name:"id",datatype:"INTEGER",pk:1,computed:0,nullable:0,foreign_key_table:null,foreign_key_column:null},{name:"name",datatype:"TEXT",pk:0,computed:0,nullable:1,foreign_key_table:null,foreign_key_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,foreign_key_table:null,foreign_key_column:null},{name:"created_at",datatype:"TIMESTAMP",pk:0,computed:0,nullable:1,foreign_key_table:null,foreign_key_column:null},{name:"deleted_at",datatype:"TIMESTAMP",pk:0,computed:0,nullable:1,foreign_key_table:null,foreign_key_column:null},{name:"role",datatype:"varchar",pk:0,computed:0,nullable:1,foreign_key_table:null,foreign_key_column:null},{name:"name",datatype:"varchar",pk:0,computed:0,nullable:1,foreign_key_table:null,foreign_key_column:null},{name:"name_role",datatype:"text",pk:0,computed:0,nullable:1,foreign_key_table:null,foreign_key_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,foreign_key_table:null,foreign_key_column:null},{name:"name",datatype:"TEXT",pk:1,computed:0,nullable:1,foreign_key_table:null,foreign_key_column:null},{name:"created_at",datatype:"timestamp",pk:0,computed:0,nullable:1,foreign_key_table:null,foreign_key_column:null}]}]}var R="main",z=["=","!=",">",">=","<","<=","is","is not","like","not like"];function Oe(t){let{executor:e,...o}=t;return{defaultSchema:R,async delete(r,a){try{let n=P(r,o),[l]=await e.execute(n,a);return l?s({error:l,query:n}):[null,{...r,query:n}]}catch(n){return s({error:n})}},async insert(r,a){try{let n=U(r,o),[l,u]=await e.execute(n,a);return l?s({error:l,query:n}):[null,{rows:u,query:n}]}catch(n){return s({error:n})}},async introspect(r){try{let a=J(t),[n,l]=await e.execute(a,r);return n?s({error:n,query:a}):[null,Y({query:a,tables:l})]}catch(a){return s({error:a})}},async query(r,a){try{let n=M(r,o),[l,u]=await e.execute(n,a);return l?s({error:l,query:n}):[null,{filteredRowCount:u[0]?.__ps_count__||"0",rows:u,query:n}]}catch(n){return s({error:n})}},update(r,a){throw new Error("Method not implemented.")}}}function Y(t){let{tables:e,query:o}=t;return{filterOperators:z,query:o,schemas:e.reduce((r,a)=>{let{columns:n,name:l,sql:u}=a,b=n.reduce((_,p)=>{let{datatype:m,foreign_key_column:A,name:g}=p,x=F(m);return _[g]={datatype:{...C[x],affinity:x,isArray:!1,isNative:!0,name:m,options:[],schema:R},fkColumn:A,fkSchema:A?R:null,fkTable:p.foreign_key_table,isComputed:!!p.computed,isInPrimaryKey:!!p.pk,name:g,nullable:!!p.nullable,schema:R,table:l},_},{});return r.main.tables[l]={columns:b,name:l,schema:"main"},r},{main:{tables:{},name:"main"}}),timezone:"UTC"}}function Le(){let t={parameters:[],sql:"<mocked>"},e=K();return Y({query:t,tables:e})}export{M as a,ae as b,P as c,U as d,J as e,K as f,Oe as g,Le as h};
|
|
10
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vZGF0YS9zcWxpdGUtY29yZS9pbmRleC50cyIsICIuLi9kYXRhL3NxbGl0ZS1jb3JlL2FkYXB0ZXIudHMiLCAiLi4vZGF0YS9zcWxpdGUtY29yZS9kYXRhdHlwZS50cyIsICIuLi9kYXRhL3NxbGl0ZS1jb3JlL2RtbC50cyIsICIuLi9kYXRhL3NxbGl0ZS1jb3JlL2J1aWxkZXIudHMiLCAiLi4vZGF0YS9zcWxpdGUtY29yZS9pbnRyb3NwZWN0aW9uLnRzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9reXNlbHlAMC4yOC44L25vZGVfbW9kdWxlcy9reXNlbHkvZGlzdC9lc20vaGVscGVycy9zcWxpdGUuanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2t5c2VseUAwLjI4Ljgvbm9kZV9tb2R1bGVzL2t5c2VseS9kaXN0L2VzbS91dGlsL2pzb24tb2JqZWN0LWFyZ3MuanMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbImV4cG9ydCAqIGZyb20gXCIuL2FkYXB0ZXJcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2RtbFwiO1xuZXhwb3J0ICogZnJvbSBcIi4vaW50cm9zcGVjdGlvblwiO1xuIiwgImltcG9ydCB7XG4gIHR5cGUgQWRhcHRlcixcbiAgdHlwZSBBZGFwdGVyRGVsZXRlUmVzdWx0LFxuICB0eXBlIEFkYXB0ZXJFcnJvcixcbiAgdHlwZSBBZGFwdGVySW5zZXJ0UmVzdWx0LFxuICB0eXBlIEFkYXB0ZXJJbnRyb3NwZWN0UmVzdWx0LFxuICB0eXBlIEFkYXB0ZXJRdWVyeVJlc3VsdCxcbiAgdHlwZSBBZGFwdGVyUmVxdWlyZW1lbnRzLFxuICBjcmVhdGVBZGFwdGVyRXJyb3IsXG4gIHR5cGUgRmlsdGVyT3BlcmF0b3IsXG4gIHR5cGUgVGFibGUsXG59IGZyb20gXCIuLi9hZGFwdGVyXCI7XG5pbXBvcnQgdHlwZSB7IFF1ZXJ5LCBRdWVyeVJlc3VsdCB9IGZyb20gXCIuLi9xdWVyeVwiO1xuaW1wb3J0IHR5cGUgeyBFaXRoZXIgfSBmcm9tIFwiLi4vdHlwZS11dGlsc1wiO1xuaW1wb3J0IHsgZGV0ZXJtaW5lQ29sdW1uQWZmaW5pdHksIFNRTElURV9BRkZJTklUWV9UT19NRVRBREFUQSB9IGZyb20gXCIuL2RhdGF0eXBlXCI7XG5pbXBvcnQgeyBnZXREZWxldGVRdWVyeSwgZ2V0SW5zZXJ0UXVlcnksIGdldFNlbGVjdFF1ZXJ5IH0gZnJvbSBcIi4vZG1sXCI7XG5pbXBvcnQgeyBnZXRUYWJsZXNRdWVyeSwgbW9ja1RhYmxlc1F1ZXJ5IH0gZnJvbSBcIi4vaW50cm9zcGVjdGlvblwiO1xuXG5leHBvcnQgdHlwZSBTUUxJdGVBZGFwdGVyUmVxdWlyZW1lbnRzID0gQWRhcHRlclJlcXVpcmVtZW50cztcblxuY29uc3Qgc2NoZW1hID0gXCJtYWluXCI7XG5cbmNvbnN0IGZpbHRlck9wZXJhdG9ycyA9IFtcbiAgXCI9XCIsXG4gIFwiIT1cIixcbiAgXCI+XCIsXG4gIFwiPj1cIixcbiAgXCI8XCIsXG4gIFwiPD1cIixcbiAgXCJpc1wiLFxuICBcImlzIG5vdFwiLFxuICBcImxpa2VcIixcbiAgXCJub3QgbGlrZVwiLFxuXSBzYXRpc2ZpZXMgRmlsdGVyT3BlcmF0b3JbXTtcblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVNRTGl0ZUFkYXB0ZXIocmVxdWlyZW1lbnRzOiBTUUxJdGVBZGFwdGVyUmVxdWlyZW1lbnRzKTogQWRhcHRlciB7XG4gIGNvbnN0IHsgZXhlY3V0b3IsIC4uLm90aGVyUmVxdWlyZW1lbnRzIH0gPSByZXF1aXJlbWVudHM7XG5cbiAgcmV0dXJuIHtcbiAgICBkZWZhdWx0U2NoZW1hOiBzY2hlbWEsXG5cbiAgICBhc3luYyBkZWxldGUoZGV0YWlscywgb3B0aW9ucyk6IFByb21pc2U8RWl0aGVyPEFkYXB0ZXJFcnJvciwgQWRhcHRlckRlbGV0ZVJlc3VsdD4+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHF1ZXJ5ID0gZ2V0RGVsZXRlUXVlcnkoZGV0YWlscywgb3RoZXJSZXF1aXJlbWVudHMpO1xuXG4gICAgICAgIC8vIFRPRE86IHVzZSByZXN1bHRzIHRvby5cbiAgICAgICAgY29uc3QgW2Vycm9yXSA9IGF3YWl0IGV4ZWN1dG9yLmV4ZWN1dGUocXVlcnksIG9wdGlvbnMpO1xuXG4gICAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgIHJldHVybiBjcmVhdGVBZGFwdGVyRXJyb3IoeyBlcnJvciwgcXVlcnkgfSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gW251bGwsIHsgLi4uZGV0YWlscywgcXVlcnkgfV07XG4gICAgICB9IGNhdGNoIChlcnJvcjogdW5rbm93bikge1xuICAgICAgICByZXR1cm4gY3JlYXRlQWRhcHRlckVycm9yKHsgZXJyb3I6IGVycm9yIGFzIEVycm9yIH0pO1xuICAgICAgfVxuICAgIH0sXG5cbiAgICBhc3luYyBpbnNlcnQoZGV0YWlscywgb3B0aW9ucyk6IFByb21pc2U8RWl0aGVyPEFkYXB0ZXJFcnJvciwgQWRhcHRlckluc2VydFJlc3VsdD4+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHF1ZXJ5ID0gZ2V0SW5zZXJ0UXVlcnkoZGV0YWlscywgb3RoZXJSZXF1aXJlbWVudHMpO1xuXG4gICAgICAgIGNvbnN0IFtlcnJvciwgcm93c10gPSBhd2FpdCBleGVjdXRvci5leGVjdXRlKHF1ZXJ5LCBvcHRpb25zKTtcblxuICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICByZXR1cm4gY3JlYXRlQWRhcHRlckVycm9yKHsgZXJyb3IsIHF1ZXJ5IH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIFtudWxsLCB7IHJvd3MsIHF1ZXJ5IH1dO1xuICAgICAgfSBjYXRjaCAoZXJyb3I6IHVua25vd24pIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZUFkYXB0ZXJFcnJvcih7IGVycm9yOiBlcnJvciBhcyBFcnJvciB9KTtcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgYXN5bmMgaW50cm9zcGVjdChvcHRpb25zKTogUHJvbWlzZTxFaXRoZXI8QWRhcHRlckVycm9yLCBBZGFwdGVySW50cm9zcGVjdFJlc3VsdD4+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHRhYmxlc1F1ZXJ5ID0gZ2V0VGFibGVzUXVlcnkocmVxdWlyZW1lbnRzKTtcblxuICAgICAgICBjb25zdCBbdGFibGVzRXJyb3IsIHRhYmxlc10gPSBhd2FpdCBleGVjdXRvci5leGVjdXRlKHRhYmxlc1F1ZXJ5LCBvcHRpb25zKTtcblxuICAgICAgICBpZiAodGFibGVzRXJyb3IpIHtcbiAgICAgICAgICByZXR1cm4gY3JlYXRlQWRhcHRlckVycm9yKHsgZXJyb3I6IHRhYmxlc0Vycm9yLCBxdWVyeTogdGFibGVzUXVlcnkgfSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gW251bGwsIGNyZWF0ZUludHJvc3BlY3Rpb24oeyBxdWVyeTogdGFibGVzUXVlcnksIHRhYmxlcyB9KV07XG4gICAgICB9IGNhdGNoIChlcnJvcjogdW5rbm93bikge1xuICAgICAgICByZXR1cm4gY3JlYXRlQWRhcHRlckVycm9yKHsgZXJyb3I6IGVycm9yIGFzIEVycm9yIH0pO1xuICAgICAgfVxuICAgIH0sXG5cbiAgICBhc3luYyBxdWVyeShkZXRhaWxzLCBvcHRpb25zKTogUHJvbWlzZTxFaXRoZXI8QWRhcHRlckVycm9yLCBBZGFwdGVyUXVlcnlSZXN1bHQ+PiB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBxdWVyeSA9IGdldFNlbGVjdFF1ZXJ5KGRldGFpbHMsIG90aGVyUmVxdWlyZW1lbnRzKTtcblxuICAgICAgICBjb25zdCBbZXJyb3IsIHJlc3VsdHNdID0gYXdhaXQgZXhlY3V0b3IuZXhlY3V0ZShxdWVyeSwgb3B0aW9ucyk7XG5cbiAgICAgICAgaWYgKGVycm9yKSB7XG4gICAgICAgICAgcmV0dXJuIGNyZWF0ZUFkYXB0ZXJFcnJvcih7IGVycm9yLCBxdWVyeSB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBbbnVsbCwgeyBmaWx0ZXJlZFJvd0NvdW50OiByZXN1bHRzWzBdPy5fX3BzX2NvdW50X18gfHwgXCIwXCIsIHJvd3M6IHJlc3VsdHMsIHF1ZXJ5IH1dO1xuICAgICAgfSBjYXRjaCAoZXJyb3I6IHVua25vd24pIHtcbiAgICAgICAgLy8gVE9ETzogaGFuZGxlIHByb3Blcmx5XG4gICAgICAgIHJldHVybiBjcmVhdGVBZGFwdGVyRXJyb3IoeyBlcnJvcjogZXJyb3IgYXMgRXJyb3IgfSk7XG4gICAgICB9XG4gICAgfSxcblxuICAgIHVwZGF0ZShfZGV0YWlscywgX29wdGlvbnMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIk1ldGhvZCBub3QgaW1wbGVtZW50ZWQuXCIpO1xuICAgIH0sXG4gIH07XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUludHJvc3BlY3Rpb24oYXJnczoge1xuICB0YWJsZXM6IFF1ZXJ5UmVzdWx0PHR5cGVvZiBnZXRUYWJsZXNRdWVyeT47XG4gIHF1ZXJ5OiBRdWVyeTtcbn0pOiBBZGFwdGVySW50cm9zcGVjdFJlc3VsdCB7XG4gIGNvbnN0IHsgdGFibGVzLCBxdWVyeTogdGFibGVzUXVlcnkgfSA9IGFyZ3M7XG5cbiAgcmV0dXJuIHtcbiAgICBmaWx0ZXJPcGVyYXRvcnMsXG4gICAgcXVlcnk6IHRhYmxlc1F1ZXJ5LFxuICAgIHNjaGVtYXM6IHRhYmxlcy5yZWR1Y2UoXG4gICAgICAoc2NoZW1hcywgdGFibGUpID0+IHtcbiAgICAgICAgY29uc3QgeyBjb2x1bW5zLCBuYW1lOiB0YWJsZU5hbWUsIHNxbDogX3NxbCB9ID0gdGFibGU7XG5cbiAgICAgICAgLy8gVE9ETzogdXNlIGBzcWxgIHRvIGdldCBlYWNoIGNvbHVtbidzIGRlZmluaXRpb24uXG4gICAgICAgIC8vIHdlIGNhbiB1c2UgaXQgdG8gZmluZCBlbnVtcyBvciBhdXRvIGluY3JlbWVudCB3aGVuIG5vdCBpbnRlZ2VyIHByaW1hcnkga2V5LlxuXG4gICAgICAgIGNvbnN0IGNvbHVtbnNSZWNvcmQgPSBjb2x1bW5zLnJlZHVjZShcbiAgICAgICAgICAoY29sdW1ucywgY29sdW1uKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB7IGRhdGF0eXBlLCBmb3JlaWduX2tleV9jb2x1bW4sIG5hbWU6IGNvbHVtbk5hbWUgfSA9IGNvbHVtbjtcblxuICAgICAgICAgICAgY29uc3QgYWZmaW5pdHkgPSBkZXRlcm1pbmVDb2x1bW5BZmZpbml0eShkYXRhdHlwZSk7XG5cbiAgICAgICAgICAgIGNvbHVtbnNbY29sdW1uTmFtZV0gPSB7XG4gICAgICAgICAgICAgIGRhdGF0eXBlOiB7XG4gICAgICAgICAgICAgICAgLy8gVE9ETzogd29ydGggZXhwbG9yaW5nIHN0aWxsIHZpYmluZyB3aXRoIHRoZSBkZWNsYXJlZCBkYXRhIHR5cGUgZm9yIHN0dWZmIGxpa2UgZGF0ZXMgaW4gdGhlIGZ1dHVyZS5cbiAgICAgICAgICAgICAgICAuLi5TUUxJVEVfQUZGSU5JVFlfVE9fTUVUQURBVEFbYWZmaW5pdHldLFxuICAgICAgICAgICAgICAgIGFmZmluaXR5LFxuICAgICAgICAgICAgICAgIGlzQXJyYXk6IGZhbHNlLFxuICAgICAgICAgICAgICAgIGlzTmF0aXZlOiB0cnVlLFxuICAgICAgICAgICAgICAgIG5hbWU6IGRhdGF0eXBlLFxuICAgICAgICAgICAgICAgIG9wdGlvbnM6IFtdLFxuICAgICAgICAgICAgICAgIHNjaGVtYSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgZmtDb2x1bW46IGZvcmVpZ25fa2V5X2NvbHVtbixcbiAgICAgICAgICAgICAgZmtTY2hlbWE6IGZvcmVpZ25fa2V5X2NvbHVtbiA/IHNjaGVtYSA6IG51bGwsXG4gICAgICAgICAgICAgIGZrVGFibGU6IGNvbHVtbi5mb3JlaWduX2tleV90YWJsZSxcbiAgICAgICAgICAgICAgaXNDb21wdXRlZDogQm9vbGVhbihjb2x1bW4uY29tcHV0ZWQpLFxuICAgICAgICAgICAgICBpc0luUHJpbWFyeUtleTogQm9vbGVhbihjb2x1bW4ucGspLFxuICAgICAgICAgICAgICBuYW1lOiBjb2x1bW5OYW1lLFxuICAgICAgICAgICAgICBudWxsYWJsZTogQm9vbGVhbihjb2x1bW4ubnVsbGFibGUpLFxuICAgICAgICAgICAgICBzY2hlbWEsXG4gICAgICAgICAgICAgIHRhYmxlOiB0YWJsZU5hbWUsXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICByZXR1cm4gY29sdW1ucztcbiAgICAgICAgICB9LFxuICAgICAgICAgIHt9IGFzIFRhYmxlW1wiY29sdW1uc1wiXSxcbiAgICAgICAgKTtcblxuICAgICAgICBzY2hlbWFzLm1haW4hLnRhYmxlc1t0YWJsZU5hbWVdID0ge1xuICAgICAgICAgIGNvbHVtbnM6IGNvbHVtbnNSZWNvcmQsXG4gICAgICAgICAgbmFtZTogdGFibGVOYW1lLFxuICAgICAgICAgIHNjaGVtYTogXCJtYWluXCIsXG4gICAgICAgIH07XG5cbiAgICAgICAgcmV0dXJuIHNjaGVtYXM7XG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBtYWluOiB7IHRhYmxlczoge30sIG5hbWU6IFwibWFpblwiIH0sXG4gICAgICB9IHNhdGlzZmllcyBBZGFwdGVySW50cm9zcGVjdFJlc3VsdFtcInNjaGVtYXNcIl0gYXMgQWRhcHRlckludHJvc3BlY3RSZXN1bHRbXCJzY2hlbWFzXCJdLFxuICAgICksXG4gICAgdGltZXpvbmU6IFwiVVRDXCIsXG4gIH07XG59XG5cbi8qKlxuICogRm9yIHRlc3RpbmcgcHVycG9zZXMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtb2NrSW50cm9zcGVjdCgpIHtcbiAgY29uc3QgcXVlcnkgPSB7IHBhcmFtZXRlcnM6IFtdLCBzcWw6IFwiPG1vY2tlZD5cIiB9IGFzIFF1ZXJ5O1xuICBjb25zdCB0YWJsZXMgPSBtb2NrVGFibGVzUXVlcnkoKTtcblxuICByZXR1cm4gY3JlYXRlSW50cm9zcGVjdGlvbih7IHF1ZXJ5LCB0YWJsZXMgfSkgYXMge1xuICAgIC8vIGJlc3QgZWZmb3J0LCBubyBuZWVkIGdvIG92ZXJib2FyZC5cbiAgICBzY2hlbWFzOiB7XG4gICAgICBtYWluOiB7XG4gICAgICAgIG5hbWU6IFwibWFpblwiO1xuICAgICAgICB0YWJsZXM6IHtcbiAgICAgICAgICBbVCBpbiAodHlwZW9mIHRhYmxlcylbbnVtYmVyXVtcIm5hbWVcIl1dOiBUYWJsZTtcbiAgICAgICAgfTtcbiAgICAgIH07XG4gICAgfTtcbiAgICB0aW1lem9uZTogc3RyaW5nO1xuICAgIGZpbHRlck9wZXJhdG9yczogRmlsdGVyT3BlcmF0b3JbXTtcbiAgICBxdWVyeTogUXVlcnk7XG4gIH0gc2F0aXNmaWVzIEFkYXB0ZXJJbnRyb3NwZWN0UmVzdWx0O1xufVxuIiwgImltcG9ydCB0eXBlIHsgRGF0YVR5cGUgfSBmcm9tIFwiLi4vYWRhcHRlclwiO1xuXG5leHBvcnQgdHlwZSBTUUxpdGVBZmZpbml0eSA9IFwiQkxPQlwiIHwgXCJJTlRFR0VSXCIgfCBcIk5VTExcIiB8IFwiTlVNRVJJQ1wiIHwgXCJSRUFMXCIgfCBcIlRFWFRcIjtcblxuZXhwb3J0IGNvbnN0IFNRTElURV9BRkZJTklUWV9UT19NRVRBREFUQTogUmVjb3JkPFNRTGl0ZUFmZmluaXR5LCBQaWNrPERhdGFUeXBlLCBcImdyb3VwXCI+PiA9IHtcbiAgQkxPQjoge1xuICAgIGdyb3VwOiBcInJhd1wiLFxuICB9LFxuICBJTlRFR0VSOiB7XG4gICAgZ3JvdXA6IFwibnVtZXJpY1wiLFxuICB9LFxuICBOVUxMOiB7XG4gICAgZ3JvdXA6IFwicmF3XCIsXG4gIH0sXG4gIE5VTUVSSUM6IHtcbiAgICBncm91cDogXCJudW1lcmljXCIsXG4gIH0sXG4gIFJFQUw6IHtcbiAgICBncm91cDogXCJudW1lcmljXCIsXG4gIH0sXG4gIFRFWFQ6IHtcbiAgICBncm91cDogXCJzdHJpbmdcIixcbiAgfSxcbn07XG5cbi8qKlxuICogaHR0cHM6Ly9zcWxpdGUub3JnL2RhdGF0eXBlMy5odG1sI2RldGVybWluYXRpb25fb2ZfY29sdW1uX2FmZmluaXR5XG4gKlxuICogRE8gTk9UIENIQU5HRSBUSEUgT1JERVIgT0YgVEhFIENIRUNLUyBJTiBUSElTIEZVTkNUSU9OIVxuICovXG5leHBvcnQgZnVuY3Rpb24gZGV0ZXJtaW5lQ29sdW1uQWZmaW5pdHkoZGVjbGFyZWREYXRhVHlwZTogc3RyaW5nIHwgbnVsbCk6IFNRTGl0ZUFmZmluaXR5IHtcbiAgaWYgKCFkZWNsYXJlZERhdGFUeXBlKSB7XG4gICAgcmV0dXJuIFwiQkxPQlwiO1xuICB9XG5cbiAgY29uc3QgdXBwZXJUeXBlID0gZGVjbGFyZWREYXRhVHlwZS50b1VwcGVyQ2FzZSgpO1xuXG4gIGlmICh1cHBlclR5cGUuaW5jbHVkZXMoXCJJTlRcIikpIHtcbiAgICByZXR1cm4gXCJJTlRFR0VSXCI7XG4gIH1cblxuICBpZiAodXBwZXJUeXBlLmluY2x1ZGVzKFwiVEVYVFwiKSB8fCB1cHBlclR5cGUuaW5jbHVkZXMoXCJDSEFSXCIpIHx8IHVwcGVyVHlwZS5pbmNsdWRlcyhcIkNMT0JcIikpIHtcbiAgICByZXR1cm4gXCJURVhUXCI7XG4gIH1cblxuICBpZiAodXBwZXJUeXBlLmluY2x1ZGVzKFwiQkxPQlwiKSkge1xuICAgIHJldHVybiBcIkJMT0JcIjtcbiAgfVxuXG4gIGlmICh1cHBlclR5cGUuaW5jbHVkZXMoXCJSRUFMXCIpIHx8IHVwcGVyVHlwZS5pbmNsdWRlcyhcIkZMT0FcIikgfHwgdXBwZXJUeXBlLmluY2x1ZGVzKFwiRE9VQlwiKSkge1xuICAgIHJldHVybiBcIlJFQUxcIjtcbiAgfVxuXG4gIHJldHVybiBcIk5VTUVSSUNcIjtcbn1cbiIsICJpbXBvcnQgeyBleHByZXNzaW9uQnVpbGRlciwgdHlwZSBJbmZlclJlc3VsdCwgdHlwZSBSZWZlcmVuY2VFeHByZXNzaW9uLCBzcWwgfSBmcm9tIFwia3lzZWx5XCI7XG5cbmltcG9ydCB0eXBlIHsgQWRhcHRlckRlbGV0ZURldGFpbHMsIEFkYXB0ZXJJbnNlcnREZXRhaWxzLCBBZGFwdGVyUXVlcnlEZXRhaWxzIH0gZnJvbSBcIi4uL2FkYXB0ZXJcIjtcbmltcG9ydCB7IGFwcGx5SW5mZXJyZWRSb3dGaWx0ZXJzLCB0eXBlIEJ1aWxkZXJSZXF1aXJlbWVudHMsIGNvbXBpbGUsIGdldFNlbGVjdEZpbHRlckV4cHJlc3Npb24gfSBmcm9tIFwiLi4vcXVlcnlcIjtcbmltcG9ydCB0eXBlIHsgQmlnSW50U3RyaW5nIH0gZnJvbSBcIi4uL3R5cGUtdXRpbHNcIjtcbmltcG9ydCB7IGdldFNRTGl0ZUJ1aWxkZXIgfSBmcm9tIFwiLi9idWlsZGVyXCI7XG5pbXBvcnQgeyBtb2NrVGFibGVzUXVlcnkgfSBmcm9tIFwiLi9pbnRyb3NwZWN0aW9uXCI7XG5cbi8qKlxuICogUmV0dXJucyBhIHF1ZXJ5IHRoYXQgc2VsZWN0cyBhbGwgY29sdW1ucyBmcm9tIGEgdGFibGUgd2l0aCBhbiB1bmJvdW5kIHJvdyBjb3VudCBhcyBgX19wc19jb3VudF9fYC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFNlbGVjdFF1ZXJ5KFxuICBkZXRhaWxzOiBBZGFwdGVyUXVlcnlEZXRhaWxzLFxuICByZXF1aXJlbWVudHM/OiBPbWl0PEJ1aWxkZXJSZXF1aXJlbWVudHMsIFwiQWRhcHRlclwiIHwgXCJRdWVyeUNvbXBpbGVyXCI+LFxuKSB7XG4gIGNvbnN0IHtcbiAgICBmaWx0ZXIgPSB7IGFmdGVyOiBcImFuZFwiLCBmaWx0ZXJzOiBbXSwga2luZDogXCJGaWx0ZXJHcm91cFwiIH0sXG4gICAgcGFnZUluZGV4LFxuICAgIHBhZ2VTaXplLFxuICAgIHNvcnRPcmRlcixcbiAgICB0YWJsZTogeyBjb2x1bW5zLCBuYW1lOiB0YWJsZU5hbWUgfSxcbiAgfSA9IGRldGFpbHM7XG5cbiAgY29uc3QgYnVpbGRlciA9IGdldFNRTGl0ZUJ1aWxkZXI8UmVjb3JkPHN0cmluZywgUmVjb3JkPHN0cmluZywgdW5rbm93bj4+PihyZXF1aXJlbWVudHMpO1xuXG4gIGNvbnN0IGZpbHRlckV4cHJlc3Npb24gPSBnZXRTZWxlY3RGaWx0ZXJFeHByZXNzaW9uKGZpbHRlci5maWx0ZXJzLCBjb2x1bW5zKTtcblxuICBjb25zdCBjb3VudFF1ZXJ5ID0gYnVpbGRlclxuICAgIC5zZWxlY3RGcm9tKHRhYmxlTmFtZSlcbiAgICAud2hlcmUoZmlsdGVyRXhwcmVzc2lvbilcbiAgICAuc2VsZWN0KChlYikgPT4gZWIuY2FzdDxCaWdJbnRTdHJpbmc+KGViLmZuLmNvYWxlc2NlKGViLmZuLmNvdW50QWxsKCksIHNxbC5saXQoMCkpLCBcInRleHRcIikuYXMoXCJ2YWx1ZVwiKSk7XG5cbiAgcmV0dXJuIGNvbXBpbGUoXG4gICAgYnVpbGRlclxuICAgICAgLndpdGgoXCJjb3VudFwiLCAoKSA9PiBjb3VudFF1ZXJ5KVxuICAgICAgLnNlbGVjdEZyb20oW3RhYmxlTmFtZSwgXCJjb3VudFwiXSlcbiAgICAgIC8vIFRPRE86IGN1cnNvciBwYWdpbmF0aW9uP1xuICAgICAgLndoZXJlKGZpbHRlckV4cHJlc3Npb24pXG4gICAgICAuc2VsZWN0KFxuICAgICAgICBzcWxcbiAgICAgICAgICAucmVmPEJpZ0ludFN0cmluZz4oXG4gICAgICAgICAgICBcImNvdW50LnZhbHVlXCIgc2F0aXNmaWVzIFJlZmVyZW5jZUV4cHJlc3Npb248eyBjb3VudDogSW5mZXJSZXN1bHQ8dHlwZW9mIGNvdW50UXVlcnk+W251bWJlcl0gfSwgXCJjb3VudFwiPixcbiAgICAgICAgICApXG4gICAgICAgICAgLmFzKFwiX19wc19jb3VudF9fXCIpLFxuICAgICAgKVxuICAgICAgLnNlbGVjdChPYmplY3Qua2V5cyhjb2x1bW5zKSlcbiAgICAgIC4kY2FsbCgocWIpID0+IHNvcnRPcmRlci5yZWR1Y2UoKHFiLCBpdGVtKSA9PiBxYi5vcmRlckJ5KGl0ZW0uY29sdW1uLCBpdGVtLmRpcmVjdGlvbiksIHFiKSlcbiAgICAgIC5saW1pdChwYWdlU2l6ZSlcbiAgICAgIC8vIHdlJ3JlIGluamVjdGluZyB0aGUgb2Zmc2V0IHZhbHVlIGhlcmUgdG8gYXZvaWQgc2VyaWFsaXphdGlvbiBjb21wbGV4aXR5IChgYmlnaW50YCBpcyBhIG5vLWdvIGZvciBgSlNPTi5zdHJpbmdpZnlgKS5cbiAgICAgIC5vZmZzZXQoc3FsLmxpdChCaWdJbnQocGFnZUluZGV4KSAqIEJpZ0ludChwYWdlU2l6ZSkpKSxcbiAgKTtcbn1cblxuLyoqXG4gKiBGb3IgdGVzdGluZyBwdXJwb3Nlcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1vY2tTZWxlY3RRdWVyeSgpIHtcbiAgcmV0dXJuIFtcbiAgICB7XG4gICAgICBjcmVhdGVkX2F0OiBuZXcgRGF0ZShcIjIwMjUtMDEtMjZUMjE6NTY6MTIuMzQ1WlwiKSxcbiAgICAgIGRlbGV0ZWRfYXQ6IG51bGwsXG4gICAgICBpZDogMSxcbiAgICAgIG5hbWU6IFwiSm9obiBEb2VcIixcbiAgICAgIF9fcHNfY291bnRfXzogXCIyXCIsXG4gICAgICByb2xlOiBcImFkbWluXCIsXG4gICAgICBuYW1lX3JvbGU6IFwiSm9ubiBEb2UgLSBhZG1pblwiLFxuICAgIH0sXG4gICAge1xuICAgICAgY3JlYXRlZF9hdDogbmV3IERhdGUoXCIyMDI1LTAxLTI2VDIwOjU2OjEyLjM0NVpcIiksXG4gICAgICBkZWxldGVkX2F0OiBudWxsLFxuICAgICAgaWQ6IDIsXG4gICAgICBuYW1lOiBcIkphbmUgRG9lXCIsXG4gICAgICBfX3BzX2NvdW50X186IFwiMlwiLFxuICAgICAgcm9sZTogXCJwb3dlcnVzZXJcIixcbiAgICAgIG5hbWVfcm9sZTogXCJKYW5lIERvZSAtIHBvd2VydXNlclwiLFxuICAgIH0sXG4gIF0gYXMgY29uc3Qgc2F0aXNmaWVzIHtcbiAgICAvLyBiZXN0IGVmZm9ydCBubyBuZWVkIHRvIGdvIG92ZXJib2FyZFxuICAgIFtLIGluIFJldHVyblR5cGU8dHlwZW9mIG1vY2tUYWJsZXNRdWVyeT5bMV1bXCJjb2x1bW5zXCJdW251bWJlcl1bXCJuYW1lXCJdIHwgXCJfX3BzX2NvdW50X19cIl06IHVua25vd247XG4gIH1bXTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGEgcXVlcnkgdGhhdCBkZWxldGVzIGEgZ2l2ZW4gc2V0IG9mIHJvd3MuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXREZWxldGVRdWVyeShcbiAgZGV0YWlsczogQWRhcHRlckRlbGV0ZURldGFpbHMsXG4gIHJlcXVpcmVtZW50cz86IE9taXQ8QnVpbGRlclJlcXVpcmVtZW50cywgXCJBZGFwdGVyXCIgfCBcIlF1ZXJ5Q29tcGlsZXJcIj4sXG4pIHtcbiAgY29uc3Qge1xuICAgIHJvd3MsXG4gICAgdGFibGU6IHsgY29sdW1ucywgbmFtZTogdGFibGVOYW1lIH0sXG4gIH0gPSBkZXRhaWxzO1xuXG4gIGNvbnN0IGJ1aWxkZXIgPSBnZXRTUUxpdGVCdWlsZGVyPFJlY29yZDxzdHJpbmcsIFJlY29yZDxzdHJpbmcsIHVua25vd24+Pj4ocmVxdWlyZW1lbnRzKTtcblxuICByZXR1cm4gY29tcGlsZShcbiAgICBidWlsZGVyXG4gICAgICAuZGVsZXRlRnJvbSh0YWJsZU5hbWUpXG4gICAgICAuJGNhbGwoYXBwbHlJbmZlcnJlZFJvd0ZpbHRlcnMocm93cywgY29sdW1ucykpXG4gICAgICAucmV0dXJuaW5nKE9iamVjdC5rZXlzKGNvbHVtbnMpKVxuICAgICAgLnJldHVybmluZyhnZXRDdXJyZW50VGltZXN0YW1wTWlsbGlzKCkuYXMoXCJfX3BzX2RlbGV0ZWRfYXRfX1wiKSksXG4gICk7XG59XG5cbi8qKlxuICogSW5zZXJ0cyBvbmUgb3IgbW9yZSByb3dzIGludG8gYSB0YWJsZSBhbmQgcmV0dXJucyB0aGUgaW5zZXJ0ZWQgcm93cyBhbG9uZyB3aXRoIHRoZWlyIGBjdGlkYC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEluc2VydFF1ZXJ5KFxuICBkZXRhaWxzOiBBZGFwdGVySW5zZXJ0RGV0YWlscyxcbiAgcmVxdWlyZW1lbnRzPzogT21pdDxCdWlsZGVyUmVxdWlyZW1lbnRzLCBcIkFkYXB0ZXJcIiB8IFwiUXVlcnlDb21waWxlclwiPixcbikge1xuICBjb25zdCB7XG4gICAgdGFibGU6IHsgY29sdW1ucywgbmFtZTogdGFibGVOYW1lIH0sXG4gICAgcm93cyxcbiAgfSA9IGRldGFpbHM7XG5cbiAgY29uc3QgYnVpbGRlciA9IGdldFNRTGl0ZUJ1aWxkZXI8UmVjb3JkPHN0cmluZywgUmVjb3JkPHN0cmluZywgdW5rbm93bj4+PihyZXF1aXJlbWVudHMpO1xuXG4gIHJldHVybiBjb21waWxlKFxuICAgIGJ1aWxkZXJcbiAgICAgIC5pbnNlcnRJbnRvKHRhYmxlTmFtZSlcbiAgICAgIC52YWx1ZXMocm93cy5tYXAoKHJvdykgPT4gKE9iamVjdC5rZXlzKHJvdykubGVuZ3RoID09PSAwID8geyBbT2JqZWN0LmtleXMoY29sdW1ucylbMF0hXTogbnVsbCB9IDogcm93KSkpXG4gICAgICAucmV0dXJuaW5nKE9iamVjdC5rZXlzKGNvbHVtbnMpKSxcbiAgKTtcbn1cblxuZnVuY3Rpb24gZ2V0Q3VycmVudFRpbWVzdGFtcE1pbGxpcygpIHtcbiAgY29uc3QgZWIgPSBleHByZXNzaW9uQnVpbGRlcigpO1xuXG4gIHJldHVybiBlYi5jYXN0PEJpZ0ludFN0cmluZz4oZWIuY2FzdChzcWxgKGp1bGlhbmRheSgnbm93JykgLSAyNDQwNTg3LjUpICogODY0MDAwMDAuMGAsIFwiaW50ZWdlclwiKSwgXCJ0ZXh0XCIpO1xufVxuIiwgImltcG9ydCB7IHR5cGUgS3lzZWx5LCBTcWxpdGVBZGFwdGVyLCBTcWxpdGVRdWVyeUNvbXBpbGVyIH0gZnJvbSBcImt5c2VseVwiO1xuXG5pbXBvcnQgeyB0eXBlIEJ1aWxkZXJSZXF1aXJlbWVudHMsIGdldEJ1aWxkZXIgfSBmcm9tIFwiLi4vcXVlcnlcIjtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbmV4cG9ydCBmdW5jdGlvbiBnZXRTUUxpdGVCdWlsZGVyPERhdGFiYXNlID0gYW55PihcbiAgcmVxdWlyZW1lbnRzPzogT21pdDxCdWlsZGVyUmVxdWlyZW1lbnRzLCBcIkFkYXB0ZXJcIiB8IFwiUXVlcnlDb21waWxlclwiPixcbik6IEt5c2VseTxEYXRhYmFzZT4ge1xuICByZXR1cm4gZ2V0QnVpbGRlcjxEYXRhYmFzZT4oe1xuICAgIC4uLnJlcXVpcmVtZW50cyxcbiAgICBBZGFwdGVyOiBTcWxpdGVBZGFwdGVyLFxuICAgIFF1ZXJ5Q29tcGlsZXI6IFNxbGl0ZVF1ZXJ5Q29tcGlsZXIsXG4gIH0pO1xufVxuIiwgIi8qKlxuICogU1FMaXRlIGludHJvc3BlY3Rpb24gcXVlcmllcyB0byBiZSB1c2VkIGJ5IHRoZSBTUUxpdGUgYWRhcHRlcidzIGludHJvc3BlY3QgbWV0aG9kLlxuICogQG1vZHVsZSBzcWxpdGUtY29yZS9pbnRyb3NwZWN0aW9uXG4gKlxuICogUmVmZXJlbmNlczpcbiAqIGh0dHBzOi8vc3FsaXRlLm9yZy9wcmFnbWEuaHRtbFxuICogaHR0cHM6Ly9zcWxpdGUub3JnL3NjaGVtYXRhYi5odG1sXG4gKi9cblxuaW1wb3J0IHsgZXhwcmVzc2lvbkJ1aWxkZXIgfSBmcm9tIFwia3lzZWx5XCI7XG5pbXBvcnQgeyBqc29uQXJyYXlGcm9tIH0gZnJvbSBcImt5c2VseS9oZWxwZXJzL3NxbGl0ZVwiO1xuXG5pbXBvcnQgeyB0eXBlIEJ1aWxkZXJSZXF1aXJlbWVudHMsIGNvbXBpbGUsIHR5cGUgUXVlcnlSZXN1bHQgfSBmcm9tIFwiLi4vcXVlcnlcIjtcbmltcG9ydCB7IGdldFNRTGl0ZUJ1aWxkZXIgfSBmcm9tIFwiLi9idWlsZGVyXCI7XG5cbmludGVyZmFjZSBEYXRhYmFzZSB7XG4gIC8qKiB0aGUgbWFpbiBzeXN0ZW0gdGFibGUgKi9cbiAgc3FsaXRlX3NjaGVtYToge1xuICAgIC8qKiBvYmplY3QgbmFtZSAqL1xuICAgIG5hbWU6IHN0cmluZztcbiAgICAvKiogcGFnZSBudW1iZXIgaW4gcm9vdCBpbmRleCB3aGVuIG9iamVjdCBpcyBhIHRhYmxlLiAqL1xuICAgIHJvb3RwYWdlOiBudW1iZXI7XG4gICAgLyoqIHNxbCBzdGF0ZW1lbnQgdGhhdCBjYW4gcmVjcmVhdGUgdGhlIG9iamVjdC4gbnVsbCB3aGVuIGludGVybmFsIGluZGV4IG9iamVjdC4gKi9cbiAgICBzcWw6IHN0cmluZyB8IG51bGw7XG4gICAgLyoqIHJlbGF0ZWQgdGFibGUvdmlldyBuYW1lIHdoZW4gb2JqZWN0IGlzIGFuIGluZGV4L3RyaWdnZXIuICovXG4gICAgdGJsX25hbWU6IHN0cmluZztcbiAgICAvKiogb2JqZWN0IHR5cGUgKi9cbiAgICB0eXBlOiBcImluZGV4XCIgfCBcInRhYmxlXCIgfCBcInRyaWdnZXJcIiB8IFwidmlld1wiO1xuICB9O1xufVxuXG4vKipcbiAqIFRoZSBzaGFwZSBvZiBlYWNoIHJvdyByZXR1cm5lZCBieSBgcHJhZ21hX3RhYmxlX2xpc3QodGFibGVOYW1lPylgLlxuICovXG5pbnRlcmZhY2UgUHJhZ21hVGFibGVMaXN0IHtcbiAgLyoqIG9iamVjdCBuYW1lICovXG4gIG5hbWU6IHN0cmluZztcbiAgLyoqIHNjaGVtYSBuYW1lICovXG4gIHNjaGVtYTogXCJtYWluXCIgfCBcInRlbXBcIjtcbiAgLyoqIG9iamVjdCB0eXBlICovXG4gIHR5cGU6IFwic2hhZG93XCIgfCBcInRhYmxlXCIgfCBcInZpZXdcIiB8IFwidmlydHVhbFwiO1xufVxuXG4vKipcbiAqIFRoZSBzaGFwZSBvZiBlYWNoIHJvdyByZXR1cm5lZCBieSBgcHJhZ21hX3RhYmxlX3hpbmZvKHRhYmxlTmFtZSlgLlxuICovXG5pbnRlcmZhY2UgUHJhZ21hVGFibGVYSW5mbyB7XG4gIC8qKiBcInJhbmsgd2l0aGluIGN1cnJlbnQgcmVzdWx0IHNldFwiICovXG4gIGNpZDogbnVtYmVyO1xuICAvKiogZGVmYXVsdCB2YWx1ZSAqL1xuICBkZmx0X3ZhbHVlOiB1bmtub3duO1xuICAvKiogMCAtIG5vcm1hbCwgMSAtIGhpZGRlbiwgMi0zIC0gZHluYW1pYy9zdG9yZWQgZ2VuZXJhdGVkICovXG4gIGhpZGRlbjogMCB8IDEgfCAyIHwgMztcbiAgLyoqIGNvbHVtbiBuYW1lICovXG4gIG5hbWU6IHN0cmluZztcbiAgLyoqIHdoZXRoZXIgdGhlIGNvbHVtbiBjYW4gYmUgbnVsbCAqL1xuICBub3RudWxsOiAwIHwgMTtcbiAgLyoqIDAgaWYgbm90IHBhcnQgb2YgdGhlIHByaW1hcnkga2V5LCBvdGhlcndpc2UgdGhlIDEtYmFzZWQgb3JkaW5hbCBudW1iZXIgb2YgdGhlIGNvbHVtbiBpbiB0aGUgcHJpbWFyeSBrZXkgKi9cbiAgcGs6IG51bWJlcjtcbiAgLyoqIGRhdGEgdHlwZSAqL1xuICB0eXBlOiBzdHJpbmc7XG59XG5cbi8qKlxuICogVGhlIHNoYXBlIG9mIGVhY2ggcm93IHJldHVybmVkIGJ5IGBwcmFnbWFfZm9yZWlnbl9rZXlfbGlzdCh0YWJsZU5hbWUpYC5cbiAqL1xuaW50ZXJmYWNlIFByYWdtYUZvcmVpZ25LZXlMaXN0IHtcbiAgLyoqIGNvbHVtbiBuYW1lICovXG4gIGZyb206IHN0cmluZztcbiAgLyoqIG9yZGluYWwgbnVtYmVyIG9mIGNvbHVtbiB3aXRoaW4gdGhlIGZvcmVpZ24ga2V5ICovXG4gIHNlcTogbnVtYmVyO1xuICAvKiogZm9yZWlnbiB0YWJsZSBuYW1lICovXG4gIHRhYmxlOiBzdHJpbmc7XG4gIC8qKiBjb2x1bW4gbmFtZSBpbiB0aGUgZm9yZWlnbiB0YWJsZSAqL1xuICB0bzogc3RyaW5nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0VGFibGVzUXVlcnkocmVxdWlyZW1lbnRzPzogT21pdDxCdWlsZGVyUmVxdWlyZW1lbnRzLCBcIkFkYXB0ZXJcIiB8IFwiUXVlcnlDb21waWxlclwiPikge1xuICByZXR1cm4gY29tcGlsZShcbiAgICBnZXRTUUxpdGVCdWlsZGVyPERhdGFiYXNlPihyZXF1aXJlbWVudHMpXG4gICAgICAuc2VsZWN0RnJvbShleHByZXNzaW9uQnVpbGRlcigpLmZuPFByYWdtYVRhYmxlTGlzdD4oXCJwcmFnbWFfdGFibGVfbGlzdFwiLCBbXSkuYXMoXCJ0bFwiKSlcbiAgICAgIC5sZWZ0Sm9pbihcInNxbGl0ZV9zY2hlbWEgYXMgc3NcIiwgKGpiKSA9PiBqYi5vblJlZihcInNzLnR5cGVcIiwgXCI9XCIsIFwidGwudHlwZVwiKS5vblJlZihcInNzLm5hbWVcIiwgXCI9XCIsIFwidGwubmFtZVwiKSlcbiAgICAgIC53aGVyZShcInRsLnR5cGVcIiwgXCJpblwiLCBbXCJ0YWJsZVwiLCBcInZpZXdcIl0pXG4gICAgICAvLyBleGNsdWRlIHRlbXBvcmFyeSB0YWJsZXMvdmlld3NcbiAgICAgIC53aGVyZShcInRsLnNjaGVtYVwiLCBcIj1cIiwgXCJtYWluXCIpXG4gICAgICAvLyBleGNsdWRlIHN5c3RlbSB0YWJsZXMvdmlld3NcbiAgICAgIC53aGVyZShcInRsLm5hbWVcIiwgXCJub3QgbGlrZVwiLCBcInNxbGl0ZV8lXCIpXG4gICAgICAuc2VsZWN0KFtcInRsLm5hbWVcIiwgXCJzcy5zcWxcIl0pXG4gICAgICAuc2VsZWN0KChlYikgPT4gW1xuICAgICAgICBqc29uQXJyYXlGcm9tKFxuICAgICAgICAgIGViXG4gICAgICAgICAgICAuc2VsZWN0RnJvbShlYi5mbjxQcmFnbWFUYWJsZVhJbmZvPihcInByYWdtYV90YWJsZV94aW5mb1wiLCBbXCJ0bC5uYW1lXCJdKS5hcyhcInR4aVwiKSlcbiAgICAgICAgICAgIC5sZWZ0Sm9pbihcbiAgICAgICAgICAgICAgZWIuZm48UHJhZ21hRm9yZWlnbktleUxpc3Q+KFwicHJhZ21hX2ZvcmVpZ25fa2V5X2xpc3RcIiwgW1widGwubmFtZVwiXSkuYXMoXCJma2xcIiksXG4gICAgICAgICAgICAgIFwiZmtsLmZyb21cIixcbiAgICAgICAgICAgICAgXCJ0eGkubmFtZVwiLFxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLy8gZXhjbHVkZSBoaWRkZW4gY29sdW1uc1xuICAgICAgICAgICAgLndoZXJlKFwidHhpLmhpZGRlblwiLCBcIiE9XCIsIDEpXG4gICAgICAgICAgICAuc2VsZWN0KFtcbiAgICAgICAgICAgICAgXCJ0eGkubmFtZVwiLFxuICAgICAgICAgICAgICBcInR4aS50eXBlIGFzIGRhdGF0eXBlXCIsXG4gICAgICAgICAgICAgIFwiZmtsLnRhYmxlIGFzIGZvcmVpZ25fa2V5X3RhYmxlXCIsXG4gICAgICAgICAgICAgIFwiZmtsLnRvIGFzIGZvcmVpZ25fa2V5X2NvbHVtblwiLFxuICAgICAgICAgICAgXSlcbiAgICAgICAgICAgIC5zZWxlY3QoKGViKSA9PiBbXG4gICAgICAgICAgICAgIGViKFwidHhpLmhpZGRlblwiLCBcImluXCIsIFsyLCAzXSkuYXMoXCJjb21wdXRlZFwiKSxcbiAgICAgICAgICAgICAgZWIoXCJ0eGkubm90bnVsbFwiLCBcIiE9XCIsIDApLmFzKFwibnVsbGFibGVcIiksXG4gICAgICAgICAgICAgIGViKFwidHhpLnBrXCIsIFwiIT1cIiwgMCkuYXMoXCJwa1wiKSxcbiAgICAgICAgICAgIF0pLFxuICAgICAgICApLmFzKFwiY29sdW1uc1wiKSxcbiAgICAgIF0pLFxuICAgIHsgdHJhbnNmb3JtYXRpb25zOiB7IGNvbHVtbnM6IFwianNvbi1wYXJzZVwiIH0gfSxcbiAgKTtcbn1cblxuLyoqXG4gKiBGb3IgdGVzdGluZyBwdXJwb3Nlcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1vY2tUYWJsZXNRdWVyeSgpIHtcbiAgcmV0dXJuIFtcbiAgICB7XG4gICAgICBuYW1lOiBcImFuaW1hbHNcIixcbiAgICAgIHNxbDogXCJDUkVBVEUgVEFCTEUgYW5pbWFscyAoaWQgSU5URUdFUiBQUklNQVJZIEtFWSwgbmFtZSBURVhUKTtcIixcbiAgICAgIGNvbHVtbnM6IFtcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6IFwiaWRcIixcbiAgICAgICAgICBkYXRhdHlwZTogXCJJTlRFR0VSXCIsXG4gICAgICAgICAgcGs6IDEsXG4gICAgICAgICAgY29tcHV0ZWQ6IDAsXG4gICAgICAgICAgbnVsbGFibGU6IDAsXG4gICAgICAgICAgZm9yZWlnbl9rZXlfdGFibGU6IG51bGwsXG4gICAgICAgICAgZm9yZWlnbl9rZXlfY29sdW1uOiBudWxsLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogXCJuYW1lXCIsXG4gICAgICAgICAgZGF0YXR5cGU6IFwiVEVYVFwiLFxuICAgICAgICAgIHBrOiAwLFxuICAgICAgICAgIGNvbXB1dGVkOiAwLFxuICAgICAgICAgIG51bGxhYmxlOiAxLFxuICAgICAgICAgIGZvcmVpZ25fa2V5X3RhYmxlOiBudWxsLFxuICAgICAgICAgIGZvcmVpZ25fa2V5X2NvbHVtbjogbnVsbCxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiBcInVzZXJzXCIsXG4gICAgICBzcWw6IFwiQ1JFQVRFIFRBQkxFIHVzZXJzIChpZCBVVUlEIFBSSU1BUlkgS0VZLCBjcmVhdGVkX2F0IFRJTUVTVEFNUCwgZGVsZXRlZF9hdCBUSU1FU1RBTVAsIHJvbGUgdmFyY2hhciwgbmFtZSB2YXJjaGFyLCBuYW1lX3JvbGUgdGV4dCk7XCIsXG4gICAgICBjb2x1bW5zOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiBcImlkXCIsXG4gICAgICAgICAgZGF0YXR5cGU6IFwiVVVJRFwiLFxuICAgICAgICAgIHBrOiAxLFxuICAgICAgICAgIGNvbXB1dGVkOiAwLFxuICAgICAgICAgIG51bGxhYmxlOiAwLFxuICAgICAgICAgIGZvcmVpZ25fa2V5X3RhYmxlOiBudWxsLFxuICAgICAgICAgIGZvcmVpZ25fa2V5X2NvbHVtbjogbnVsbCxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6IFwiY3JlYXRlZF9hdFwiLFxuICAgICAgICAgIGRhdGF0eXBlOiBcIlRJTUVTVEFNUFwiLFxuICAgICAgICAgIHBrOiAwLFxuICAgICAgICAgIGNvbXB1dGVkOiAwLFxuICAgICAgICAgIG51bGxhYmxlOiAxLFxuICAgICAgICAgIGZvcmVpZ25fa2V5X3RhYmxlOiBudWxsLFxuICAgICAgICAgIGZvcmVpZ25fa2V5X2NvbHVtbjogbnVsbCxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6IFwiZGVsZXRlZF9hdFwiLFxuICAgICAgICAgIGRhdGF0eXBlOiBcIlRJTUVTVEFNUFwiLFxuICAgICAgICAgIHBrOiAwLFxuICAgICAgICAgIGNvbXB1dGVkOiAwLFxuICAgICAgICAgIG51bGxhYmxlOiAxLFxuICAgICAgICAgIGZvcmVpZ25fa2V5X3RhYmxlOiBudWxsLFxuICAgICAgICAgIGZvcmVpZ25fa2V5X2NvbHVtbjogbnVsbCxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6IFwicm9sZVwiLFxuICAgICAgICAgIGRhdGF0eXBlOiBcInZhcmNoYXJcIixcbiAgICAgICAgICBwazogMCxcbiAgICAgICAgICBjb21wdXRlZDogMCxcbiAgICAgICAgICBudWxsYWJsZTogMSxcbiAgICAgICAgICBmb3JlaWduX2tleV90YWJsZTogbnVsbCxcbiAgICAgICAgICBmb3JlaWduX2tleV9jb2x1bW46IG51bGwsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiBcIm5hbWVcIixcbiAgICAgICAgICBkYXRhdHlwZTogXCJ2YXJjaGFyXCIsXG4gICAgICAgICAgcGs6IDAsXG4gICAgICAgICAgY29tcHV0ZWQ6IDAsXG4gICAgICAgICAgbnVsbGFibGU6IDEsXG4gICAgICAgICAgZm9yZWlnbl9rZXlfdGFibGU6IG51bGwsXG4gICAgICAgICAgZm9yZWlnbl9rZXlfY29sdW1uOiBudWxsLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogXCJuYW1lX3JvbGVcIixcbiAgICAgICAgICBkYXRhdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgcGs6IDAsXG4gICAgICAgICAgY29tcHV0ZWQ6IDAsXG4gICAgICAgICAgbnVsbGFibGU6IDEsXG4gICAgICAgICAgZm9yZWlnbl9rZXlfdGFibGU6IG51bGwsXG4gICAgICAgICAgZm9yZWlnbl9rZXlfY29sdW1uOiBudWxsLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6IFwiY29tcG9zaXRlX3BrXCIsXG4gICAgICBzcWw6IFwiQ1JFQVRFIFRBQkxFIGNvbXBvc2l0ZV9wayAoaWQgVVVJRCwgbmFtZSBURVhULCBjcmVhdGVkX2F0IHRpbWVzdGFtcCwgUFJJTUFSWSBLRVkgKGlkLCBuYW1lKSk7XCIsXG4gICAgICBjb2x1bW5zOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiBcImlkXCIsXG4gICAgICAgICAgZGF0YXR5cGU6IFwiVVVJRFwiLFxuICAgICAgICAgIHBrOiAxLFxuICAgICAgICAgIGNvbXB1dGVkOiAwLFxuICAgICAgICAgIG51bGxhYmxlOiAwLFxuICAgICAgICAgIGZvcmVpZ25fa2V5X3RhYmxlOiBudWxsLFxuICAgICAgICAgIGZvcmVpZ25fa2V5X2NvbHVtbjogbnVsbCxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6IFwibmFtZVwiLFxuICAgICAgICAgIGRhdGF0eXBlOiBcIlRFWFRcIixcbiAgICAgICAgICBwazogMSxcbiAgICAgICAgICBjb21wdXRlZDogMCxcbiAgICAgICAgICBudWxsYWJsZTogMSxcbiAgICAgICAgICBmb3JlaWduX2tleV90YWJsZTogbnVsbCxcbiAgICAgICAgICBmb3JlaWduX2tleV9jb2x1bW46IG51bGwsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiBcImNyZWF0ZWRfYXRcIixcbiAgICAgICAgICBkYXRhdHlwZTogXCJ0aW1lc3RhbXBcIixcbiAgICAgICAgICBwazogMCxcbiAgICAgICAgICBjb21wdXRlZDogMCxcbiAgICAgICAgICBudWxsYWJsZTogMSxcbiAgICAgICAgICBmb3JlaWduX2tleV90YWJsZTogbnVsbCxcbiAgICAgICAgICBmb3JlaWduX2tleV9jb2x1bW46IG51bGwsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH0sXG4gIF0gYXMgY29uc3Qgc2F0aXNmaWVzIFF1ZXJ5UmVzdWx0PHR5cGVvZiBnZXRUYWJsZXNRdWVyeT47XG59XG4iLCAiLy8vIDxyZWZlcmVuY2UgdHlwZXM9XCIuL3NxbGl0ZS5kLnRzXCIgLz5cbmltcG9ydCB7IHNxbCB9IGZyb20gJy4uL3Jhdy1idWlsZGVyL3NxbC5qcyc7XG5pbXBvcnQgeyBnZXRKc29uT2JqZWN0QXJncyB9IGZyb20gJy4uL3V0aWwvanNvbi1vYmplY3QtYXJncy5qcyc7XG4vKipcbiAqIEEgU1FMaXRlIGhlbHBlciBmb3IgYWdncmVnYXRpbmcgYSBzdWJxdWVyeSBpbnRvIGEgSlNPTiBhcnJheS5cbiAqXG4gKiBOT1RFOiBUaGlzIGhlbHBlciBvbmx5IHdvcmtzIGNvcnJlY3RseSBpZiB5b3UndmUgaW5zdGFsbGVkIHRoZSBgUGFyc2VKU09OUmVzdWx0c1BsdWdpbmAuXG4gKiBPdGhlcndpc2UgdGhlIG5lc3RlZCBzZWxlY3Rpb25zIHdpbGwgYmUgcmV0dXJuZWQgYXMgSlNPTiBzdHJpbmdzLlxuICpcbiAqIFRoZSBwbHVnaW4gY2FuIGJlIGluc3RhbGxlZCBsaWtlIHRoaXM6XG4gKlxuICogYGBgdHNcbiAqIGltcG9ydCAqIGFzIFNxbGl0ZSBmcm9tICdiZXR0ZXItc3FsaXRlMydcbiAqIGltcG9ydCB7IEt5c2VseSwgUGFyc2VKU09OUmVzdWx0c1BsdWdpbiwgU3FsaXRlRGlhbGVjdCB9IGZyb20gJ2t5c2VseSdcbiAqIGltcG9ydCB0eXBlIHsgRGF0YWJhc2UgfSBmcm9tICd0eXBlLWVkaXRvcicgLy8gaW1hZ2luYXJ5IG1vZHVsZVxuICpcbiAqIGNvbnN0IGRiID0gbmV3IEt5c2VseTxEYXRhYmFzZT4oe1xuICogICBkaWFsZWN0OiBuZXcgU3FsaXRlRGlhbGVjdCh7XG4gKiAgICAgZGF0YWJhc2U6IG5ldyBTcWxpdGUoJzptZW1vcnk6JylcbiAqICAgfSksXG4gKiAgIHBsdWdpbnM6IFtuZXcgUGFyc2VKU09OUmVzdWx0c1BsdWdpbigpXVxuICogfSlcbiAqIGBgYFxuICpcbiAqICMjIyBFeGFtcGxlc1xuICpcbiAqIGBgYHRzXG4gKiBpbXBvcnQgeyBqc29uQXJyYXlGcm9tIH0gZnJvbSAna3lzZWx5L2hlbHBlcnMvc3FsaXRlJ1xuICpcbiAqIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGRiXG4gKiAgIC5zZWxlY3RGcm9tKCdwZXJzb24nKVxuICogICAuc2VsZWN0KChlYikgPT4gW1xuICogICAgICdpZCcsXG4gKiAgICAganNvbkFycmF5RnJvbShcbiAqICAgICAgIGViLnNlbGVjdEZyb20oJ3BldCcpXG4gKiAgICAgICAgIC5zZWxlY3QoWydwZXQuaWQgYXMgcGV0X2lkJywgJ3BldC5uYW1lJ10pXG4gKiAgICAgICAgIC53aGVyZVJlZigncGV0Lm93bmVyX2lkJywgJz0nLCAncGVyc29uLmlkJylcbiAqICAgICAgICAgLm9yZGVyQnkoJ3BldC5uYW1lJylcbiAqICAgICApLmFzKCdwZXRzJylcbiAqICAgXSlcbiAqICAgLmV4ZWN1dGUoKVxuICpcbiAqIHJlc3VsdFswXT8uaWRcbiAqIHJlc3VsdFswXT8ucGV0c1swXS5wZXRfaWRcbiAqIHJlc3VsdFswXT8ucGV0c1swXS5uYW1lXG4gKiBgYGBcbiAqXG4gKiBUaGUgZ2VuZXJhdGVkIFNRTCAoU1FMaXRlKTpcbiAqXG4gKiBgYGBzcWxcbiAqIHNlbGVjdCBcImlkXCIsIChcbiAqICAgc2VsZWN0IGNvYWxlc2NlKGpzb25fZ3JvdXBfYXJyYXkoanNvbl9vYmplY3QoXG4gKiAgICAgJ3BldF9pZCcsIFwiYWdnXCIuXCJwZXRfaWRcIixcbiAqICAgICAnbmFtZScsIFwiYWdnXCIuXCJuYW1lXCJcbiAqICAgKSksICdbXScpIGZyb20gKFxuICogICAgIHNlbGVjdCBcInBldFwiLlwiaWRcIiBhcyBcInBldF9pZFwiLCBcInBldFwiLlwibmFtZVwiXG4gKiAgICAgZnJvbSBcInBldFwiXG4gKiAgICAgd2hlcmUgXCJwZXRcIi5cIm93bmVyX2lkXCIgPSBcInBlcnNvblwiLlwiaWRcIlxuICogICAgIG9yZGVyIGJ5IFwicGV0XCIuXCJuYW1lXCJcbiAqICAgKSBhcyBcImFnZ1wiXG4gKiApIGFzIFwicGV0c1wiXG4gKiBmcm9tIFwicGVyc29uXCJcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24ganNvbkFycmF5RnJvbShleHByKSB7XG4gICAgcmV0dXJuIHNxbCBgKHNlbGVjdCBjb2FsZXNjZShqc29uX2dyb3VwX2FycmF5KGpzb25fb2JqZWN0KCR7c3FsLmpvaW4oZ2V0U3FsaXRlSnNvbk9iamVjdEFyZ3MoZXhwci50b09wZXJhdGlvbk5vZGUoKSwgJ2FnZycpKX0pKSwgJ1tdJykgZnJvbSAke2V4cHJ9IGFzIGFnZylgO1xufVxuLyoqXG4gKiBBIFNRTGl0ZSBoZWxwZXIgZm9yIHR1cm5pbmcgYSBzdWJxdWVyeSBpbnRvIGEgSlNPTiBvYmplY3QuXG4gKlxuICogVGhlIHN1YnF1ZXJ5IG11c3Qgb25seSByZXR1cm4gb25lIHJvdy5cbiAqXG4gKiBOT1RFOiBUaGlzIGhlbHBlciBvbmx5IHdvcmtzIGNvcnJlY3RseSBpZiB5b3UndmUgaW5zdGFsbGVkIHRoZSBgUGFyc2VKU09OUmVzdWx0c1BsdWdpbmAuXG4gKiBPdGhlcndpc2UgdGhlIG5lc3RlZCBzZWxlY3Rpb25zIHdpbGwgYmUgcmV0dXJuZWQgYXMgSlNPTiBzdHJpbmdzLlxuICpcbiAqIFRoZSBwbHVnaW4gY2FuIGJlIGluc3RhbGxlZCBsaWtlIHRoaXM6XG4gKlxuICogYGBgdHNcbiAqIGltcG9ydCAqIGFzIFNxbGl0ZSBmcm9tICdiZXR0ZXItc3FsaXRlMydcbiAqIGltcG9ydCB7IEt5c2VseSwgUGFyc2VKU09OUmVzdWx0c1BsdWdpbiwgU3FsaXRlRGlhbGVjdCB9IGZyb20gJ2t5c2VseSdcbiAqIGltcG9ydCB0eXBlIHsgRGF0YWJhc2UgfSBmcm9tICd0eXBlLWVkaXRvcicgLy8gaW1hZ2luYXJ5IG1vZHVsZVxuICpcbiAqIGNvbnN0IGRiID0gbmV3IEt5c2VseTxEYXRhYmFzZT4oe1xuICogICBkaWFsZWN0OiBuZXcgU3FsaXRlRGlhbGVjdCh7XG4gKiAgICAgZGF0YWJhc2U6IG5ldyBTcWxpdGUoJzptZW1vcnk6JylcbiAqICAgfSksXG4gKiAgIHBsdWdpbnM6IFtuZXcgUGFyc2VKU09OUmVzdWx0c1BsdWdpbigpXVxuICogfSlcbiAqIGBgYFxuICpcbiAqICMjIyBFeGFtcGxlc1xuICpcbiAqIGBgYHRzXG4gKiBpbXBvcnQgeyBqc29uT2JqZWN0RnJvbSB9IGZyb20gJ2t5c2VseS9oZWxwZXJzL3NxbGl0ZSdcbiAqXG4gKiBjb25zdCByZXN1bHQgPSBhd2FpdCBkYlxuICogICAuc2VsZWN0RnJvbSgncGVyc29uJylcbiAqICAgLnNlbGVjdCgoZWIpID0+IFtcbiAqICAgICAnaWQnLFxuICogICAgIGpzb25PYmplY3RGcm9tKFxuICogICAgICAgZWIuc2VsZWN0RnJvbSgncGV0JylcbiAqICAgICAgICAgLnNlbGVjdChbJ3BldC5pZCBhcyBwZXRfaWQnLCAncGV0Lm5hbWUnXSlcbiAqICAgICAgICAgLndoZXJlUmVmKCdwZXQub3duZXJfaWQnLCAnPScsICdwZXJzb24uaWQnKVxuICogICAgICAgICAud2hlcmUoJ3BldC5pc19mYXZvcml0ZScsICc9JywgdHJ1ZSlcbiAqICAgICApLmFzKCdmYXZvcml0ZV9wZXQnKVxuICogICBdKVxuICogICAuZXhlY3V0ZSgpXG4gKlxuICogcmVzdWx0WzBdPy5pZFxuICogcmVzdWx0WzBdPy5mYXZvcml0ZV9wZXQ/LnBldF9pZFxuICogcmVzdWx0WzBdPy5mYXZvcml0ZV9wZXQ/Lm5hbWVcbiAqIGBgYFxuICpcbiAqIFRoZSBnZW5lcmF0ZWQgU1FMIChTUUxpdGUpOlxuICpcbiAqIGBgYHNxbFxuICogc2VsZWN0IFwiaWRcIiwgKFxuICogICBzZWxlY3QganNvbl9vYmplY3QoXG4gKiAgICAgJ3BldF9pZCcsIFwib2JqXCIuXCJwZXRfaWRcIixcbiAqICAgICAnbmFtZScsIFwib2JqXCIuXCJuYW1lXCJcbiAqICAgKSBmcm9tIChcbiAqICAgICBzZWxlY3QgXCJwZXRcIi5cImlkXCIgYXMgXCJwZXRfaWRcIiwgXCJwZXRcIi5cIm5hbWVcIlxuICogICAgIGZyb20gXCJwZXRcIlxuICogICAgIHdoZXJlIFwicGV0XCIuXCJvd25lcl9pZFwiID0gXCJwZXJzb25cIi5cImlkXCJcbiAqICAgICBhbmQgXCJwZXRcIi5cImlzX2Zhdm9yaXRlXCIgPSA/XG4gKiAgICkgYXMgb2JqXG4gKiApIGFzIFwiZmF2b3JpdGVfcGV0XCJcbiAqIGZyb20gXCJwZXJzb25cIjtcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24ganNvbk9iamVjdEZyb20oZXhwcikge1xuICAgIHJldHVybiBzcWwgYChzZWxlY3QganNvbl9vYmplY3QoJHtzcWwuam9pbihnZXRTcWxpdGVKc29uT2JqZWN0QXJncyhleHByLnRvT3BlcmF0aW9uTm9kZSgpLCAnb2JqJykpfSkgZnJvbSAke2V4cHJ9IGFzIG9iailgO1xufVxuLyoqXG4gKiBUaGUgU1FMaXRlIGBqc29uX29iamVjdGAgZnVuY3Rpb24uXG4gKlxuICogTk9URTogVGhpcyBoZWxwZXIgb25seSB3b3JrcyBjb3JyZWN0bHkgaWYgeW91J3ZlIGluc3RhbGxlZCB0aGUgYFBhcnNlSlNPTlJlc3VsdHNQbHVnaW5gLlxuICogT3RoZXJ3aXNlIHRoZSBuZXN0ZWQgc2VsZWN0aW9ucyB3aWxsIGJlIHJldHVybmVkIGFzIEpTT04gc3RyaW5ncy5cbiAqXG4gKiBUaGUgcGx1Z2luIGNhbiBiZSBpbnN0YWxsZWQgbGlrZSB0aGlzOlxuICpcbiAqIGBgYHRzXG4gKiBpbXBvcnQgKiBhcyBTcWxpdGUgZnJvbSAnYmV0dGVyLXNxbGl0ZTMnXG4gKiBpbXBvcnQgeyBLeXNlbHksIFBhcnNlSlNPTlJlc3VsdHNQbHVnaW4sIFNxbGl0ZURpYWxlY3QgfSBmcm9tICdreXNlbHknXG4gKiBpbXBvcnQgdHlwZSB7IERhdGFiYXNlIH0gZnJvbSAndHlwZS1lZGl0b3InIC8vIGltYWdpbmFyeSBtb2R1bGVcbiAqXG4gKiBjb25zdCBkYiA9IG5ldyBLeXNlbHk8RGF0YWJhc2U+KHtcbiAqICAgZGlhbGVjdDogbmV3IFNxbGl0ZURpYWxlY3Qoe1xuICogICAgIGRhdGFiYXNlOiBuZXcgU3FsaXRlKCc6bWVtb3J5OicpXG4gKiAgIH0pLFxuICogICBwbHVnaW5zOiBbbmV3IFBhcnNlSlNPTlJlc3VsdHNQbHVnaW4oKV1cbiAqIH0pXG4gKiBgYGBcbiAqXG4gKiAjIyMgRXhhbXBsZXNcbiAqXG4gKiBgYGB0c1xuICogaW1wb3J0IHsgc3FsIH0gZnJvbSAna3lzZWx5J1xuICogaW1wb3J0IHsganNvbkJ1aWxkT2JqZWN0IH0gZnJvbSAna3lzZWx5L2hlbHBlcnMvc3FsaXRlJ1xuICpcbiAqIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGRiXG4gKiAgIC5zZWxlY3RGcm9tKCdwZXJzb24nKVxuICogICAuc2VsZWN0KChlYikgPT4gW1xuICogICAgICdpZCcsXG4gKiAgICAganNvbkJ1aWxkT2JqZWN0KHtcbiAqICAgICAgIGZpcnN0OiBlYi5yZWYoJ2ZpcnN0X25hbWUnKSxcbiAqICAgICAgIGxhc3Q6IGViLnJlZignbGFzdF9uYW1lJyksXG4gKiAgICAgICBmdWxsOiBzcWw8c3RyaW5nPmBmaXJzdF9uYW1lIHx8XHUwMEEwJyAnIHx8IGxhc3RfbmFtZWBcbiAqICAgICB9KS5hcygnbmFtZScpXG4gKiAgIF0pXG4gKiAgIC5leGVjdXRlKClcbiAqXG4gKiByZXN1bHRbMF0/LmlkXG4gKiByZXN1bHRbMF0/Lm5hbWUuZmlyc3RcbiAqIHJlc3VsdFswXT8ubmFtZS5sYXN0XG4gKiByZXN1bHRbMF0/Lm5hbWUuZnVsbFxuICogYGBgXG4gKlxuICogVGhlIGdlbmVyYXRlZCBTUUwgKFNRTGl0ZSk6XG4gKlxuICogYGBgc3FsXG4gKiBzZWxlY3QgXCJpZFwiLCBqc29uX29iamVjdChcbiAqICAgJ2ZpcnN0JywgZmlyc3RfbmFtZSxcbiAqICAgJ2xhc3QnLCBsYXN0X25hbWUsXG4gKiAgICdmdWxsJywgXCJmaXJzdF9uYW1lXCIgfHwgJyAnIHx8IFwibGFzdF9uYW1lXCJcbiAqICkgYXMgXCJuYW1lXCJcbiAqIGZyb20gXCJwZXJzb25cIlxuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBqc29uQnVpbGRPYmplY3Qob2JqKSB7XG4gICAgcmV0dXJuIHNxbCBganNvbl9vYmplY3QoJHtzcWwuam9pbihPYmplY3Qua2V5cyhvYmopLmZsYXRNYXAoKGspID0+IFtzcWwubGl0KGspLCBvYmpba11dKSl9KWA7XG59XG5mdW5jdGlvbiBnZXRTcWxpdGVKc29uT2JqZWN0QXJncyhub2RlLCB0YWJsZSkge1xuICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBnZXRKc29uT2JqZWN0QXJncyhub2RlLCB0YWJsZSk7XG4gICAgfVxuICAgIGNhdGNoIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdTUUxpdGUganNvbkFycmF5RnJvbSBhbmQganNvbk9iamVjdEZyb20gZnVuY3Rpb25zIGNhbiBvbmx5IGhhbmRsZSBleHBsaWNpdCBzZWxlY3Rpb25zIGR1ZSB0byBsaW1pdGF0aW9ucyBvZiB0aGUganNvbl9vYmplY3QgZnVuY3Rpb24uIHNlbGVjdEFsbCgpIGlzIG5vdCBhbGxvd2VkIGluIHRoZSBzdWJxdWVyeS4nKTtcbiAgICB9XG59XG4iLCAiLy8vIDxyZWZlcmVuY2UgdHlwZXM9XCIuL2pzb24tb2JqZWN0LWFyZ3MuZC50c1wiIC8+XG5pbXBvcnQgeyBFeHByZXNzaW9uV3JhcHBlciB9IGZyb20gJy4uL2V4cHJlc3Npb24vZXhwcmVzc2lvbi13cmFwcGVyLmpzJztcbmltcG9ydCB7IEFsaWFzTm9kZSB9IGZyb20gJy4uL29wZXJhdGlvbi1ub2RlL2FsaWFzLW5vZGUuanMnO1xuaW1wb3J0IHsgQ29sdW1uTm9kZSB9IGZyb20gJy4uL29wZXJhdGlvbi1ub2RlL2NvbHVtbi1ub2RlLmpzJztcbmltcG9ydCB7IElkZW50aWZpZXJOb2RlIH0gZnJvbSAnLi4vb3BlcmF0aW9uLW5vZGUvaWRlbnRpZmllci1ub2RlLmpzJztcbmltcG9ydCB7IFJlZmVyZW5jZU5vZGUgfSBmcm9tICcuLi9vcGVyYXRpb24tbm9kZS9yZWZlcmVuY2Utbm9kZS5qcyc7XG5pbXBvcnQgeyBUYWJsZU5vZGUgfSBmcm9tICcuLi9vcGVyYXRpb24tbm9kZS90YWJsZS1ub2RlLmpzJztcbmltcG9ydCB7IFZhbHVlTm9kZSB9IGZyb20gJy4uL29wZXJhdGlvbi1ub2RlL3ZhbHVlLW5vZGUuanMnO1xuZXhwb3J0IGZ1bmN0aW9uIGdldEpzb25PYmplY3RBcmdzKG5vZGUsIHRhYmxlKSB7XG4gICAgY29uc3QgYXJncyA9IFtdO1xuICAgIGZvciAoY29uc3QgeyBzZWxlY3Rpb246IHMgfSBvZiBub2RlLnNlbGVjdGlvbnMgPz8gW10pIHtcbiAgICAgICAgaWYgKFJlZmVyZW5jZU5vZGUuaXMocykgJiYgQ29sdW1uTm9kZS5pcyhzLmNvbHVtbikpIHtcbiAgICAgICAgICAgIGFyZ3MucHVzaChjb2xOYW1lKHMuY29sdW1uLmNvbHVtbi5uYW1lKSwgY29sUmVmKHRhYmxlLCBzLmNvbHVtbi5jb2x1bW4ubmFtZSkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKENvbHVtbk5vZGUuaXMocykpIHtcbiAgICAgICAgICAgIGFyZ3MucHVzaChjb2xOYW1lKHMuY29sdW1uLm5hbWUpLCBjb2xSZWYodGFibGUsIHMuY29sdW1uLm5hbWUpKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChBbGlhc05vZGUuaXMocykgJiYgSWRlbnRpZmllck5vZGUuaXMocy5hbGlhcykpIHtcbiAgICAgICAgICAgIGFyZ3MucHVzaChjb2xOYW1lKHMuYWxpYXMubmFtZSksIGNvbFJlZih0YWJsZSwgcy5hbGlhcy5uYW1lKSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYGNhbid0IGV4dHJhY3QgY29sdW1uIG5hbWVzIGZyb20gdGhlIHNlbGVjdCBxdWVyeSBub2RlYCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGFyZ3M7XG59XG5mdW5jdGlvbiBjb2xOYW1lKGNvbCkge1xuICAgIHJldHVybiBuZXcgRXhwcmVzc2lvbldyYXBwZXIoVmFsdWVOb2RlLmNyZWF0ZUltbWVkaWF0ZShjb2wpKTtcbn1cbmZ1bmN0aW9uIGNvbFJlZih0YWJsZSwgY29sKSB7XG4gICAgcmV0dXJuIG5ldyBFeHByZXNzaW9uV3JhcHBlcihSZWZlcmVuY2VOb2RlLmNyZWF0ZShDb2x1bW5Ob2RlLmNyZWF0ZShjb2wpLCBUYWJsZU5vZGUuY3JlYXRlKHRhYmxl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QixXQUFZLEVBQVFBLEVBQU8sU0FDM0IsZUFBZ0IsRUFBUUEsRUFBTyxHQUMvQixLQUFNRyxFQUNOLFNBQVUsRUFBUUgsRUFBTyxTQUN6QixPQUFBOUIsRUFDQSxNQUFPMkIsQ0FDVCxFQUVPRCxDQUNULEVBQ0EsQ0FBQyxDQUNILEVBRUEsT0FBQUYsRUFBUSxLQUFNLE9BQU9HLENBQVMsRUFBSSxDQUNoQyxRQUFTRSxFQUNULEtBQU1GLEVBQ04sT0FBUSxNQUNWLEVBRU9ILENBQ1QsRUFDQSxDQUNFLEtBQU0sQ0FBRSxPQUFRLENBQUMsRUFBRyxLQUFNLE1BQU8sQ0FDbkMsQ0FDRixFQUNBLFNBQVUsS0FDWixDQUNGLENBS08sU0FBU2EsSUFBaUIsQ0FDL0IsSUFBTTdCLEVBQVEsQ0FBRSxXQUFZLENBQUMsRUFBRyxJQUFLLFVBQVcsRUFDMUNTLEVBQVNxQixFQUFnQixFQUUvQixPQUFPcEIsRUFBb0IsQ0FBRSxNQUFBVixFQUFPLE9BQUFTLENBQU8sQ0FBQyxDQWM5QyIsCiAgIm5hbWVzIjogWyJpbml0X2RlZmluZV9BQ0NFTEVSQVRFX1NDSEVNQV9CWV9QUk9WSURFUiIsICJpbml0X2RlZmluZV9BQ0NFTEVSQVRFX1NDSEVNQV9CWV9QUk9WSURFUiIsICJpbml0X2RlZmluZV9BQ0NFTEVSQVRFX1NDSEVNQV9CWV9QUk9WSURFUiIsICJTUUxJVEVfQUZGSU5JVFlfVE9fTUVUQURBVEEiLCAiZGV0ZXJtaW5lQ29sdW1uQWZmaW5pdHkiLCAiZGVjbGFyZWREYXRhVHlwZSIsICJ1cHBlclR5cGUiLCAiaW5pdF9kZWZpbmVfQUNDRUxFUkFURV9TQ0hFTUFfQllfUFJPVklERVIiLCAiaW5pdF9kZWZpbmVfQUNDRUxFUkFURV9TQ0hFTUFfQllfUFJPVklERVIiLCAiZ2V0U1FMaXRlQnVpbGRlciIsICJyZXF1aXJlbWVudHMiLCAiZ2V0QnVpbGRlciIsICJTcWxpdGVBZGFwdGVyIiwgIlNxbGl0ZVF1ZXJ5Q29tcGlsZXIiLCAiZ2V0U2VsZWN0UXVlcnkiLCAiZGV0YWlscyIsICJyZXF1aXJlbWVudHMiLCAiZmlsdGVyIiwgInBhZ2VJbmRleCIsICJwYWdlU2l6ZSIsICJzb3J0T3JkZXIiLCAiY29sdW1ucyIsICJ0YWJsZU5hbWUiLCAiYnVpbGRlciIsICJnZXRTUUxpdGVCdWlsZGVyIiwgImZpbHRlckV4cHJlc3Npb24iLCAiZ2V0U2VsZWN0RmlsdGVyRXhwcmVzc2lvbiIsICJjb3VudFF1ZXJ5IiwgImViIiwgInNxbCIsICJjb21waWxlIiwgInFiIiwgIml0ZW0iLCAibW9ja1NlbGVjdFF1ZXJ5IiwgImdldERlbGV0ZVF1ZXJ5IiwgInJvd3MiLCAiYXBwbHlJbmZlcnJlZFJvd0ZpbHRlcnMiLCAiZ2V0Q3VycmVudFRpbWVzdGFtcE1pbGxpcyIsICJnZXRJbnNlcnRRdWVyeSIsICJyb3ciLCAiZXhwcmVzc2lvbkJ1aWxkZXIiLCAiaW5pdF9kZWZpbmVfQUNDRUxFUkFURV9TQ0hFTUFfQllfUFJPVklERVIiLCAiaW5pdF9kZWZpbmVfQUNDRUxFUkFURV9TQ0hFTUFfQllfUFJPVklERVIiLCAiaW5pdF9kZWZpbmVfQUNDRUxFUkFURV9TQ0hFTUFfQllfUFJPVklERVIiLCAiZ2V0SnNvbk9iamVjdEFyZ3MiLCAibm9kZSIsICJ0YWJsZSIsICJhcmdzIiwgInMiLCAiUmVmZXJlbmNlTm9kZSIsICJDb2x1bW5Ob2RlIiwgImNvbE5hbWUiLCAiY29sUmVmIiwgIkFsaWFzTm9kZSIsICJJZGVudGlmaWVyTm9kZSIsICJjb2wiLCAiRXhwcmVzc2lvbldyYXBwZXIiLCAiVmFsdWVOb2RlIiwgIlRhYmxlTm9kZSIsICJqc29uQXJyYXlGcm9tIiwgImV4cHIiLCAic3FsIiwgImdldFNxbGl0ZUpzb25PYmplY3RBcmdzIiwgImdldFNxbGl0ZUpzb25PYmplY3RBcmdzIiwgIm5vZGUiLCAidGFibGUiLCAiZ2V0SnNvbk9iamVjdEFyZ3MiLCAiZ2V0VGFibGVzUXVlcnkiLCAicmVxdWlyZW1lbnRzIiwgImNvbXBpbGUiLCAiZ2V0U1FMaXRlQnVpbGRlciIsICJleHByZXNzaW9uQnVpbGRlciIsICJqYiIsICJlYiIsICJqc29uQXJyYXlGcm9tIiwgIm1vY2tUYWJsZXNRdWVyeSIsICJzY2hlbWEiLCAiZmlsdGVyT3BlcmF0b3JzIiwgImNyZWF0ZVNRTGl0ZUFkYXB0ZXIiLCAicmVxdWlyZW1lbnRzIiwgImV4ZWN1dG9yIiwgIm90aGVyUmVxdWlyZW1lbnRzIiwgImRldGFpbHMiLCAib3B0aW9ucyIsICJxdWVyeSIsICJnZXREZWxldGVRdWVyeSIsICJlcnJvciIsICJjcmVhdGVBZGFwdGVyRXJyb3IiLCAiZ2V0SW5zZXJ0UXVlcnkiLCAicm93cyIsICJ0YWJsZXNRdWVyeSIsICJnZXRUYWJsZXNRdWVyeSIsICJ0YWJsZXNFcnJvciIsICJ0YWJsZXMiLCAiY3JlYXRlSW50cm9zcGVjdGlvbiIsICJnZXRTZWxlY3RRdWVyeSIsICJyZXN1bHRzIiwgIl9kZXRhaWxzIiwgIl9vcHRpb25zIiwgImFyZ3MiLCAic2NoZW1hcyIsICJ0YWJsZSIsICJjb2x1bW5zIiwgInRhYmxlTmFtZSIsICJfc3FsIiwgImNvbHVtbnNSZWNvcmQiLCAiY29sdW1uIiwgImRhdGF0eXBlIiwgImZvcmVpZ25fa2V5X2NvbHVtbiIsICJjb2x1bW5OYW1lIiwgImFmZmluaXR5IiwgImRldGVybWluZUNvbHVtbkFmZmluaXR5IiwgIlNRTElURV9BRkZJTklUWV9UT19NRVRBREFUQSIsICJtb2NrSW50cm9zcGVjdCIsICJtb2NrVGFibGVzUXVlcnkiXQp9Cg==
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { E as Executor, Q as Query, a as ExecuteOptions, b as Either, c as QueryResult } from '../../index-
|
|
1
|
+
import { E as Executor, Q as Query, a as ExecuteOptions, b as Either, c as QueryResult } from '../../index-DSeTZ-is.cjs';
|
|
2
2
|
import 'kysely';
|
|
3
3
|
|
|
4
4
|
declare function deserializeRawResult(response: RawResponse, valueDeserializerFn?: (value: unknown, type: QueryIntrospectionBuiltinType, column: string) => unknown): DeserializedResponse;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { E as Executor, Q as Query, a as ExecuteOptions, b as Either, c as QueryResult } from '../../index-
|
|
1
|
+
import { E as Executor, Q as Query, a as ExecuteOptions, b as Either, c as QueryResult } from '../../index-DSeTZ-is.js';
|
|
2
2
|
import 'kysely';
|
|
3
3
|
|
|
4
4
|
declare function deserializeRawResult(response: RawResponse, valueDeserializerFn?: (value: unknown, type: QueryIntrospectionBuiltinType, column: string) => unknown): DeserializedResponse;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { E as Executor, Q as Query, a as ExecuteOptions, b as Either, c as QueryResult } from '../../index-
|
|
1
|
+
import { E as Executor, Q as Query, a as ExecuteOptions, b as Either, c as QueryResult } from '../../index-DSeTZ-is.cjs';
|
|
2
2
|
import 'kysely';
|
|
3
3
|
|
|
4
4
|
interface StudioBFFClientProps {
|
package/dist/data/bff/index.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { E as Executor, Q as Query, a as ExecuteOptions, b as Either, c as QueryResult } from '../../index-
|
|
1
|
+
import { E as Executor, Q as Query, a as ExecuteOptions, b as Either, c as QueryResult } from '../../index-DSeTZ-is.js';
|
|
2
2
|
import 'kysely';
|
|
3
3
|
|
|
4
4
|
interface StudioBFFClientProps {
|
package/dist/data/index.d.cts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export { H as AbortError, A as Adapter, k as AdapterBaseOptions, f as AdapterDeleteDetails, p as AdapterDeleteOptions, z as AdapterDeleteResult,
|
|
1
|
+
export { H as AbortError, A as Adapter, k as AdapterBaseOptions, f as AdapterDeleteDetails, p as AdapterDeleteOptions, z as AdapterDeleteResult, h as AdapterError, g as AdapterInsertDetails, n as AdapterInsertOptions, x as AdapterInsertResult, l as AdapterIntrospectOptions, q as AdapterIntrospectResult, e as AdapterQueryDetails, m as AdapterQueryOptions, w as AdapterQueryResult, d as AdapterRequirements, i as AdapterUpdateDetails, o as AdapterUpdateOptions, y as AdapterUpdateResult, J as BigIntString, C as Column, s as ColumnFilter, D as DataType, r as DataTypeGroup, b as Either, a as ExecuteOptions, E as Executor, t as FilterGroup, F as FilterOperator, N as NumericString, Q as Query, c as QueryResult, S as Schema, v as SortDirection, u as SortOrderItem, T as Table, j as applyInferredRowFilters, G as createAdapterError, I as getAbortResult } from '../index-DSeTZ-is.cjs';
|
|
2
2
|
import 'kysely';
|
package/dist/data/index.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export { H as AbortError, A as Adapter, k as AdapterBaseOptions, f as AdapterDeleteDetails, p as AdapterDeleteOptions, z as AdapterDeleteResult,
|
|
1
|
+
export { H as AbortError, A as Adapter, k as AdapterBaseOptions, f as AdapterDeleteDetails, p as AdapterDeleteOptions, z as AdapterDeleteResult, h as AdapterError, g as AdapterInsertDetails, n as AdapterInsertOptions, x as AdapterInsertResult, l as AdapterIntrospectOptions, q as AdapterIntrospectResult, e as AdapterQueryDetails, m as AdapterQueryOptions, w as AdapterQueryResult, d as AdapterRequirements, i as AdapterUpdateDetails, o as AdapterUpdateOptions, y as AdapterUpdateResult, J as BigIntString, C as Column, s as ColumnFilter, D as DataType, r as DataTypeGroup, b as Either, a as ExecuteOptions, E as Executor, t as FilterGroup, F as FilterOperator, N as NumericString, Q as Query, c as QueryResult, S as Schema, v as SortDirection, u as SortOrderItem, T as Table, j as applyInferredRowFilters, G as createAdapterError, I as getAbortResult } from '../index-DSeTZ-is.js';
|
|
2
2
|
import 'kysely';
|