@allbridge/bridge-core-sdk 3.32.0 → 3.32.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/cjs/index.js CHANGED
@@ -1,7 +1,7 @@
1
- "use strict";var Hg=Object.create;var vi=Object.defineProperty;var Jg=Object.getOwnPropertyDescriptor;var Og=Object.getOwnPropertyNames;var zg=Object.getPrototypeOf,Ug=Object.prototype.hasOwnProperty;var va=(i,n)=>{for(var a in n)vi(i,a,{get:n[a],enumerable:!0})},Ps=(i,n,a,r)=>{if(n&&typeof n=="object"||typeof n=="function")for(let o of Og(n))!Ug.call(i,o)&&o!==a&&vi(i,o,{get:()=>n[o],enumerable:!(r=Jg(n,o))||r.enumerable});return i};var Ft=(i,n,a)=>(a=i!=null?Hg(zg(i)):{},Ps(n||!i||!i.__esModule?vi(a,"default",{value:i,enumerable:!0}):a,i)),Dg=i=>Ps(vi({},"__esModule",{value:!0}),i);var Bp={};va(Bp,{AddressStatus:()=>fi,AllbridgeCoreSdk:()=>Vs,AmountFormat:()=>Va,AmountNotEnoughError:()=>Gt,ArgumentInvalidDecimalsError:()=>Ba,CCTPDoesNotSupportedError:()=>we,ChainSymbol:()=>et,ChainType:()=>U,ErrorCode:()=>Xs,ExtraGasMaxLimitExceededError:()=>Ta,FeePaymentMethod:()=>gt,InsufficientPoolLiquidityError:()=>Zt,InvalidAmountError:()=>yt,InvalidGasFeePaymentOptionError:()=>Ut,InvalidMessengerOptionError:()=>Ra,InvalidTxError:()=>fn,JupiterError:()=>Ge,Messenger:()=>Je,MethodNotSupportedError:()=>J,NodeRpcUrlNotInitializedError:()=>Ya,OFTDoesNotSupportedError:()=>Ze,SdkError:()=>f,SdkRootError:()=>Ce,SolanaAutoTxFee:()=>zi,TimeoutError:()=>Ln,TxTooLargeError:()=>Wa,VerifyTxError:()=>Mn,YieldDoesNotSupportedError:()=>wa,assertYieldIsSupported:()=>fg,isYieldSupported:()=>mi,mainnet:()=>fa,nodeRpcUrlsDefault:()=>Kg,nodeUrlsDefault:()=>Qg});module.exports=Dg(Bp);var fa={coreApiUrl:"https://core.api.allbridgecoreapi.net",coreApiQueryParams:{},coreApiHeaders:{},jupiterUrl:"https://lite-api.jup.ag/swap/v1",wormholeMessengerProgramId:"worm2ZoG2kUd4vFXhvjh93UUH596ayRfgQ2MgjNMTth",solanaLookUpTable:"2JcBAEVnAwVo4u8d61iqgHPrzZuugur7cVTjWubsVLHj",sorobanNetworkPassphrase:"Public Global Stellar Network ; September 2015",tronJsonRpc:"https://api.trongrid.io/jsonrpc",cctpParams:{cctpTransmitterProgramId:"CCTPmbSD7gX1bxKPAmg77w8oFzNFpaQiQUWD43TKaecd",cctpTokenMessengerMinter:"CCTPiPYPc6AsJuwueEnWgSgucamXDZwBd53dQ11YiKX3",cctpV2TransmitterProgramId:"CCTPV2Sm4AdWt5296sk4P66VBZ7bEhcARwFaaS9YPbeC",cctpV2TokenMessengerMinter:"CCTPV2vPZJS2u2BBsUoscuikbYjnpFmbFsvVuJdgUMQe",cctpDomains:{ETH:0,AVA:1,OPT:2,ARB:3,SOL:5,BAS:6,POL:7,SUI:8}},cachePoolInfoChainSec:20},Qg={solanaRpcUrl:"https://api.mainnet-beta.solana.com",tronRpcUrl:"https://api.trongrid.io"},Kg={SOL:"https://api.mainnet-beta.solana.com",TRX:"https://api.trongrid.io",SRB:"https://rpc.stellar.org:443",STLR:"https://horizon.stellar.org",SUI:"https://fullnode.mainnet.sui.io",STX:"https://api.hiro.so"};var Ts=require("@algorandfoundation/algokit-utils"),rg=require("tronweb"),og=require("web3");var Ce=class extends Error{errorCode;constructor(n,a){super(a),this.errorCode=n}},f=class extends Ce{constructor(n){super("SdkError",n)}},yt=class extends Ce{constructor(n){super("InvalidAmountError",n)}},Gt=class extends Ce{constructor(n){super("AmountNotEnoughError",n)}},Zt=class extends Ce{constructor(n){super("InsufficientPoolLiquidityError",n)}},Ge=class extends Ce{constructor(n){super("JupiterError",n)}},Ut=class extends Ce{constructor(n){super("InvalidGasFeePaymentOptionError",n)}},Ra=class extends Ce{constructor(n){super("InvalidMessengerOptionError",n)}},J=class extends Ce{constructor(n){super("MethodNotSupportedError",n)}},Mn=class extends Ce{constructor(n){super("VerifyTxError",n)}},fn=class extends Ce{constructor(n){super("InvalidTxError",n)}},Ta=class extends Ce{constructor(n){super("ExtraGasMaxLimitExceededError",n)}},Ba=class extends Ce{constructor(n,a,r){super("ArgumentInvalidDecimalsError",`Argument '${n}' decimals '${a}' cannot be greater than '${r}'`)}},Ln=class extends Ce{constructor(n){super("TimeoutError",n)}},Ya=class extends Ce{constructor(n){super("NodeRpcUrlNotInitializedError",`For chain '${n}' Node RPC URL not initialized`)}},we=class extends Ce{constructor(n){super("CCTPDoesNotSupportedError",n)}},Ze=class extends Ce{constructor(n){super("OFTDoesNotSupportedError",n)}},wa=class extends Ce{constructor(n){super("YieldDoesNotSupportedError",n)}},Wa=class extends Ce{constructor(){super("TxTooLargeError","Transaction too large: try again later or switch to another messenger or pay relayer fee in native gas currency")}},Xs=(h=>(h.SDK_ERROR="SdkError",h.INVALID_AMOUNT_ERROR="InvalidAmountError",h.AMOUNT_NOT_ENOUGH_ERROR="AmountNotEnoughError",h.INSUFFICIENT_POOL_LIQUIDITY_ERROR="InsufficientPoolLiquidityError",h.JUPITER_ERROR="JupiterError",h.INVALID_GAS_FEE_PAYMENT_OPTION_ERROR="InvalidGasFeePaymentOptionError",h.INVALID_MESSENGER_OPTION_ERROR="InvalidMessengerOptionError",h.METHOD_NOT_SUPPORTED_ERROR="MethodNotSupportedError",h.VERIFY_TX_ERROR="VerifyTxError",h.INVALID_TX_ERROR="InvalidTxError",h.EXTRA_GAS_MAX_LIMIT_EXCEEDED_ERROR="ExtraGasMaxLimitExceededError",h.ARGUMENT_INVALID_DECIMALS_ERROR="ArgumentInvalidDecimalsError",h.TIMEOUT_ERROR="TimeoutError",h.NODE_RPC_URL_NOT_INITIALIZED_ERROR="NodeRpcUrlNotInitializedError",h.CCTP_DOES_NOT_SUPPORTED_ERROR="CCTPDoesNotSupportedError",h.OFT_DOES_NOT_SUPPORTED_ERROR="OFTDoesNotSupportedError",h.YIELD_DOES_NOT_SUPPORTED_ERROR="YieldDoesNotSupportedError",h.TX_TOO_LARGE="TxTooLargeError",h))(Xs||{});var et=(h=>(h.BSC="BSC",h.ETH="ETH",h.BAS="BAS",h.SOL="SOL",h.TRX="TRX",h.POL="POL",h.ARB="ARB",h.CEL="CEL",h.AVA="AVA",h.SRB="SRB",h.STLR="STLR",h.OPT="OPT",h.SUI="SUI",h.SNC="SNC",h.UNI="UNI",h.LIN="LIN",h.ALG="ALG",h.STX="STX",h))(et||{}),U=(c=>(c.EVM="EVM",c.SOLANA="SOLANA",c.TRX="TRX",c.SRB="SRB",c.SUI="SUI",c.ALG="ALG",c.STX="STX",c))(U||{});var Eg={EVM:18,SOLANA:9,TRX:6,SRB:7,SUI:9,ALG:6,STX:6},_g={BSC:{chainSymbol:"BSC",chainId:"0x38",name:"BNB Chain",chainType:"EVM"},ETH:{chainSymbol:"ETH",chainId:"0x1",name:"Ethereum",chainType:"EVM"},BAS:{chainSymbol:"BAS",chainId:"0x2105",name:"Base",chainType:"EVM"},ARB:{chainSymbol:"ARB",chainId:"0xa4b1",name:"Arbitrum",chainType:"EVM"},AVA:{chainSymbol:"AVA",chainId:"0xa86a",name:"Avalanche",chainType:"EVM"},CEL:{chainSymbol:"CEL",chainId:"0xa4ec",name:"Celo",chainType:"EVM"},POL:{chainSymbol:"POL",chainId:"0x89",name:"Polygon",chainType:"EVM"},OPT:{chainSymbol:"OPT",chainId:"0xa",name:"OP Mainnet",chainType:"EVM"},SNC:{chainSymbol:"SNC",chainId:"0x92",name:"Sonic",chainType:"EVM"},UNI:{chainSymbol:"UNI",chainId:"0x82",name:"Unichain",chainType:"EVM"},LIN:{chainSymbol:"LIN",chainId:"0xe708",name:"Linea",chainType:"EVM"},SOL:{chainSymbol:"SOL",name:"Solana",chainType:"SOLANA"},TRX:{chainSymbol:"TRX",name:"Tron",chainType:"TRX"},SRB:{chainSymbol:"SRB",name:"Stellar",chainType:"SRB"},STLR:{chainSymbol:"STLR",name:"Stellar",chainType:"SRB"},SUI:{chainSymbol:"SUI",name:"Sui",chainType:"SUI"},ALG:{chainSymbol:"ALG",name:"Algorand",chainType:"ALG"},STX:{chainSymbol:"STX",name:"Stacks",chainType:"STX"}},x=(()=>{let i={..._g};return{addChainsProperties(n){i={...i,...n}},getChainProperty(n){let a=i[n];if(!a)throw new f(`Cannot find chain properties for ${n}`);return a},getChainsProperties(){return i},getChainDecimalsByType(n){return Eg[n]}}})();var fi=(d=>(d.OK="OK",d.INVALID="INVALID",d.FORBIDDEN="FORBIDDEN",d.UNINITIALIZED="UNINITIALIZED",d.CONTRACT_ADDRESS="CONTRACT_ADDRESS",d.WRONG_ASSOCIATED_ACCOUNT_OWNER="WRONG_ASSOCIATED_ACCOUNT_OWNER",d))(fi||{}),qr=(d=>(d.ALLBRIDGE="allbridge",d.WORMHOLE="wormhole",d.CCTP="cctp",d.CCTP_V2="cctpV2",d.OFT="oft",d.X_RESERVE="xReserve",d))(qr||{}),Je=(d=>(d[d.ALLBRIDGE=1]="ALLBRIDGE",d[d.WORMHOLE=2]="WORMHOLE",d[d.CCTP=3]="CCTP",d[d.CCTP_V2=4]="CCTP_V2",d[d.OFT=5]="OFT",d[d.X_RESERVE=6]="X_RESERVE",d))(Je||{});var Ri=require("big.js");function se(i,n){throw new Error(n??`Unexpected value: ${i}`)}async function Se(i,n){return await i.getPoolInfoByKey({chainSymbol:n.chainSymbol,poolAddress:n.poolAddress})}function D(i){if((0,Ri.Big)(i).lte(0))throw new yt("Amount must be greater than zero")}function eo(i){if((0,Ri.Big)(i).lt(0))throw new yt("Amount must be greater or equal than zero")}function O(i,n,a){let r=(0,Ri.Big)(n).toFixed(),[o,s]=r.split(".");if(s&&s.length>a)throw new Ba(i,s.length,a)}async function Ti(i,n,a){return await Promise.race([i,new Promise((r,o)=>{setTimeout(()=>o(new Ln(n)),a)})])}async function to(i,n,a,r){if(a<1)throw new Error(`Bad argument: 'maxRetries' must be greater than 0, but ${a} was received.`);let o=0;for(;;)try{return await Ti(i(),n,r)}catch{if(++o>=a)throw new Ln(n)}}async function js(i,n,a,r=1.5,o=!1){let s=[],d=0,c=await i();if(s.push(c),!n(c))return s;let g=new Date(Date.now()+a*1e3).valueOf(),l=1e3,A=l;for(;Date.now()<g;){let u=s[s.length-1];if(u===void 0||!n(u))break;d++,o&&console.info(`Waiting ${l}ms before trying again (bringing the total wait time to ${A}ms so far, of total ${a*1e3}ms)`),await new Promise(y=>setTimeout(y,l)),l=l*r,new Date(Date.now()+l).valueOf()>g&&(l=g-Date.now(),o&&console.info(`was gonna wait too long; new waitTime: ${l}ms`)),A=l+A;let m=await i(u);s.push(m),o&&n(m)&&console.info(`${d}. Called ${i.name}; ${s.length} prev attempts. Most recent: ${JSON.stringify(s[s.length-1],null,2)}`)}return s}var qs=require("@algorandfoundation/algokit-utils/types/account"),ed=require("@algorandfoundation/algokit-utils/types/amount"),Pa=Ft(require("algosdk"));var Ms=require("@algorandfoundation/algokit-utils/types/app-arc56"),Na=require("@algorandfoundation/algokit-utils/types/app-client"),$g=require("@algorandfoundation/algokit-utils/types/app-factory"),Bi={name:"Bridge",structs:{},methods:[{name:"createApplication",args:[{type:"address",name:"owner"},{type:"byte",name:"chainId"},{type:"uint64",name:"messenger"},{type:"uint64",name:"gasOracle"}],returns:{type:"void"},actions:{create:["NoOp"],call:[]},readonly:!1,events:[],recommendations:{}},{name:"optInAsset",args:[{type:"uint64",name:"asset"}],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[],recommendations:{}},{name:"swapAndBridge",args:[{type:"pay",name:"paymentRef"},{type:"axfer",name:"assetTransferRef"},{type:"byte[32]",name:"recipient"},{type:"byte",name:"destinationChainId"},{type:"byte[32]",name:"receiveToken"},{type:"byte[32]",name:"nonce"},{type:"uint64",name:"budget",defaultValue:{source:"literal",data:"AAAAAAAAA+g=",type:"uint64"}}],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[{name:"BridgingFeeFromTokens",args:[{type:"uint64",name:"feeFromNative"},{type:"uint64",name:"feeFromStable"},{type:"uint64",name:"feeStableTokenAmount"}]},{name:"ReceiveFee",args:[{type:"uint64",name:"bridgeTransactionCost"},{type:"uint64",name:"messageTransactionCost"}]},{name:"TokensSent",args:[{type:"uint64",name:"amount"},{type:"byte[32]",name:"recipient"},{type:"byte",name:"destinationChainId"},{type:"byte[32]",name:"receiveToken"},{type:"byte[32]",name:"nonce"},{type:"byte",name:"messenger"}]}],recommendations:{}},{name:"swapAndBridgeWithStable",args:[{type:"axfer",name:"assetTransferRef"},{type:"byte[32]",name:"recipient"},{type:"byte",name:"destinationChainId"},{type:"byte[32]",name:"receiveToken"},{type:"byte[32]",name:"nonce"},{type:"uint64",name:"feeTokenAmount"},{type:"uint64",name:"budget",defaultValue:{source:"literal",data:"AAAAAAAAA+g=",type:"uint64"}}],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[{name:"BridgingFeeFromTokens",args:[{type:"uint64",name:"feeFromNative"},{type:"uint64",name:"feeFromStable"},{type:"uint64",name:"feeStableTokenAmount"}]},{name:"ReceiveFee",args:[{type:"uint64",name:"bridgeTransactionCost"},{type:"uint64",name:"messageTransactionCost"}]},{name:"TokensSent",args:[{type:"uint64",name:"amount"},{type:"byte[32]",name:"recipient"},{type:"byte",name:"destinationChainId"},{type:"byte[32]",name:"receiveToken"},{type:"byte[32]",name:"nonce"},{type:"byte",name:"messenger"}]}],recommendations:{}},{name:"receiveTokens",args:[{type:"pay",name:"paymentRef"},{type:"uint64",name:"amount"},{type:"byte[32]",name:"recipient"},{type:"byte",name:"sourceChainId"},{type:"byte[32]",name:"receiveToken"},{type:"byte[32]",name:"nonce"},{type:"uint64",name:"receiveAmountMin"}],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[{name:"TokensReceived",args:[{type:"uint64",name:"receiveAmount"},{type:"address",name:"recipient"},{type:"byte[32]",name:"nonce"},{type:"byte",name:"messenger"},{type:"byte[32]",name:"message"}]}],recommendations:{}},{name:"registerBridge",args:[{type:"byte",name:"chainId"},{type:"byte[32]",name:"bridgeAddress"}],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[],recommendations:{}},{name:"addBridgeToken",args:[{type:"byte",name:"chainId"},{type:"byte[32]",name:"tokenAddress"}],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[],recommendations:{}},{name:"removeBridgeToken",args:[{type:"byte",name:"chainId"},{type:"byte[32]",name:"tokenAddress"}],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[],recommendations:{}},{name:"withdrawGasTokens",args:[{type:"uint64",name:"amount"}],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[],recommendations:{}},{name:"withdrawBridgingFeeInTokens",args:[{type:"uint64",name:"asset"}],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[],recommendations:{}},{name:"getBridgingCostInTokens",args:[{type:"byte",name:"destinationChainId"},{type:"uint64",name:"asset"}],returns:{type:"uint64"},actions:{create:[],call:["NoOp"]},readonly:!0,events:[],recommendations:{}},{name:"hashMessage",args:[{type:"uint64",name:"amount"},{type:"byte[32]",name:"recipient"},{type:"byte",name:"sourceChainId"},{type:"byte",name:"destinationChainId"},{type:"byte[32]",name:"receiveToken"},{type:"byte[32]",name:"nonce"}],returns:{type:"byte[32]"},actions:{create:[],call:["NoOp"]},readonly:!0,events:[],recommendations:{}},{name:"isOtherBridgeTokenSupported",args:[{type:"byte",name:"chainId"},{type:"byte[32]",name:"token"}],returns:{type:"bool"},actions:{create:[],call:["NoOp"]},readonly:!0,events:[],recommendations:{}},{name:"getTransactionCost",args:[{type:"byte",name:"chainId"}],returns:{type:"uint64"},actions:{create:[],call:["NoOp"]},readonly:!0,events:[],recommendations:{}},{name:"getReceiveTokensCost",args:[],returns:{type:"uint64"},actions:{create:[],call:["NoOp"]},readonly:!0,events:[],recommendations:{}},{name:"getSendTransactionStorageCost",args:[],returns:{type:"uint64"},actions:{create:[],call:["NoOp"]},readonly:!0,events:[],recommendations:{}},{name:"swap",args:[{type:"axfer",name:"assetTransferRef",desc:"The token to be swapped."},{type:"uint64",name:"receiveAsset",desc:"The token to receive in exchange for the swapped token."},{type:"address",name:"recipient",desc:"The address to receive the tokens."},{type:"uint64",name:"receiveAmountMin",desc:"The minimum amount of tokens required to receive during the swap."},{type:"uint64",name:"budget",defaultValue:{source:"literal",data:"AAAAAAAAA+g=",type:"uint64"}}],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[{name:"Swapped",args:[{type:"address",name:"sender"},{type:"address",name:"recipient"},{type:"uint64",name:"tokenId"},{type:"uint64",name:"receiveTokenId"},{type:"uint64",name:"amount"},{type:"uint64",name:"receivedAmount"}]}],recommendations:{}},{name:"addPool",args:[{type:"uint64",name:"poolId",desc:"The address of the `Pool` contract."},{type:"uint64",name:"asset",desc:"The address of the token in the liquidity pool."}],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[],recommendations:{}},{name:"removePool",args:[{type:"uint64",name:"tokenId"}],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[],recommendations:{}},{name:"stopSwap",args:[],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[],recommendations:{}},{name:"startSwap",args:[],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[],recommendations:{}},{name:"setStopAuthority",args:[{type:"address",name:"stopAuthority"}],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[],recommendations:{}},{name:"setRebalancer",args:[{type:"address",name:"rebalancer"}],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[],recommendations:{}},{name:"getGasUsage",args:[{type:"byte",name:"chainId"}],returns:{type:"uint64"},actions:{create:[],call:["NoOp"]},readonly:!0,events:[],recommendations:{}},{name:"setGasUsage",args:[{type:"byte",name:"chainId"},{type:"uint64",name:"gasAmount"}],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[],recommendations:{}},{name:"setGasOracle",args:[{type:"uint64",name:"gasOracle"}],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[],recommendations:{}},{name:"getTransactionRelayerCost",args:[{type:"byte",name:"chainId"}],returns:{type:"uint64"},actions:{create:[],call:["NoOp"]},readonly:!0,events:[],recommendations:{}},{name:"transferOwnership",args:[{type:"address",name:"newOwner"}],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[],recommendations:{}}],arcs:[22,28],networks:{},state:{schema:{global:{ints:3,bytes:4},local:{ints:0,bytes:0}},keys:{global:{chainId:{keyType:"AVMString",valueType:"byte",key:"Y2hhaW5JZA=="},messenger:{keyType:"AVMString",valueType:"AVMUint64",key:"bWVzc2VuZ2Vy"},stopAuthority:{keyType:"AVMString",valueType:"address",key:"c3RvcEF1dGhvcml0eQ=="},rebalancer:{keyType:"AVMString",valueType:"address",key:"cmViYWxhbmNlcg=="},canSwap:{keyType:"AVMString",valueType:"AVMUint64",key:"Y2FuU3dhcA=="},gasOracle:{keyType:"AVMString",valueType:"AVMUint64",key:"Z2FzT3JhY2xl"},owner:{keyType:"AVMString",valueType:"address",key:"b3duZXI="}},local:{},box:{}},maps:{global:{},local:{},box:{processedMessages:{keyType:"byte[32]",valueType:"byte[0]",prefix:"bQ=="},sentMessages:{keyType:"byte[32]",valueType:"byte[0]",prefix:"cw=="},otherBridges:{keyType:"byte",valueType:"byte[32]",prefix:"Yg=="},otherBridgeTokens:{keyType:"AVMBytes",valueType:"byte[0]",prefix:"dA=="},pools:{keyType:"uint64",valueType:"uint64",prefix:"cA=="},fromGasOracleScalingFactor:{keyType:"uint64",valueType:"uint64",prefix:"ZQ=="},bridgingFeeConversionScalingFactor:{keyType:"uint64",valueType:"uint64",prefix:"Zg=="},gasUsage:{keyType:"byte",valueType:"uint64",prefix:"dQ=="}}}},bareActions:{create:[],call:[]},sourceInfo:{approval:{sourceInfo:[{pc:[431],errorMessage:"Asset must go to app"},{pc:[877,1323,2099,2412,2424],errorMessage:"Box must have value"},{pc:[1835],errorMessage:"Bridge: amount too low for fee"},{pc:[1842],errorMessage:"Bridge: bridge to the zero address"},{pc:[911],errorMessage:"Bridge: message processed"},{pc:[961],errorMessage:"Bridge: no message"},{pc:[853,2063],errorMessage:"Bridge: not enough fee"},{pc:[843],errorMessage:"Bridge: source not registered"},{pc:[1950],errorMessage:"Bridge: tokens already sent"},{pc:[1915],errorMessage:"Bridge: unknown chain or token"},{pc:[1902],errorMessage:"Bridge: wrong destination chain"},{pc:[953,1256,1308,1995,2146,2289,2395,2469],errorMessage:"Bytes has valid prefix"},{pc:[447],errorMessage:"CloseTo not allowed"},{pc:[137],errorMessage:"OnCompletion must be NoOp"},{pc:[2484],errorMessage:"Only owner"},{pc:[439],errorMessage:"Rekey not allowed"},{pc:[1665],errorMessage:"Router: is not stopAuthority"},{pc:[2311],errorMessage:"Router: no pool"},{pc:[2221],errorMessage:"Router: no receive pool"},{pc:[832,1502,1825],errorMessage:"Router: swap prohibited"},{pc:[1166],errorMessage:"account opted into asset"},{pc:[2006,2319],errorMessage:"application exists"},{pc:[1599],errorMessage:"asset exists"},{pc:[831,858,920,1127,1174,1225,1267,1501,1663,1824,1896,1964,2108,2113,2236,2346,2430,2482],errorMessage:"check GlobalState exists"},{pc:[1956],errorMessage:"index access is out of bounds"},{pc:[958],errorMessage:"invalid number of bytes for arc4.bool"},{pc:[504,642,658,666,711,727,735,791,807,818,1040,1069,1098,1349,1373,1381,1406,1475,1686,1703,1803],errorMessage:"invalid number of bytes for arc4.static_array<arc4.uint8, 32>"},{pc:[520,529,561,674,743,752,779,826,1118,1148,1213,1261,1313,1340,1466,1483,1492,1571,1580,1643,1746,1768,2e3,2151,2294,2400,2474],errorMessage:"invalid number of bytes for arc4.uint64"},{pc:[512,650,719,799,1032,1061,1090,1205,1357,1365,1398,1434,1720,1738,1785],errorMessage:"invalid number of bytes for arc4.uint8"},{pc:[899,2205],errorMessage:"invalid size"},{pc:[634,703,1458],errorMessage:"transaction type is axfer"},{pc:[623,771],errorMessage:"transaction type is pay"}],pcOffsetMethod:"none"},clear:{sourceInfo:[],pcOffsetMethod:"none"}},source:{approval:"I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMSAwIDggMzIgMTU3MDAKICAgIGJ5dGVjYmxvY2sgMHgxNTFmN2M3NSAiY2FuU3dhcCIgIm93bmVyIiAiZ2FzT3JhY2xlIiAicmViYWxhbmNlciIgImNoYWluSWQiICJtZXNzZW5nZXIiICJ0IiAicCIgInN0b3BBdXRob3JpdHkiIDB4MDEgMHgwMCAidSIgMHg0MzQxN2FhMyAweGY3NDc1YjgyIDB4MTUxZjdjNzUwMDAwMDAwMDAwMDAzZDU0IDB4MDY4MTAxCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYm56IG1haW5fYWZ0ZXJfaWZfZWxzZUAyCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjUyCiAgICAvLyBwcml2YXRlIHJlYmFsYW5jZXIgPSBHbG9iYWxTdGF0ZTxBZGRyZXNzPih7IGluaXRpYWxWYWx1ZTogbmV3IEFkZHJlc3MoYnplcm8oMCkpIH0pOy8vIGNhbiByZXN0cmljdCBkZXBvc2l0IG9yIHdpdGhkcmF3IG9wZXJhdGlvbnMKICAgIGludGNfMSAvLyAwCiAgICBiemVybwogICAgYnl0ZWMgNCAvLyAicmViYWxhbmNlciIKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjUzCiAgICAvLyBjYW5Td2FwID0gR2xvYmFsU3RhdGU8Ym9vbGVhbj4oeyBpbml0aWFsVmFsdWU6IHRydWUgfSk7CiAgICBieXRlY18xIC8vICJjYW5Td2FwIgogICAgaW50Y18wIC8vIDEKICAgIGFwcF9nbG9iYWxfcHV0CgptYWluX2FmdGVyX2lmX2Vsc2VAMjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6NTUKICAgIC8vIGV4cG9ydCBjbGFzcyBCcmlkZ2UgZXh0ZW5kcyBSb3V0ZXIgaW1wbGVtZW50cyBDb252ZW50aW9uYWxSb3V0aW5nLCBJQnJpZGdlIHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gbXVzdCBiZSBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYnogbWFpbl9jcmVhdGVfTm9PcEAzMwogICAgcHVzaGJ5dGVzcyAweDY1ZjcwNTczIDB4M2UzODAyN2MgMHhhNDYwMGFlZCAweGRlNGNhZDRhIDB4NGViYTA3MjEgMHhjNjE3ZWQ3MyAweDU3NTMxNTYwIDB4NjM4MDgyNzggMHgwNjUwN2M2YSAweGY1Zjk2ZWIzIDB4NGIwNjJjYTAgMHhjM2NkZDkyYSAvLyBtZXRob2QgIm9wdEluQXNzZXQodWludDY0KXZvaWQiLCBtZXRob2QgInN3YXBBbmRCcmlkZ2UocGF5LGF4ZmVyLGJ5dGVbMzJdLGJ5dGUsYnl0ZVszMl0sYnl0ZVszMl0sdWludDY0KXZvaWQiLCBtZXRob2QgInN3YXBBbmRCcmlkZ2VXaXRoU3RhYmxlKGF4ZmVyLGJ5dGVbMzJdLGJ5dGUsYnl0ZVszMl0sYnl0ZVszMl0sdWludDY0LHVpbnQ2NCl2b2lkIiwgbWV0aG9kICJyZWNlaXZlVG9rZW5zKHBheSx1aW50NjQsYnl0ZVszMl0sYnl0ZSxieXRlWzMyXSxieXRlWzMyXSx1aW50NjQpdm9pZCIsIG1ldGhvZCAicmVnaXN0ZXJCcmlkZ2UoYnl0ZSxieXRlWzMyXSl2b2lkIiwgbWV0aG9kICJhZGRCcmlkZ2VUb2tlbihieXRlLGJ5dGVbMzJdKXZvaWQiLCBtZXRob2QgInJlbW92ZUJyaWRnZVRva2VuKGJ5dGUsYnl0ZVszMl0pdm9pZCIsIG1ldGhvZCAid2l0aGRyYXdHYXNUb2tlbnModWludDY0KXZvaWQiLCBtZXRob2QgIndpdGhkcmF3QnJpZGdpbmdGZWVJblRva2Vucyh1aW50NjQpdm9pZCIsIG1ldGhvZCAiZ2V0QnJpZGdpbmdDb3N0SW5Ub2tlbnMoYnl0ZSx1aW50NjQpdWludDY0IiwgbWV0aG9kICJoYXNoTWVzc2FnZSh1aW50NjQsYnl0ZVszMl0sYnl0ZSxieXRlLGJ5dGVbMzJdLGJ5dGVbMzJdKWJ5dGVbMzJdIiwgbWV0aG9kICJpc090aGVyQnJpZGdlVG9rZW5TdXBwb3J0ZWQoYnl0ZSxieXRlWzMyXSlib29sIgogICAgYnl0ZWMgMTMgLy8gbWV0aG9kICJnZXRUcmFuc2FjdGlvbkNvc3QoYnl0ZSl1aW50NjQiCiAgICBwdXNoYnl0ZXNzIDB4MDdkZjg0MjkgMHg4MGM1YzcwZiAweDQxMzRkMDY4IDB4ZWYxNWY4NTUgMHg2YjFlZTIyMyAweDE4NzBhNDkyIDB4MzU1NzMyNGQgMHgwNGIxNjFmMSAweGQyYjM1N2ViIC8vIG1ldGhvZCAiZ2V0UmVjZWl2ZVRva2Vuc0Nvc3QoKXVpbnQ2NCIsIG1ldGhvZCAiZ2V0U2VuZFRyYW5zYWN0aW9uU3RvcmFnZUNvc3QoKXVpbnQ2NCIsIG1ldGhvZCAic3dhcChheGZlcix1aW50NjQsYWRkcmVzcyx1aW50NjQsdWludDY0KXZvaWQiLCBtZXRob2QgImFkZFBvb2wodWludDY0LHVpbnQ2NCl2b2lkIiwgbWV0aG9kICJyZW1vdmVQb29sKHVpbnQ2NCl2b2lkIiwgbWV0aG9kICJzdG9wU3dhcCgpdm9pZCIsIG1ldGhvZCAic3RhcnRTd2FwKCl2b2lkIiwgbWV0aG9kICJzZXRTdG9wQXV0aG9yaXR5KGFkZHJlc3Mpdm9pZCIsIG1ldGhvZCAic2V0UmViYWxhbmNlcihhZGRyZXNzKXZvaWQiCiAgICBieXRlYyAxNCAvLyBtZXRob2QgImdldEdhc1VzYWdlKGJ5dGUpdWludDY0IgogICAgcHVzaGJ5dGVzcyAweDBjYTVhZTdhIDB4Mjc0NzBmMDcgMHhjYmZjNmQwMiAweGUxN2JhZmI0IC8vIG1ldGhvZCAic2V0R2FzVXNhZ2UoYnl0ZSx1aW50NjQpdm9pZCIsIG1ldGhvZCAic2V0R2FzT3JhY2xlKHVpbnQ2NCl2b2lkIiwgbWV0aG9kICJnZXRUcmFuc2FjdGlvblJlbGF5ZXJDb3N0KGJ5dGUpdWludDY0IiwgbWV0aG9kICJ0cmFuc2Zlck93bmVyc2hpcChhZGRyZXNzKXZvaWQiCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAwCiAgICBtYXRjaCBvcHRJbkFzc2V0IHN3YXBBbmRCcmlkZ2Ugc3dhcEFuZEJyaWRnZVdpdGhTdGFibGUgcmVjZWl2ZVRva2VucyByZWdpc3RlckJyaWRnZSBhZGRCcmlkZ2VUb2tlbiByZW1vdmVCcmlkZ2VUb2tlbiB3aXRoZHJhd0dhc1Rva2VucyB3aXRoZHJhd0JyaWRnaW5nRmVlSW5Ub2tlbnMgZ2V0QnJpZGdpbmdDb3N0SW5Ub2tlbnMgaGFzaE1lc3NhZ2UgaXNPdGhlckJyaWRnZVRva2VuU3VwcG9ydGVkIGdldFRyYW5zYWN0aW9uQ29zdCBtYWluX2dldFJlY2VpdmVUb2tlbnNDb3N0X3JvdXRlQDE4IG1haW5fZ2V0U2VuZFRyYW5zYWN0aW9uU3RvcmFnZUNvc3Rfcm91dGVAMTkgc3dhcCBhZGRQb29sIHJlbW92ZVBvb2wgc3RvcFN3YXAgc3RhcnRTd2FwIHNldFN0b3BBdXRob3JpdHkgc2V0UmViYWxhbmNlciBnZXRHYXNVc2FnZSBzZXRHYXNVc2FnZSBzZXRHYXNPcmFjbGUgZ2V0VHJhbnNhY3Rpb25SZWxheWVyQ29zdCB0cmFuc2Zlck93bmVyc2hpcAogICAgZXJyCgptYWluX2dldFNlbmRUcmFuc2FjdGlvblN0b3JhZ2VDb3N0X3JvdXRlQDE5OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czozNTEKICAgIC8vIEBhYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgYnl0ZWMgMTUgLy8gMHgxNTFmN2M3NTAwMDAwMDAwMDAwMDNkNTQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl9nZXRSZWNlaXZlVG9rZW5zQ29zdF9yb3V0ZUAxODoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MzQ0CiAgICAvLyBAYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUgfSkKICAgIGJ5dGVjIDE1IC8vIDB4MTUxZjdjNzUwMDAwMDAwMDAwMDAzZDU0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fY3JlYXRlX05vT3BAMzM6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjU1CiAgICAvLyBleHBvcnQgY2xhc3MgQnJpZGdlIGV4dGVuZHMgUm91dGVyIGltcGxlbWVudHMgQ29udmVudGlvbmFsUm91dGluZywgSUJyaWRnZSB7CiAgICBwdXNoYnl0ZXMgMHg2NjRjYTQwNCAvLyBtZXRob2QgImNyZWF0ZUFwcGxpY2F0aW9uKGFkZHJlc3MsYnl0ZSx1aW50NjQsdWludDY0KXZvaWQiCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAwCiAgICBtYXRjaCBjcmVhdGVBcHBsaWNhdGlvbgogICAgZXJyCgoKLy8gX3B1eWFfbGliLnV0aWwuZW5zdXJlX2J1ZGdldChyZXF1aXJlZF9idWRnZXQ6IHVpbnQ2NCwgZmVlX3NvdXJjZTogdWludDY0KSAtPiB2b2lkOgplbnN1cmVfYnVkZ2V0OgogICAgcHJvdG8gMiAwCiAgICBmcmFtZV9kaWcgLTIKICAgIHB1c2hpbnQgMTAgLy8gMTAKICAgICsKCmVuc3VyZV9idWRnZXRfd2hpbGVfdG9wQDE6CiAgICBmcmFtZV9kaWcgMAogICAgZ2xvYmFsIE9wY29kZUJ1ZGdldAogICAgPgogICAgYnogZW5zdXJlX2J1ZGdldF9hZnRlcl93aGlsZUA2CiAgICBpdHhuX2JlZ2luCiAgICBwdXNoaW50IDYgLy8gYXBwbAogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgcHVzaGludCA1IC8vIERlbGV0ZUFwcGxpY2F0aW9uCiAgICBpdHhuX2ZpZWxkIE9uQ29tcGxldGlvbgogICAgYnl0ZWMgMTYgLy8gMHgwNjgxMDEKICAgIGl0eG5fZmllbGQgQXBwcm92YWxQcm9ncmFtCiAgICBieXRlYyAxNiAvLyAweDA2ODEwMQogICAgaXR4bl9maWVsZCBDbGVhclN0YXRlUHJvZ3JhbQogICAgZnJhbWVfZGlnIC0xCiAgICBzd2l0Y2ggZW5zdXJlX2J1ZGdldF9zd2l0Y2hfY2FzZV8wQDMgZW5zdXJlX2J1ZGdldF9zd2l0Y2hfY2FzZV8xQDQKCmVuc3VyZV9idWRnZXRfc3dpdGNoX2Nhc2VfbmV4dEA1OgogICAgaXR4bl9zdWJtaXQKICAgIGIgZW5zdXJlX2J1ZGdldF93aGlsZV90b3BAMQoKZW5zdXJlX2J1ZGdldF9zd2l0Y2hfY2FzZV8xQDQ6CiAgICBnbG9iYWwgTWluVHhuRmVlCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgYiBlbnN1cmVfYnVkZ2V0X3N3aXRjaF9jYXNlX25leHRANQoKZW5zdXJlX2J1ZGdldF9zd2l0Y2hfY2FzZV8wQDM6CiAgICBpbnRjXzEgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKICAgIGIgZW5zdXJlX2J1ZGdldF9zd2l0Y2hfY2FzZV9uZXh0QDUKCmVuc3VyZV9idWRnZXRfYWZ0ZXJfd2hpbGVANjoKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvdXRpbHMuYWxnby50czo6YW1vdW50RnJvbUFzc2V0VHJhbnNmZXIoYXNzZXRUcmFuc2ZlclR4bjogdWludDY0KSAtPiB1aW50NjQ6CmFtb3VudEZyb21Bc3NldFRyYW5zZmVyOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy91dGlscy5hbGdvLnRzOjIzCiAgICAvLyBleHBvcnQgZnVuY3Rpb24gYW1vdW50RnJvbUFzc2V0VHJhbnNmZXIoYXNzZXRUcmFuc2ZlclR4bjogZ3R4bi5Bc3NldFRyYW5zZmVyVHhuKTogdWludDY0IHsKICAgIHByb3RvIDEgMQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy91dGlscy5hbGdvLnRzOjI0CiAgICAvLyBhc3NlcnQoYXNzZXRUcmFuc2ZlclR4bi5hc3NldFJlY2VpdmVyID09PSBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcywgYEFzc2V0IG11c3QgZ28gdG8gYXBwYCk7CiAgICBmcmFtZV9kaWcgLTEKICAgIGd0eG5zIEFzc2V0UmVjZWl2ZXIKICAgIGdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCiAgICA9PQogICAgYXNzZXJ0IC8vIEFzc2V0IG11c3QgZ28gdG8gYXBwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3V0aWxzLmFsZ28udHM6MjcKICAgIC8vIGFzc2VydChhc3NldFRyYW5zZmVyVHhuLnJla2V5VG8gPT09IEdsb2JhbC56ZXJvQWRkcmVzcywgYFJla2V5IG5vdCBhbGxvd2VkYCk7CiAgICBmcmFtZV9kaWcgLTEKICAgIGd0eG5zIFJla2V5VG8KICAgIGdsb2JhbCBaZXJvQWRkcmVzcwogICAgPT0KICAgIGFzc2VydCAvLyBSZWtleSBub3QgYWxsb3dlZAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy91dGlscy5hbGdvLnRzOjI4CiAgICAvLyBhc3NlcnQoYXNzZXRUcmFuc2ZlclR4bi5hc3NldENsb3NlVG8gPT09IEdsb2JhbC56ZXJvQWRkcmVzcywgYENsb3NlVG8gbm90IGFsbG93ZWRgKTsKICAgIGZyYW1lX2RpZyAtMQogICAgZ3R4bnMgQXNzZXRDbG9zZVRvCiAgICBnbG9iYWwgWmVyb0FkZHJlc3MKICAgID09CiAgICBhc3NlcnQgLy8gQ2xvc2VUbyBub3QgYWxsb3dlZAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy91dGlscy5hbGdvLnRzOjI5CiAgICAvLyByZXR1cm4gYXNzZXRUcmFuc2ZlclR4bi5hc3NldEFtb3VudDsKICAgIGZyYW1lX2RpZyAtMQogICAgZ3R4bnMgQXNzZXRBbW91bnQKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvdXRpbHMuYWxnby50czo6YW1vdW50RnJvbVBheW1lbnQocGF5bWVudFR4bjogdWludDY0KSAtPiB1aW50NjQ6CmFtb3VudEZyb21QYXltZW50OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy91dGlscy5hbGdvLnRzOjMyCiAgICAvLyBleHBvcnQgZnVuY3Rpb24gYW1vdW50RnJvbVBheW1lbnQocGF5bWVudFR4bjogZ3R4bi5QYXltZW50VHhuKTogdWludDY0IHsKICAgIHByb3RvIDEgMQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy91dGlscy5hbGdvLnRzOjMzCiAgICAvLyBpZiAocGF5bWVudFR4bi5yZWNlaXZlciAhPT0gR2xvYmFsLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MpIHJldHVybiAwOwogICAgZnJhbWVfZGlnIC0xCiAgICBndHhucyBSZWNlaXZlcgogICAgZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKICAgICE9CiAgICBieiBhbW91bnRGcm9tUGF5bWVudF9hZnRlcl9pZl9lbHNlQDIKICAgIGludGNfMSAvLyAwCiAgICByZXRzdWIKCmFtb3VudEZyb21QYXltZW50X2FmdGVyX2lmX2Vsc2VAMjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvdXRpbHMuYWxnby50czozNQogICAgLy8gaWYgKHBheW1lbnRUeG4ucmVrZXlUbyAhPT0gR2xvYmFsLnplcm9BZGRyZXNzKSByZXR1cm4gMDsKICAgIGZyYW1lX2RpZyAtMQogICAgZ3R4bnMgUmVrZXlUbwogICAgZ2xvYmFsIFplcm9BZGRyZXNzCiAgICAhPQogICAgYnogYW1vdW50RnJvbVBheW1lbnRfYWZ0ZXJfaWZfZWxzZUA0CiAgICBpbnRjXzEgLy8gMAogICAgcmV0c3ViCgphbW91bnRGcm9tUGF5bWVudF9hZnRlcl9pZl9lbHNlQDQ6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3V0aWxzLmFsZ28udHM6MzYKICAgIC8vIGlmIChwYXltZW50VHhuLmNsb3NlUmVtYWluZGVyVG8gIT09IEdsb2JhbC56ZXJvQWRkcmVzcykgcmV0dXJuIDA7CiAgICBmcmFtZV9kaWcgLTEKICAgIGd0eG5zIENsb3NlUmVtYWluZGVyVG8KICAgIGdsb2JhbCBaZXJvQWRkcmVzcwogICAgIT0KICAgIGJ6IGFtb3VudEZyb21QYXltZW50X2FmdGVyX2lmX2Vsc2VANgogICAgaW50Y18xIC8vIDAKICAgIHJldHN1YgoKYW1vdW50RnJvbVBheW1lbnRfYWZ0ZXJfaWZfZWxzZUA2OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy91dGlscy5hbGdvLnRzOjM4CiAgICAvLyByZXR1cm4gcGF5bWVudFR4bi5hbW91bnQ7CiAgICBmcmFtZV9kaWcgLTEKICAgIGd0eG5zIEFtb3VudAogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czo6QnJpZGdlLmNyZWF0ZUFwcGxpY2F0aW9uW3JvdXRpbmddKCkgLT4gdm9pZDoKY3JlYXRlQXBwbGljYXRpb246CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjY5CiAgICAvLyBjcmVhdGVBcHBsaWNhdGlvbihvd25lcjogQWRkcmVzcywgY2hhaW5JZDogQnl0ZSwgbWVzc2VuZ2VyOiBBcHBsaWNhdGlvbiwgZ2FzT3JhY2xlOiBBcHBsaWNhdGlvbik6IHZvaWQgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMyAvLyAzMgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC5zdGF0aWNfYXJyYXk8YXJjNC51aW50OCwgMzI+CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18wIC8vIDEKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDgKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDMKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzIgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50NjQKICAgIGJ0b2kKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDQKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzIgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50NjQKICAgIGJ0b2kKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvb3duYWJsZS5hbGdvLnRzOjYKICAgIC8vIHByb3RlY3RlZCBvd25lciA9IEdsb2JhbFN0YXRlPEFkZHJlc3M+KCk7CiAgICBieXRlY18yIC8vICJvd25lciIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvb3duYWJsZS5hbGdvLnRzOjkKICAgIC8vIHRoaXMub3duZXIudmFsdWUgPSBvd25lcjsKICAgIGRpZyA0CiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9nYXMtdXNhZ2UuYWxnby50czo5CiAgICAvLyBnYXNPcmFjbGUgPSBHbG9iYWxTdGF0ZTxBcHBsaWNhdGlvbj4oKTsKICAgIGJ5dGVjXzMgLy8gImdhc09yYWNsZSIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvZ2FzLXVzYWdlLmFsZ28udHM6MTQKICAgIC8vIHRoaXMuZ2FzT3JhY2xlLnZhbHVlID0gZ2FzT3JhY2xlOwogICAgc3dhcAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcm91dGVyLmFsZ28udHM6NDIKICAgIC8vIHByaXZhdGUgc3RvcEF1dGhvcml0eSA9IEdsb2JhbFN0YXRlPEFkZHJlc3M+KCk7Ly8gY2FuIHJlc3RyaWN0IGRlcG9zaXQgb3Igd2l0aGRyYXcgb3BlcmF0aW9ucwogICAgYnl0ZWMgOSAvLyAic3RvcEF1dGhvcml0eSIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcm91dGVyLmFsZ28udHM6NTcKICAgIC8vIHRoaXMuc3RvcEF1dGhvcml0eS52YWx1ZSA9IG93bmVyOwogICAgdW5jb3ZlciAzCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czo1NwogICAgLy8gY2hhaW5JZCA9IEdsb2JhbFN0YXRlPEJ5dGU+KCk7CiAgICBieXRlYyA1IC8vICJjaGFpbklkIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czo3MQogICAgLy8gdGhpcy5jaGFpbklkLnZhbHVlID0gY2hhaW5JZDsKICAgIHVuY292ZXIgMgogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6NTgKICAgIC8vIG1lc3NlbmdlciA9IEdsb2JhbFN0YXRlPEFwcGxpY2F0aW9uPigpOwogICAgYnl0ZWMgNiAvLyAibWVzc2VuZ2VyIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czo3MgogICAgLy8gdGhpcy5tZXNzZW5nZXIudmFsdWUgPSBtZXNzZW5nZXI7CiAgICBzd2FwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czo2OQogICAgLy8gY3JlYXRlQXBwbGljYXRpb24ob3duZXI6IEFkZHJlc3MsIGNoYWluSWQ6IEJ5dGUsIG1lc3NlbmdlcjogQXBwbGljYXRpb24sIGdhc09yYWNsZTogQXBwbGljYXRpb24pOiB2b2lkIHsKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjpCcmlkZ2Uub3B0SW5Bc3NldFtyb3V0aW5nXSgpIC0+IHZvaWQ6Cm9wdEluQXNzZXQ6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjc1CiAgICAvLyBvcHRJbkFzc2V0KGFzc2V0OiBBc3NldCk6IHZvaWQgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgYnRvaQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czo3NgogICAgLy8gdGhpcy5vbmx5T3duZXIoKTsKICAgIGNhbGxzdWIgb25seU93bmVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjc5LTg1CiAgICAvLyBpdHhuCiAgICAvLyAgIC5hc3NldFRyYW5zZmVyKHsKICAgIC8vICAgICB4ZmVyQXNzZXQ6IGFzc2V0LAogICAgLy8gICAgIGFzc2V0QW1vdW50OiAwLAogICAgLy8gICAgIGFzc2V0UmVjZWl2ZXI6IEdsb2JhbC5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzLAogICAgLy8gICB9KQogICAgLy8gICAuc3VibWl0KCk7CiAgICBpdHhuX2JlZ2luCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjgzCiAgICAvLyBhc3NldFJlY2VpdmVyOiBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcywKICAgIGdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCiAgICBpdHhuX2ZpZWxkIEFzc2V0UmVjZWl2ZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6ODIKICAgIC8vIGFzc2V0QW1vdW50OiAwLAogICAgaW50Y18xIC8vIDAKICAgIGl0eG5fZmllbGQgQXNzZXRBbW91bnQKICAgIGl0eG5fZmllbGQgWGZlckFzc2V0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjc5LTg0CiAgICAvLyBpdHhuCiAgICAvLyAgIC5hc3NldFRyYW5zZmVyKHsKICAgIC8vICAgICB4ZmVyQXNzZXQ6IGFzc2V0LAogICAgLy8gICAgIGFzc2V0QW1vdW50OiAwLAogICAgLy8gICAgIGFzc2V0UmVjZWl2ZXI6IEdsb2JhbC5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzLAogICAgLy8gICB9KQogICAgcHVzaGludCA0IC8vIDQKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludGNfMSAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czo3OS04NQogICAgLy8gaXR4bgogICAgLy8gICAuYXNzZXRUcmFuc2Zlcih7CiAgICAvLyAgICAgeGZlckFzc2V0OiBhc3NldCwKICAgIC8vICAgICBhc3NldEFtb3VudDogMCwKICAgIC8vICAgICBhc3NldFJlY2VpdmVyOiBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcywKICAgIC8vICAgfSkKICAgIC8vICAgLnN1Ym1pdCgpOwogICAgaXR4bl9zdWJtaXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6ODcKICAgIC8vIGxvZygnQnJpZGdlOiBvcHQtaW4gY29tcGxldGVkJyk7CiAgICBwdXNoYnl0ZXMgIkJyaWRnZTogb3B0LWluIGNvbXBsZXRlZCIKICAgIGxvZwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czo3NQogICAgLy8gb3B0SW5Bc3NldChhc3NldDogQXNzZXQpOiB2b2lkIHsKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjpCcmlkZ2Uuc3dhcEFuZEJyaWRnZVtyb3V0aW5nXSgpIC0+IHZvaWQ6CnN3YXBBbmRCcmlkZ2U6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjkwCiAgICAvLyBAYWJpbWV0aG9kKHsgZGVmYXVsdEFyZ3VtZW50czogeyBidWRnZXQ6IHsgY29uc3RhbnQ6IDEwMDAgfSB9IH0pCiAgICB0eG4gR3JvdXBJbmRleAogICAgcHVzaGludCAyIC8vIDIKICAgIC0KICAgIGR1cAogICAgZ3R4bnMgVHlwZUVudW0KICAgIGludGNfMCAvLyBwYXkKICAgID09CiAgICBhc3NlcnQgLy8gdHJhbnNhY3Rpb24gdHlwZSBpcyBwYXkKICAgIHR4biBHcm91cEluZGV4CiAgICBpbnRjXzAgLy8gMQogICAgLQogICAgZHVwCiAgICBndHhucyBUeXBlRW51bQogICAgcHVzaGludCA0IC8vIGF4ZmVyCiAgICA9PQogICAgYXNzZXJ0IC8vIHRyYW5zYWN0aW9uIHR5cGUgaXMgYXhmZXIKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzMgLy8gMzIKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQuc3RhdGljX2FycmF5PGFyYzQudWludDgsIDMyPgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZHVwCiAgICBsZW4KICAgIGludGNfMCAvLyAxCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ4CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAzCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18zIC8vIDMyCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnN0YXRpY19hcnJheTxhcmM0LnVpbnQ4LCAzMj4KICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDQKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzMgLy8gMzIKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQuc3RhdGljX2FycmF5PGFyYzQudWludDgsIDMyPgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgNQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgYnRvaQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoxMDAKICAgIC8vIHRoaXMuX3N3YXBBbmRCcmlkZ2UoYW1vdW50RnJvbVBheW1lbnQocGF5bWVudFJlZiksIGFzc2V0VHJhbnNmZXJSZWYsIHJlY2lwaWVudCwgZGVzdGluYXRpb25DaGFpbklkLCByZWNlaXZlVG9rZW4sIG5vbmNlLCAwLCBidWRnZXQpOwogICAgdW5jb3ZlciA2CiAgICBjYWxsc3ViIGFtb3VudEZyb21QYXltZW50CiAgICBjb3ZlciA2CiAgICBjb3ZlciA2CiAgICBpbnRjXzEgLy8gMAogICAgdW5jb3ZlciA3CiAgICBjYWxsc3ViIF9zd2FwQW5kQnJpZGdlCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjkwCiAgICAvLyBAYWJpbWV0aG9kKHsgZGVmYXVsdEFyZ3VtZW50czogeyBidWRnZXQ6IHsgY29uc3RhbnQ6IDEwMDAgfSB9IH0pCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czo6QnJpZGdlLnN3YXBBbmRCcmlkZ2VXaXRoU3RhYmxlW3JvdXRpbmddKCkgLT4gdm9pZDoKc3dhcEFuZEJyaWRnZVdpdGhTdGFibGU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjEwMwogICAgLy8gQGFiaW1ldGhvZCh7IGRlZmF1bHRBcmd1bWVudHM6IHsgYnVkZ2V0OiB7IGNvbnN0YW50OiAxMDAwIH0gfSB9KQogICAgdHhuIEdyb3VwSW5kZXgKICAgIGludGNfMCAvLyAxCiAgICAtCiAgICBkdXAKICAgIGd0eG5zIFR5cGVFbnVtCiAgICBwdXNoaW50IDQgLy8gYXhmZXIKICAgID09CiAgICBhc3NlcnQgLy8gdHJhbnNhY3Rpb24gdHlwZSBpcyBheGZlcgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMyAvLyAzMgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC5zdGF0aWNfYXJyYXk8YXJjNC51aW50OCwgMzI+CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18wIC8vIDEKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDgKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDMKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzMgLy8gMzIKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQuc3RhdGljX2FycmF5PGFyYzQudWludDgsIDMyPgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgNAogICAgZHVwCiAgICBsZW4KICAgIGludGNfMyAvLyAzMgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC5zdGF0aWNfYXJyYXk8YXJjNC51aW50OCwgMzI+CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyA1CiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyA2CiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjExMwogICAgLy8gdGhpcy5fc3dhcEFuZEJyaWRnZSgwLCBhc3NldFRyYW5zZmVyUmVmLCByZWNpcGllbnQsIGRlc3RpbmF0aW9uQ2hhaW5JZCwgcmVjZWl2ZVRva2VuLCBub25jZSwgZmVlVG9rZW5BbW91bnQsIGJ1ZGdldCk7CiAgICBpbnRjXzEgLy8gMAogICAgY292ZXIgNwogICAgY2FsbHN1YiBfc3dhcEFuZEJyaWRnZQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoxMDMKICAgIC8vIEBhYmltZXRob2QoeyBkZWZhdWx0QXJndW1lbnRzOiB7IGJ1ZGdldDogeyBjb25zdGFudDogMTAwMCB9IH0gfSkKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjpCcmlkZ2UucmVjZWl2ZVRva2Vuc1tyb3V0aW5nXSgpIC0+IHZvaWQ6CnJlY2VpdmVUb2tlbnM6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjE5MwogICAgLy8gQGFiaW1ldGhvZCgpCiAgICB0eG4gR3JvdXBJbmRleAogICAgaW50Y18wIC8vIDEKICAgIC0KICAgIGR1cAogICAgZ3R4bnMgVHlwZUVudW0KICAgIGludGNfMCAvLyBwYXkKICAgID09CiAgICBhc3NlcnQgLy8gdHJhbnNhY3Rpb24gdHlwZSBpcyBwYXkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzIgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50NjQKICAgIGJ0b2kKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGR1cAogICAgY292ZXIgMwogICAgZHVwCiAgICBsZW4KICAgIGludGNfMyAvLyAzMgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC5zdGF0aWNfYXJyYXk8YXJjNC51aW50OCwgMzI+CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAzCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18wIC8vIDEKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDgKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDQKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzMgLy8gMzIKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQuc3RhdGljX2FycmF5PGFyYzQudWludDgsIDMyPgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgNQogICAgZHVwCiAgICBjb3ZlciA2CiAgICBkdXAKICAgIGxlbgogICAgaW50Y18zIC8vIDMyCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnN0YXRpY19hcnJheTxhcmM0LnVpbnQ4LCAzMj4KICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDYKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzIgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50NjQKICAgIGJ0b2kKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcm91dGVyLmFsZ28udHM6NjQKICAgIC8vIGFzc2VydCh0aGlzLmNhblN3YXAudmFsdWUsICdSb3V0ZXI6IHN3YXAgcHJvaGliaXRlZCcpOwogICAgaW50Y18xIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcm91dGVyLmFsZ28udHM6NTMKICAgIC8vIGNhblN3YXAgPSBHbG9iYWxTdGF0ZTxib29sZWFuPih7IGluaXRpYWxWYWx1ZTogdHJ1ZSB9KTsKICAgIGJ5dGVjXzEgLy8gImNhblN3YXAiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjY0CiAgICAvLyBhc3NlcnQodGhpcy5jYW5Td2FwLnZhbHVlLCAnUm91dGVyOiBzd2FwIHByb2hpYml0ZWQnKTsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICBhc3NlcnQgLy8gUm91dGVyOiBzd2FwIHByb2hpYml0ZWQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6NjQKICAgIC8vIG90aGVyQnJpZGdlcyA9IEJveE1hcDxCeXRlLCBTdGF0aWNCeXRlczwzMj4+KHsga2V5UHJlZml4OiAnYicgfSk7CiAgICBwdXNoYnl0ZXMgImIiCiAgICBkaWcgNAogICAgY29uY2F0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjIwNAogICAgLy8gYXNzZXJ0KHRoaXMub3RoZXJCcmlkZ2VzKHNvdXJjZUNoYWluSWQpLmV4aXN0cywgJ0JyaWRnZTogc291cmNlIG5vdCByZWdpc3RlcmVkJyk7CiAgICBkdXAKICAgIGJveF9sZW4KICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIEJyaWRnZTogc291cmNlIG5vdCByZWdpc3RlcmVkCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjIwNgogICAgLy8gY29uc3QgdmFsdWUgPSBhbW91bnRGcm9tUGF5bWVudChwYXltZW50UmVmKTsKICAgIHVuY292ZXIgNwogICAgY2FsbHN1YiBhbW91bnRGcm9tUGF5bWVudAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoyMDcKICAgIC8vIGFzc2VydCh2YWx1ZSA+PSBzdG9yYWdlRmVlLCAnQnJpZGdlOiBub3QgZW5vdWdoIGZlZScpOwogICAgZHVwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjM0OAogICAgLy8gcmV0dXJuIDE1NzAwOwogICAgaW50YyA0IC8vIDE1NzAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjIwNwogICAgLy8gYXNzZXJ0KHZhbHVlID49IHN0b3JhZ2VGZWUsICdCcmlkZ2U6IG5vdCBlbm91Z2ggZmVlJyk7CiAgICA+PQogICAgYXNzZXJ0IC8vIEJyaWRnZTogbm90IGVub3VnaCBmZWUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MjA5CiAgICAvLyBjb25zdCBtZXNzYWdlID0gdGhpcy5oYXNoTWVzc2FnZShhbW91bnQsIHJlY2lwaWVudCwgc291cmNlQ2hhaW5JZCwgdGhpcy5jaGFpbklkLnZhbHVlLCByZWNlaXZlVG9rZW4sIG5vbmNlKTsKICAgIGludGNfMSAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjU3CiAgICAvLyBjaGFpbklkID0gR2xvYmFsU3RhdGU8Qnl0ZT4oKTsKICAgIGJ5dGVjIDUgLy8gImNoYWluSWQiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjIwOQogICAgLy8gY29uc3QgbWVzc2FnZSA9IHRoaXMuaGFzaE1lc3NhZ2UoYW1vdW50LCByZWNpcGllbnQsIHNvdXJjZUNoYWluSWQsIHRoaXMuY2hhaW5JZC52YWx1ZSwgcmVjZWl2ZVRva2VuLCBub25jZSk7CiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgZGlnIDgKICAgIGRpZyA4CiAgICB1bmNvdmVyIDgKICAgIHVuY292ZXIgMwogICAgZGlnIDgKICAgIHVuY292ZXIgOAogICAgY2FsbHN1YiBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjpCcmlkZ2UuaGFzaE1lc3NhZ2UKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MjEwCiAgICAvLyBjb25zdCBtZXNzYWdlV2l0aFNlbmRlciA9IGhhc2hXaXRoU2VuZGVyQWRkcmVzcyhtZXNzYWdlLCB0aGlzLm90aGVyQnJpZGdlcyhzb3VyY2VDaGFpbklkKS52YWx1ZS5ieXRlcyk7CiAgICB1bmNvdmVyIDIKICAgIGJveF9nZXQKICAgIGFzc2VydCAvLyBCb3ggbXVzdCBoYXZlIHZhbHVlCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3V0aWxzLmFsZ28udHM6NTIKICAgIC8vIGNvbnN0IGg6IGJ5dGVzID0gb3Aua2VjY2FrMjU2KG9wLmNvbmNhdChtZXNzYWdlLmJ5dGVzLCBzZW5kZXJBZGRyZXNzKSk7CiAgICBkaWcgMQogICAgc3dhcAogICAgY29uY2F0CiAgICBrZWNjYWsyNTYKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvdXRpbHMuYWxnby50czo1NQogICAgLy8gY29uc3QgZmlyc3QyID0gb3Auc3Vic3RyaW5nKG1lc3NhZ2UuYnl0ZXMsIDAsIDIpOwogICAgc3dhcAogICAgc3Vic3RyaW5nIDAgMgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy91dGlscy5hbGdvLnRzOjU3CiAgICAvLyBjb25zdCBsYXN0MzAgPSBvcC5zdWJzdHJpbmcoaCwgMiwgMzIpOwogICAgc3dhcAogICAgc3Vic3RyaW5nIDIgMzIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvdXRpbHMuYWxnby50czo2MAogICAgLy8gcmV0dXJuIG5ldyBTdGF0aWNCeXRlczwzMj4ob3AuY29uY2F0KGZpcnN0MiwgbGFzdDMwKSk7CiAgICBjb25jYXQKICAgIGR1cAogICAgY292ZXIgNgogICAgZHVwCiAgICBsZW4KICAgIGludGNfMyAvLyAzMgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIHNpemUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6NjAKICAgIC8vIHByb2Nlc3NlZE1lc3NhZ2VzID0gQm94TWFwPFN0YXRpY0J5dGVzPDMyPiwgU3RhdGljQnl0ZXM+KHsga2V5UHJlZml4OiAnbScgfSk7CiAgICBwdXNoYnl0ZXMgIm0iCiAgICBkaWcgMQogICAgY29uY2F0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjIxMgogICAgLy8gYXNzZXJ0KCF0aGlzLnByb2Nlc3NlZE1lc3NhZ2VzKG1lc3NhZ2VXaXRoU2VuZGVyKS5leGlzdHMsICdCcmlkZ2U6IG1lc3NhZ2UgcHJvY2Vzc2VkJyk7CiAgICBkdXAKICAgIGJveF9sZW4KICAgIGJ1cnkgMQogICAgIQogICAgYXNzZXJ0IC8vIEJyaWRnZTogbWVzc2FnZSBwcm9jZXNzZWQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MjE0CiAgICAvLyB0aGlzLnByb2Nlc3NlZE1lc3NhZ2VzKG1lc3NhZ2VXaXRoU2VuZGVyKS52YWx1ZSA9IG5ldyBTdGF0aWNCeXRlcygpOwogICAgcHVzaGJ5dGVzIDB4CiAgICBib3hfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjIxNy0yMjEKICAgIC8vIGFzc2VydChhYmlDYWxsKHsKICAgIC8vICAgbWV0aG9kOiBNZXNzZW5nZXIucHJvdG90eXBlLnJlY2VpdmVkTWVzc2FnZXMsCiAgICAvLyAgIGFwcElkOiB0aGlzLm1lc3Nlbmdlci52YWx1ZS5pZCwKICAgIC8vICAgYXJnczogW21lc3NhZ2VXaXRoU2VuZGVyXSwKICAgIC8vIH0pLnJldHVyblZhbHVlLCAnQnJpZGdlOiBubyBtZXNzYWdlJyk7CiAgICBpdHhuX2JlZ2luCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjIxOQogICAgLy8gYXBwSWQ6IHRoaXMubWVzc2VuZ2VyLnZhbHVlLmlkLAogICAgaW50Y18xIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6NTgKICAgIC8vIG1lc3NlbmdlciA9IEdsb2JhbFN0YXRlPEFwcGxpY2F0aW9uPigpOwogICAgYnl0ZWMgNiAvLyAibWVzc2VuZ2VyIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoyMTkKICAgIC8vIGFwcElkOiB0aGlzLm1lc3Nlbmdlci52YWx1ZS5pZCwKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjIxNy0yMjEKICAgIC8vIGFzc2VydChhYmlDYWxsKHsKICAgIC8vICAgbWV0aG9kOiBNZXNzZW5nZXIucHJvdG90eXBlLnJlY2VpdmVkTWVzc2FnZXMsCiAgICAvLyAgIGFwcElkOiB0aGlzLm1lc3Nlbmdlci52YWx1ZS5pZCwKICAgIC8vICAgYXJnczogW21lc3NhZ2VXaXRoU2VuZGVyXSwKICAgIC8vIH0pLnJldHVyblZhbHVlLCAnQnJpZGdlOiBubyBtZXNzYWdlJyk7CiAgICBwdXNoYnl0ZXMgMHgzM2UxNDdhYSAvLyBtZXRob2QgInJlY2VpdmVkTWVzc2FnZXMoYnl0ZVszMl0pYm9vbCIKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uSUQKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBwdXNoaW50IDYgLy8gYXBwbAogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18xIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICBpdHhuX3N1Ym1pdAogICAgaXR4biBMYXN0TG9nCiAgICBkdXAKICAgIGV4dHJhY3QgNCAwCiAgICBzd2FwCiAgICBleHRyYWN0IDAgNAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICA9PQogICAgYXNzZXJ0IC8vIEJ5dGVzIGhhcyB2YWxpZCBwcmVmaXgKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzAgLy8gMQogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC5ib29sCiAgICBpbnRjXzEgLy8gMAogICAgZ2V0Yml0CiAgICBhc3NlcnQgLy8gQnJpZGdlOiBubyBtZXNzYWdlCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjIyMwogICAgLy8gY29uc3QgdG9rZW5JZDogdWludDY0ID0gb3AuZXh0cmFjdFVpbnQ2NChyZWNlaXZlVG9rZW4uYnl0ZXMsIDI0KTsKICAgIHVuY292ZXIgMgogICAgcHVzaGludCAyNCAvLyAyNAogICAgZXh0cmFjdF91aW50NjQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MjI1LTIzMAogICAgLy8gY29uc3QgcmVjZWl2ZUFtb3VudCA9IHRoaXMucmVjZWl2ZUFuZFN3YXBGcm9tVlVzZCgKICAgIC8vICAgQXNzZXQodG9rZW5JZCksCiAgICAvLyAgIHJlY2lwaWVudEFkZHJlc3MsCiAgICAvLyAgIGFtb3VudCwKICAgIC8vICAgcmVjZWl2ZUFtb3VudE1pbiwKICAgIC8vICk7CiAgICB1bmNvdmVyIDMKICAgIHVuY292ZXIgNAogICAgdW5jb3ZlciA0CiAgICBjYWxsc3ViIHJlY2VpdmVBbmRTd2FwRnJvbVZVc2QKICAgIHN3YXAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MzQ4CiAgICAvLyByZXR1cm4gMTU3MDA7CiAgICBpbnRjIDQgLy8gMTU3MDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MjMzCiAgICAvLyBjb25zdCBleHRyYUdhczogdWludDY0ID0gdmFsdWUgLSBzdG9yYWdlRmVlOwogICAgLQogICAgZHVwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjIzNAogICAgLy8gaWYgKGV4dHJhR2FzID4gMCkgewogICAgYnogcmVjZWl2ZVRva2Vuc19hZnRlcl9pZl9lbHNlQDUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MjM1LTIzOAogICAgLy8gaXR4bi5wYXltZW50KHsKICAgIC8vICAgYW1vdW50OiBleHRyYUdhcywKICAgIC8vICAgcmVjZWl2ZXI6IHJlY2lwaWVudEFkZHJlc3MuYnl0ZXMsCiAgICAvLyB9KS5zdWJtaXQoKTsKICAgIGl0eG5fYmVnaW4KICAgIGRpZyA0CiAgICBpdHhuX2ZpZWxkIFJlY2VpdmVyCiAgICBkdXAKICAgIGl0eG5fZmllbGQgQW1vdW50CiAgICBpbnRjXzAgLy8gMQogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18xIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICBpdHhuX3N1Ym1pdAoKcmVjZWl2ZVRva2Vuc19hZnRlcl9pZl9lbHNlQDU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjI0MC0yNDYKICAgIC8vIGVtaXQ8VG9rZW5zUmVjZWl2ZWQ+KHsKICAgIC8vICAgcmVjZWl2ZUFtb3VudCwKICAgIC8vICAgcmVjaXBpZW50OiByZWNpcGllbnRBZGRyZXNzLAogICAgLy8gICBub25jZSwKICAgIC8vICAgbWVzc2VuZ2VyOiBBTExCUklER0VfTUVTU0VOR0VSLAogICAgLy8gICBtZXNzYWdlOiBtZXNzYWdlV2l0aFNlbmRlciwKICAgIC8vIH0pOwogICAgZGlnIDEKICAgIGl0b2IKICAgIGRpZyA1CiAgICBjb25jYXQKICAgIGRpZyA0CiAgICBjb25jYXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MjQ0CiAgICAvLyBtZXNzZW5nZXI6IEFMTEJSSURHRV9NRVNTRU5HRVIsCiAgICBieXRlYyAxMCAvLyAweDAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjI0MC0yNDYKICAgIC8vIGVtaXQ8VG9rZW5zUmVjZWl2ZWQ+KHsKICAgIC8vICAgcmVjZWl2ZUFtb3VudCwKICAgIC8vICAgcmVjaXBpZW50OiByZWNpcGllbnRBZGRyZXNzLAogICAgLy8gICBub25jZSwKICAgIC8vICAgbWVzc2VuZ2VyOiBBTExCUklER0VfTUVTU0VOR0VSLAogICAgLy8gICBtZXNzYWdlOiBtZXNzYWdlV2l0aFNlbmRlciwKICAgIC8vIH0pOwogICAgY29uY2F0CiAgICBkaWcgMwogICAgY29uY2F0CiAgICBwdXNoYnl0ZXMgMHg0NTgzNmFkNiAvLyBtZXRob2QgIlRva2Vuc1JlY2VpdmVkKHVpbnQ2NCxhZGRyZXNzLGJ5dGVbMzJdLGJ5dGUsYnl0ZVszMl0pIgogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MTkzCiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjpCcmlkZ2UucmVnaXN0ZXJCcmlkZ2Vbcm91dGluZ10oKSAtPiB2b2lkOgpyZWdpc3RlckJyaWRnZToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MjQ5CiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzAgLy8gMQogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50OAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZHVwCiAgICBsZW4KICAgIGludGNfMyAvLyAzMgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC5zdGF0aWNfYXJyYXk8YXJjNC51aW50OCwgMzI+CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjI1MQogICAgLy8gdGhpcy5vbmx5T3duZXIoKTsKICAgIGNhbGxzdWIgb25seU93bmVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjY0CiAgICAvLyBvdGhlckJyaWRnZXMgPSBCb3hNYXA8Qnl0ZSwgU3RhdGljQnl0ZXM8MzI+Pih7IGtleVByZWZpeDogJ2InIH0pOwogICAgcHVzaGJ5dGVzICJiIgogICAgdW5jb3ZlciAyCiAgICBjb25jYXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MjUyCiAgICAvLyB0aGlzLm90aGVyQnJpZGdlcyhjaGFpbklkKS52YWx1ZSA9IGJyaWRnZUFkZHJlc3M7CiAgICBzd2FwCiAgICBib3hfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjI0OQogICAgLy8gQGFiaW1ldGhvZCgpCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czo6QnJpZGdlLmFkZEJyaWRnZVRva2VuW3JvdXRpbmddKCkgLT4gdm9pZDoKYWRkQnJpZGdlVG9rZW46CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjI1NQogICAgLy8gQGFiaW1ldGhvZCgpCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18wIC8vIDEKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDgKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzMgLy8gMzIKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQuc3RhdGljX2FycmF5PGFyYzQudWludDgsIDMyPgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoyNTcKICAgIC8vIHRoaXMub25seU93bmVyKCk7CiAgICBjYWxsc3ViIG9ubHlPd25lcgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czozNjEKICAgIC8vIHJldHVybiBjaGFpbklkLmJ5dGVzLmNvbmNhdCh0b2tlbi5ieXRlcyk7CiAgICBjb25jYXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6NjcKICAgIC8vIG90aGVyQnJpZGdlVG9rZW5zID0gQm94TWFwPGJ5dGVzLCBTdGF0aWNCeXRlcz4oeyBrZXlQcmVmaXg6ICd0JyB9KTsKICAgIGJ5dGVjIDcgLy8gInQiCiAgICBzd2FwCiAgICBjb25jYXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MjU4CiAgICAvLyB0aGlzLm90aGVyQnJpZGdlVG9rZW5zKHRoaXMuX2dldE90aGVyQnJpZGdlVG9rZW5zS2V5KGNoYWluSWQsIHRva2VuQWRkcmVzcykpLnZhbHVlID0gbmV3IFN0YXRpY0J5dGVzKCk7CiAgICBwdXNoYnl0ZXMgMHgKICAgIGJveF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MjU1CiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjpCcmlkZ2UucmVtb3ZlQnJpZGdlVG9rZW5bcm91dGluZ10oKSAtPiB2b2lkOgpyZW1vdmVCcmlkZ2VUb2tlbjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MjYxCiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzAgLy8gMQogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50OAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZHVwCiAgICBsZW4KICAgIGludGNfMyAvLyAzMgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC5zdGF0aWNfYXJyYXk8YXJjNC51aW50OCwgMzI+CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjI2MwogICAgLy8gdGhpcy5vbmx5T3duZXIoKTsKICAgIGNhbGxzdWIgb25seU93bmVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjM2MQogICAgLy8gcmV0dXJuIGNoYWluSWQuYnl0ZXMuY29uY2F0KHRva2VuLmJ5dGVzKTsKICAgIGNvbmNhdAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czo2NwogICAgLy8gb3RoZXJCcmlkZ2VUb2tlbnMgPSBCb3hNYXA8Ynl0ZXMsIFN0YXRpY0J5dGVzPih7IGtleVByZWZpeDogJ3QnIH0pOwogICAgYnl0ZWMgNyAvLyAidCIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoyNjQKICAgIC8vIHRoaXMub3RoZXJCcmlkZ2VUb2tlbnModGhpcy5fZ2V0T3RoZXJCcmlkZ2VUb2tlbnNLZXkoY2hhaW5JZCwgdG9rZW5BZGRyZXNzKSkuZGVsZXRlKCk7CiAgICBib3hfZGVsCiAgICBwb3AKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MjYxCiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjpCcmlkZ2Uud2l0aGRyYXdHYXNUb2tlbnNbcm91dGluZ10oKSAtPiB2b2lkOgp3aXRoZHJhd0dhc1Rva2VuczoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MjY3CiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzIgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50NjQKICAgIGJ0b2kKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MjY5CiAgICAvLyB0aGlzLm9ubHlPd25lcigpOwogICAgY2FsbHN1YiBvbmx5T3duZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MjcwCiAgICAvLyBpdHhuLnBheW1lbnQoeyBhbW91bnQ6IGFtb3VudCwgcmVjZWl2ZXI6IHRoaXMub3duZXIudmFsdWUuYnl0ZXMgfSkuc3VibWl0KCk7CiAgICBpdHhuX2JlZ2luCiAgICBpbnRjXzEgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9vd25hYmxlLmFsZ28udHM6NgogICAgLy8gcHJvdGVjdGVkIG93bmVyID0gR2xvYmFsU3RhdGU8QWRkcmVzcz4oKTsKICAgIGJ5dGVjXzIgLy8gIm93bmVyIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoyNzAKICAgIC8vIGl0eG4ucGF5bWVudCh7IGFtb3VudDogYW1vdW50LCByZWNlaXZlcjogdGhpcy5vd25lci52YWx1ZS5ieXRlcyB9KS5zdWJtaXQoKTsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICBpdHhuX2ZpZWxkIFJlY2VpdmVyCiAgICBpdHhuX2ZpZWxkIEFtb3VudAogICAgaW50Y18wIC8vIDEKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludGNfMSAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgaXR4bl9zdWJtaXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MjY3CiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjpCcmlkZ2Uud2l0aGRyYXdCcmlkZ2luZ0ZlZUluVG9rZW5zW3JvdXRpbmddKCkgLT4gdm9pZDoKd2l0aGRyYXdCcmlkZ2luZ0ZlZUluVG9rZW5zOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoyNzMKICAgIC8vIEBhYmltZXRob2QoKQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgYnRvaQogICAgZHVwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjI3NQogICAgLy8gdGhpcy5vbmx5T3duZXIoKTsKICAgIGNhbGxzdWIgb25seU93bmVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjI3NgogICAgLy8gY29uc3QgYXBwQWNjdDogQWNjb3VudCA9IEdsb2JhbC5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzOwogICAgZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKICAgIGR1cAogICAgY292ZXIgMgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoyNzcKICAgIC8vIGNvbnN0IGJhbGFuY2UgPSBhc3NldC5iYWxhbmNlKGFwcEFjY3QpOwogICAgc3dhcAogICAgYXNzZXRfaG9sZGluZ19nZXQgQXNzZXRCYWxhbmNlCiAgICBzd2FwCiAgICBkdXAKICAgIHVuY292ZXIgMgogICAgYXNzZXJ0IC8vIGFjY291bnQgb3B0ZWQgaW50byBhc3NldAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoyNzgKICAgIC8vIGlmIChiYWxhbmNlID4gVWludDY0KDApKSB7CiAgICBieiB3aXRoZHJhd0JyaWRnaW5nRmVlSW5Ub2tlbnNfYWZ0ZXJfaWZfZWxzZUA0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjI3OS0yODQKICAgIC8vIGl0eG4uYXNzZXRUcmFuc2Zlcih7CiAgICAvLyAgIHNlbmRlcjogYXBwQWNjdCwKICAgIC8vICAgeGZlckFzc2V0OiBhc3NldCwKICAgIC8vICAgYXNzZXRBbW91bnQ6IGJhbGFuY2UsCiAgICAvLyAgIGFzc2V0UmVjZWl2ZXI6IHRoaXMub3duZXIudmFsdWUuYnl0ZXMsCiAgICAvLyB9KS5zdWJtaXQoKTsKICAgIGl0eG5fYmVnaW4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MjgzCiAgICAvLyBhc3NldFJlY2VpdmVyOiB0aGlzLm93bmVyLnZhbHVlLmJ5dGVzLAogICAgaW50Y18xIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvb3duYWJsZS5hbGdvLnRzOjYKICAgIC8vIHByb3RlY3RlZCBvd25lciA9IEdsb2JhbFN0YXRlPEFkZHJlc3M+KCk7CiAgICBieXRlY18yIC8vICJvd25lciIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MjgzCiAgICAvLyBhc3NldFJlY2VpdmVyOiB0aGlzLm93bmVyLnZhbHVlLmJ5dGVzLAogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIGl0eG5fZmllbGQgQXNzZXRSZWNlaXZlcgogICAgZHVwCiAgICBpdHhuX2ZpZWxkIEFzc2V0QW1vdW50CiAgICBkaWcgMgogICAgaXR4bl9maWVsZCBYZmVyQXNzZXQKICAgIGRpZyAxCiAgICBpdHhuX2ZpZWxkIFNlbmRlcgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoyNzktMjg0CiAgICAvLyBpdHhuLmFzc2V0VHJhbnNmZXIoewogICAgLy8gICBzZW5kZXI6IGFwcEFjY3QsCiAgICAvLyAgIHhmZXJBc3NldDogYXNzZXQsCiAgICAvLyAgIGFzc2V0QW1vdW50OiBiYWxhbmNlLAogICAgLy8gICBhc3NldFJlY2VpdmVyOiB0aGlzLm93bmVyLnZhbHVlLmJ5dGVzLAogICAgLy8gfSkuc3VibWl0KCk7CiAgICBwdXNoaW50IDQgLy8gNAogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18xIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICBpdHhuX3N1Ym1pdAoKd2l0aGRyYXdCcmlkZ2luZ0ZlZUluVG9rZW5zX2FmdGVyX2lmX2Vsc2VANDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MjczCiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjpCcmlkZ2UuZ2V0QnJpZGdpbmdDb3N0SW5Ub2tlbnNbcm91dGluZ10oKSAtPiB2b2lkOgpnZXRCcmlkZ2luZ0Nvc3RJblRva2VuczoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6Mjg4CiAgICAvLyBAYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUgfSkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzAgLy8gMQogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50OAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgYnRvaQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoyOTMKICAgIC8vIGNvbnN0IGJyaWRnZUdhc0Ftb3VudDogdWludDY0ID0gdGhpcy5nZXRHYXNVc2FnZShkZXN0aW5hdGlvbkNoYWluSWQpOwogICAgZGlnIDEKICAgIGNhbGxzdWIgc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9nYXMtdXNhZ2UuYWxnby50czo6R2FzVXNhZ2UuZ2V0R2FzVXNhZ2UKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6Mjk0LTI5OAogICAgLy8gY29uc3QgbWVzc2VuZ2VyR2FzQW1vdW50OiB1aW50NjQgPSBhYmlDYWxsKHsKICAgIC8vICAgbWV0aG9kOiBNZXNzZW5nZXIucHJvdG90eXBlLmdldEdhc1VzYWdlLAogICAgLy8gICBhcHBJZDogdGhpcy5tZXNzZW5nZXIudmFsdWUuaWQsCiAgICAvLyAgIGFyZ3M6IFtkZXN0aW5hdGlvbkNoYWluSWRdLAogICAgLy8gfSkucmV0dXJuVmFsdWU7CiAgICBpdHhuX2JlZ2luCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjI5NgogICAgLy8gYXBwSWQ6IHRoaXMubWVzc2VuZ2VyLnZhbHVlLmlkLAogICAgaW50Y18xIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6NTgKICAgIC8vIG1lc3NlbmdlciA9IEdsb2JhbFN0YXRlPEFwcGxpY2F0aW9uPigpOwogICAgYnl0ZWMgNiAvLyAibWVzc2VuZ2VyIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoyOTYKICAgIC8vIGFwcElkOiB0aGlzLm1lc3Nlbmdlci52YWx1ZS5pZCwKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjI5NC0yOTgKICAgIC8vIGNvbnN0IG1lc3Nlbmdlckdhc0Ftb3VudDogdWludDY0ID0gYWJpQ2FsbCh7CiAgICAvLyAgIG1ldGhvZDogTWVzc2VuZ2VyLnByb3RvdHlwZS5nZXRHYXNVc2FnZSwKICAgIC8vICAgYXBwSWQ6IHRoaXMubWVzc2VuZ2VyLnZhbHVlLmlkLAogICAgLy8gICBhcmdzOiBbZGVzdGluYXRpb25DaGFpbklkXSwKICAgIC8vIH0pLnJldHVyblZhbHVlOwogICAgYnl0ZWMgMTQgLy8gbWV0aG9kICJnZXRHYXNVc2FnZShieXRlKXVpbnQ2NCIKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBkaWcgMwogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25JRAogICAgcHVzaGludCA2IC8vIGFwcGwKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludGNfMSAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgaXR4bl9zdWJtaXQKICAgIGl0eG4gTGFzdExvZwogICAgZHVwCiAgICBleHRyYWN0IDQgMAogICAgc3dhcAogICAgZXh0cmFjdCAwIDQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgPT0KICAgIGFzc2VydCAvLyBCeXRlcyBoYXMgdmFsaWQgcHJlZml4CiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjMwMC0zMDQKICAgIC8vIHJldHVybiBhYmlDYWxsKHsKICAgIC8vICAgbWV0aG9kOiBHYXNPcmFjbGUucHJvdG90eXBlLmdldFRyYW5zYWN0aW9uR2FzQ29zdEluVVNELAogICAgLy8gICBhcHBJZDogdGhpcy5nYXNPcmFjbGUudmFsdWUuaWQsCiAgICAvLyAgIGFyZ3M6IFtkZXN0aW5hdGlvbkNoYWluSWQsIGJyaWRnZUdhc0Ftb3VudCArIG1lc3Nlbmdlckdhc0Ftb3VudF0sCiAgICAvLyB9KS5yZXR1cm5WYWx1ZSAvIHRoaXMuZnJvbUdhc09yYWNsZVNjYWxpbmdGYWN0b3IoYXNzZXQpLnZhbHVlOwogICAgaXR4bl9iZWdpbgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czozMDIKICAgIC8vIGFwcElkOiB0aGlzLmdhc09yYWNsZS52YWx1ZS5pZCwKICAgIGludGNfMSAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2dhcy11c2FnZS5hbGdvLnRzOjkKICAgIC8vIGdhc09yYWNsZSA9IEdsb2JhbFN0YXRlPEFwcGxpY2F0aW9uPigpOwogICAgYnl0ZWNfMyAvLyAiZ2FzT3JhY2xlIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czozMDIKICAgIC8vIGFwcElkOiB0aGlzLmdhc09yYWNsZS52YWx1ZS5pZCwKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjMwMwogICAgLy8gYXJnczogW2Rlc3RpbmF0aW9uQ2hhaW5JZCwgYnJpZGdlR2FzQW1vdW50ICsgbWVzc2VuZ2VyR2FzQW1vdW50XSwKICAgIGNvdmVyIDIKICAgICsKICAgIGl0b2IKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MzAwLTMwNAogICAgLy8gcmV0dXJuIGFiaUNhbGwoewogICAgLy8gICBtZXRob2Q6IEdhc09yYWNsZS5wcm90b3R5cGUuZ2V0VHJhbnNhY3Rpb25HYXNDb3N0SW5VU0QsCiAgICAvLyAgIGFwcElkOiB0aGlzLmdhc09yYWNsZS52YWx1ZS5pZCwKICAgIC8vICAgYXJnczogW2Rlc3RpbmF0aW9uQ2hhaW5JZCwgYnJpZGdlR2FzQW1vdW50ICsgbWVzc2VuZ2VyR2FzQW1vdW50XSwKICAgIC8vIH0pLnJldHVyblZhbHVlIC8gdGhpcy5mcm9tR2FzT3JhY2xlU2NhbGluZ0ZhY3Rvcihhc3NldCkudmFsdWU7CiAgICBwdXNoYnl0ZXMgMHg3YmY3ZDUwYyAvLyBtZXRob2QgImdldFRyYW5zYWN0aW9uR2FzQ29zdEluVVNEKGJ5dGUsdWludDY0KXVpbnQ2NCIKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICB1bmNvdmVyIDMKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbklECiAgICBwdXNoaW50IDYgLy8gYXBwbAogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18xIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICBpdHhuX3N1Ym1pdAogICAgaXR4biBMYXN0TG9nCiAgICBkdXAKICAgIGV4dHJhY3QgNCAwCiAgICBzd2FwCiAgICBleHRyYWN0IDAgNAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICA9PQogICAgYXNzZXJ0IC8vIEJ5dGVzIGhhcyB2YWxpZCBwcmVmaXgKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzIgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50NjQKICAgIGJ0b2kKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MzA0CiAgICAvLyB9KS5yZXR1cm5WYWx1ZSAvIHRoaXMuZnJvbUdhc09yYWNsZVNjYWxpbmdGYWN0b3IoYXNzZXQpLnZhbHVlOwogICAgc3dhcAogICAgaXRvYgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czozNgogICAgLy8gcHJvdGVjdGVkIGZyb21HYXNPcmFjbGVTY2FsaW5nRmFjdG9yID0gQm94TWFwPEFzc2V0LCB1aW50NjQ+KHsga2V5UHJlZml4OiAnZScgfSk7CiAgICBwdXNoYnl0ZXMgImUiCiAgICBzd2FwCiAgICBjb25jYXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MzA0CiAgICAvLyB9KS5yZXR1cm5WYWx1ZSAvIHRoaXMuZnJvbUdhc09yYWNsZVNjYWxpbmdGYWN0b3IoYXNzZXQpLnZhbHVlOwogICAgYm94X2dldAogICAgYXNzZXJ0IC8vIEJveCBtdXN0IGhhdmUgdmFsdWUKICAgIGJ0b2kKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MzAwLTMwNAogICAgLy8gcmV0dXJuIGFiaUNhbGwoewogICAgLy8gICBtZXRob2Q6IEdhc09yYWNsZS5wcm90b3R5cGUuZ2V0VHJhbnNhY3Rpb25HYXNDb3N0SW5VU0QsCiAgICAvLyAgIGFwcElkOiB0aGlzLmdhc09yYWNsZS52YWx1ZS5pZCwKICAgIC8vICAgYXJnczogW2Rlc3RpbmF0aW9uQ2hhaW5JZCwgYnJpZGdlR2FzQW1vdW50ICsgbWVzc2VuZ2VyR2FzQW1vdW50XSwKICAgIC8vIH0pLnJldHVyblZhbHVlIC8gdGhpcy5mcm9tR2FzT3JhY2xlU2NhbGluZ0ZhY3Rvcihhc3NldCkudmFsdWU7CiAgICAvCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjI4OAogICAgLy8gQGFiaW1ldGhvZCh7IHJlYWRvbmx5OiB0cnVlIH0pCiAgICBpdG9iCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czo6QnJpZGdlLmhhc2hNZXNzYWdlW3JvdXRpbmddKCkgLT4gdm9pZDoKaGFzaE1lc3NhZ2U6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjMwNwogICAgLy8gQGFiaW1ldGhvZCh7IHJlYWRvbmx5OiB0cnVlIH0pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18zIC8vIDMyCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnN0YXRpY19hcnJheTxhcmM0LnVpbnQ4LCAzMj4KICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDMKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzAgLy8gMQogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50OAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgNAogICAgZHVwCiAgICBsZW4KICAgIGludGNfMCAvLyAxCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ4CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyA1CiAgICBkdXAKICAgIGxlbgogICAgaW50Y18zIC8vIDMyCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnN0YXRpY19hcnJheTxhcmM0LnVpbnQ4LCAzMj4KICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDYKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzMgLy8gMzIKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQuc3RhdGljX2FycmF5PGFyYzQudWludDgsIDMyPgogICAgY2FsbHN1YiBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjpCcmlkZ2UuaGFzaE1lc3NhZ2UKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjpCcmlkZ2UuaXNPdGhlckJyaWRnZVRva2VuU3VwcG9ydGVkW3JvdXRpbmddKCkgLT4gdm9pZDoKaXNPdGhlckJyaWRnZVRva2VuU3VwcG9ydGVkOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czozMzQKICAgIC8vIEBhYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMCAvLyAxCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ4CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18zIC8vIDMyCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnN0YXRpY19hcnJheTxhcmM0LnVpbnQ4LCAzMj4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MzYxCiAgICAvLyByZXR1cm4gY2hhaW5JZC5ieXRlcy5jb25jYXQodG9rZW4uYnl0ZXMpOwogICAgY29uY2F0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjY3CiAgICAvLyBvdGhlckJyaWRnZVRva2VucyA9IEJveE1hcDxieXRlcywgU3RhdGljQnl0ZXM+KHsga2V5UHJlZml4OiAndCcgfSk7CiAgICBieXRlYyA3IC8vICJ0IgogICAgc3dhcAogICAgY29uY2F0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjMzNgogICAgLy8gcmV0dXJuIHRoaXMub3RoZXJCcmlkZ2VUb2tlbnModGhpcy5fZ2V0T3RoZXJCcmlkZ2VUb2tlbnNLZXkoY2hhaW5JZCwgdG9rZW4pKS5leGlzdHM7CiAgICBib3hfbGVuCiAgICBidXJ5IDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MzM0CiAgICAvLyBAYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUgfSkKICAgIGJ5dGVjIDExIC8vIDB4MDAKICAgIGludGNfMSAvLyAwCiAgICB1bmNvdmVyIDIKICAgIHNldGJpdAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6OkJyaWRnZS5nZXRUcmFuc2FjdGlvbkNvc3Rbcm91dGluZ10oKSAtPiB2b2lkOgpnZXRUcmFuc2FjdGlvbkNvc3Q6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjMzOQogICAgLy8gQGFiaW1ldGhvZCh7IHJlYWRvbmx5OiB0cnVlIH0pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18wIC8vIDEKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDgKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MzQxCiAgICAvLyByZXR1cm4gdGhpcy5nZXRUcmFuc2FjdGlvblJlbGF5ZXJDb3N0KGNoYWluSWQpICsgdGhpcy5nZXRTZW5kVHJhbnNhY3Rpb25TdG9yYWdlQ29zdCgpOwogICAgY2FsbHN1YiBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2dhcy11c2FnZS5hbGdvLnRzOjpHYXNVc2FnZS5nZXRUcmFuc2FjdGlvblJlbGF5ZXJDb3N0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjM1NQogICAgLy8gcmV0dXJuIDE1NzAwOwogICAgaW50YyA0IC8vIDE1NzAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjM0MQogICAgLy8gcmV0dXJuIHRoaXMuZ2V0VHJhbnNhY3Rpb25SZWxheWVyQ29zdChjaGFpbklkKSArIHRoaXMuZ2V0U2VuZFRyYW5zYWN0aW9uU3RvcmFnZUNvc3QoKTsKICAgICsKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MzM5CiAgICAvLyBAYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUgfSkKICAgIGl0b2IKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjpSb3V0ZXIuc3dhcFtyb3V0aW5nXSgpIC0+IHZvaWQ6CnN3YXA6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjgxCiAgICAvLyBAYWJpbWV0aG9kKHsgZGVmYXVsdEFyZ3VtZW50czogeyBidWRnZXQ6IHsgY29uc3RhbnQ6IDEwMDAgfSB9IH0pCiAgICB0eG4gR3JvdXBJbmRleAogICAgaW50Y18wIC8vIDEKICAgIC0KICAgIGR1cAogICAgZ3R4bnMgVHlwZUVudW0KICAgIHB1c2hpbnQgNCAvLyBheGZlcgogICAgPT0KICAgIGFzc2VydCAvLyB0cmFuc2FjdGlvbiB0eXBlIGlzIGF4ZmVyCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18zIC8vIDMyCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnN0YXRpY19hcnJheTxhcmM0LnVpbnQ4LCAzMj4KICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDMKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzIgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50NjQKICAgIGJ0b2kKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDQKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzIgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50NjQKICAgIGJ0b2kKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcm91dGVyLmFsZ28udHM6ODkKICAgIC8vIGVuc3VyZUJ1ZGdldChidWRnZXQsIE9wVXBGZWVTb3VyY2UuR3JvdXBDcmVkaXQpOwogICAgaW50Y18xIC8vIDAKICAgIGNhbGxzdWIgZW5zdXJlX2J1ZGdldAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czo2NAogICAgLy8gYXNzZXJ0KHRoaXMuY2FuU3dhcC52YWx1ZSwgJ1JvdXRlcjogc3dhcCBwcm9oaWJpdGVkJyk7CiAgICBpbnRjXzEgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czo1MwogICAgLy8gY2FuU3dhcCA9IEdsb2JhbFN0YXRlPGJvb2xlYW4+KHsgaW5pdGlhbFZhbHVlOiB0cnVlIH0pOwogICAgYnl0ZWNfMSAvLyAiY2FuU3dhcCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcm91dGVyLmFsZ28udHM6NjQKICAgIC8vIGFzc2VydCh0aGlzLmNhblN3YXAudmFsdWUsICdSb3V0ZXI6IHN3YXAgcHJvaGliaXRlZCcpOwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIGFzc2VydCAvLyBSb3V0ZXI6IHN3YXAgcHJvaGliaXRlZAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czo5MQogICAgLy8gY29uc3Qgc2VuZGVyID0gbmV3IEFkZHJlc3MoVHhuLnNlbmRlcik7CiAgICB0eG4gU2VuZGVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjkyCiAgICAvLyBjb25zdCBhbW91bnQgPSBhbW91bnRGcm9tQXNzZXRUcmFuc2Zlcihhc3NldFRyYW5zZmVyUmVmKTsKICAgIGRpZyA0CiAgICBjYWxsc3ViIGFtb3VudEZyb21Bc3NldFRyYW5zZmVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjkzCiAgICAvLyBjb25zdCB2VXNkQW1vdW50ID0gdGhpcy5zZW5kQW5kU3dhcFRvVlVzZChhc3NldFRyYW5zZmVyUmVmLnhmZXJBc3NldCwgc2VuZGVyLCBhbW91bnQpOwogICAgdW5jb3ZlciA1CiAgICBndHhucyBYZmVyQXNzZXQKICAgIGR1cAogICAgZGlnIDMKICAgIGRpZyAzCiAgICBjYWxsc3ViIHNlbmRBbmRTd2FwVG9WVXNkCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjk0CiAgICAvLyBjb25zdCByZWNlaXZlZEFtb3VudCA9IHRoaXMucmVjZWl2ZUFuZFN3YXBGcm9tVlVzZChyZWNlaXZlQXNzZXQsIHJlY2lwaWVudCwgdlVzZEFtb3VudCwgcmVjZWl2ZUFtb3VudE1pbik7CiAgICBkaWcgNgogICAgZGlnIDYKICAgIHVuY292ZXIgMgogICAgdW5jb3ZlciA2CiAgICBjYWxsc3ViIHJlY2VpdmVBbmRTd2FwRnJvbVZVc2QKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcm91dGVyLmFsZ28udHM6OTUtMTAyCiAgICAvLyBlbWl0PFN3YXBwZWQ+KHsKICAgIC8vICAgc2VuZGVyLAogICAgLy8gICByZWNpcGllbnQsCiAgICAvLyAgIHRva2VuSWQ6IGFzc2V0VHJhbnNmZXJSZWYueGZlckFzc2V0LmlkLAogICAgLy8gICByZWNlaXZlVG9rZW5JZDogcmVjZWl2ZUFzc2V0LmlkLAogICAgLy8gICBhbW91bnQsCiAgICAvLyAgIHJlY2VpdmVkQW1vdW50LAogICAgLy8gfSk7CiAgICB1bmNvdmVyIDMKICAgIHVuY292ZXIgNAogICAgY29uY2F0CiAgICB1bmNvdmVyIDIKICAgIGl0b2IKICAgIGNvbmNhdAogICAgdW5jb3ZlciAzCiAgICBpdG9iCiAgICBjb25jYXQKICAgIHVuY292ZXIgMgogICAgaXRvYgogICAgY29uY2F0CiAgICBzd2FwCiAgICBpdG9iCiAgICBjb25jYXQKICAgIHB1c2hieXRlcyAweDE1NDA0NGIzIC8vIG1ldGhvZCAiU3dhcHBlZChhZGRyZXNzLGFkZHJlc3MsdWludDY0LHVpbnQ2NCx1aW50NjQsdWludDY0KSIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjgxCiAgICAvLyBAYWJpbWV0aG9kKHsgZGVmYXVsdEFyZ3VtZW50czogeyBidWRnZXQ6IHsgY29uc3RhbnQ6IDEwMDAgfSB9IH0pCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czo6Um91dGVyLmFkZFBvb2xbcm91dGluZ10oKSAtPiB2b2lkOgphZGRQb29sOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czoxMTIKICAgIC8vIEBhYmltZXRob2QoKQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgYnRvaQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgYnRvaQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czoxMTQKICAgIC8vIHRoaXMub25seU93bmVyKCk7CiAgICBjYWxsc3ViIG9ubHlPd25lcgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czoxMTUKICAgIC8vIHRoaXMucG9vbHMoYXNzZXQpLnZhbHVlID0gcG9vbElkOwogICAgZHVwCiAgICBpdG9iCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjM0CiAgICAvLyBwb29scyA9IEJveE1hcDxBc3NldCwgdWludDY0Pih7IGtleVByZWZpeDogJ3AnIH0pOwogICAgYnl0ZWMgOCAvLyAicCIKICAgIGRpZyAxCiAgICBjb25jYXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcm91dGVyLmFsZ28udHM6MTE1CiAgICAvLyB0aGlzLnBvb2xzKGFzc2V0KS52YWx1ZSA9IHBvb2xJZDsKICAgIHVuY292ZXIgMwogICAgaXRvYgogICAgYm94X3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czoxMTYKICAgIC8vIGNvbnN0IHRva2VuRGVjaW1hbHMgPSBhc3NldC5kZWNpbWFsczsKICAgIHN3YXAKICAgIGFzc2V0X3BhcmFtc19nZXQgQXNzZXREZWNpbWFscwogICAgYXNzZXJ0IC8vIGFzc2V0IGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czoxMTcKICAgIC8vIHRoaXMuYnJpZGdpbmdGZWVDb252ZXJzaW9uU2NhbGluZ0ZhY3Rvcihhc3NldCkudmFsdWUgPSAxMCAqKiAoT1JBQ0xFX1BSSUNFX1BSRUNJU0lPTiAtIHRva2VuRGVjaW1hbHMgKyBDSEFJTl9QUkVDSVNJT04pOwogICAgcHVzaGludCA5IC8vIDkKICAgIHN3YXAKICAgIC0KICAgIGR1cAogICAgcHVzaGludCA2IC8vIDYKICAgICsKICAgIHB1c2hpbnQgMTAgLy8gMTAKICAgIHN3YXAKICAgIGV4cAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czozOQogICAgLy8gcHJvdGVjdGVkIGJyaWRnaW5nRmVlQ29udmVyc2lvblNjYWxpbmdGYWN0b3IgPSBCb3hNYXA8QXNzZXQsIHVpbnQ2ND4oeyBrZXlQcmVmaXg6ICdmJyB9KTsKICAgIHB1c2hieXRlcyAiZiIKICAgIGRpZyAzCiAgICBjb25jYXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcm91dGVyLmFsZ28udHM6MTE3CiAgICAvLyB0aGlzLmJyaWRnaW5nRmVlQ29udmVyc2lvblNjYWxpbmdGYWN0b3IoYXNzZXQpLnZhbHVlID0gMTAgKiogKE9SQUNMRV9QUklDRV9QUkVDSVNJT04gLSB0b2tlbkRlY2ltYWxzICsgQ0hBSU5fUFJFQ0lTSU9OKTsKICAgIHN3YXAKICAgIGl0b2IKICAgIGJveF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcm91dGVyLmFsZ28udHM6MTE4CiAgICAvLyB0aGlzLmZyb21HYXNPcmFjbGVTY2FsaW5nRmFjdG9yKGFzc2V0KS52YWx1ZSA9IDEwICoqIChPUkFDTEVfUFJJQ0VfUFJFQ0lTSU9OIC0gdG9rZW5EZWNpbWFscyk7CiAgICBwdXNoaW50IDEwIC8vIDEwCiAgICBzd2FwCiAgICBleHAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcm91dGVyLmFsZ28udHM6MzYKICAgIC8vIHByb3RlY3RlZCBmcm9tR2FzT3JhY2xlU2NhbGluZ0ZhY3RvciA9IEJveE1hcDxBc3NldCwgdWludDY0Pih7IGtleVByZWZpeDogJ2UnIH0pOwogICAgcHVzaGJ5dGVzICJlIgogICAgdW5jb3ZlciAyCiAgICBjb25jYXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcm91dGVyLmFsZ28udHM6MTE4CiAgICAvLyB0aGlzLmZyb21HYXNPcmFjbGVTY2FsaW5nRmFjdG9yKGFzc2V0KS52YWx1ZSA9IDEwICoqIChPUkFDTEVfUFJJQ0VfUFJFQ0lTSU9OIC0gdG9rZW5EZWNpbWFscyk7CiAgICBzd2FwCiAgICBpdG9iCiAgICBib3hfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjExMgogICAgLy8gQGFiaW1ldGhvZCgpCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czo6Um91dGVyLnJlbW92ZVBvb2xbcm91dGluZ10oKSAtPiB2b2lkOgpyZW1vdmVQb29sOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czoxMjEKICAgIC8vIEBhYmltZXRob2QoKQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgYnRvaQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czoxMjMKICAgIC8vIHRoaXMub25seU93bmVyKCk7CiAgICBjYWxsc3ViIG9ubHlPd25lcgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czoxMjQKICAgIC8vIHRoaXMucG9vbHModG9rZW5JZCkuZGVsZXRlKCk7CiAgICBpdG9iCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjM0CiAgICAvLyBwb29scyA9IEJveE1hcDxBc3NldCwgdWludDY0Pih7IGtleVByZWZpeDogJ3AnIH0pOwogICAgYnl0ZWMgOCAvLyAicCIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czoxMjQKICAgIC8vIHRoaXMucG9vbHModG9rZW5JZCkuZGVsZXRlKCk7CiAgICBib3hfZGVsCiAgICBwb3AKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcm91dGVyLmFsZ28udHM6MTIxCiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjpSb3V0ZXIuc3RvcFN3YXBbcm91dGluZ10oKSAtPiB2b2lkOgpzdG9wU3dhcDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcm91dGVyLmFsZ28udHM6NzEKICAgIC8vIGFzc2VydChvcC5UeG4uc2VuZGVyLmJ5dGVzID09PSB0aGlzLnN0b3BBdXRob3JpdHkudmFsdWUuYnl0ZXMsICdSb3V0ZXI6IGlzIG5vdCBzdG9wQXV0aG9yaXR5Jyk7CiAgICB0eG4gU2VuZGVyCiAgICBpbnRjXzEgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czo0MgogICAgLy8gcHJpdmF0ZSBzdG9wQXV0aG9yaXR5ID0gR2xvYmFsU3RhdGU8QWRkcmVzcz4oKTsvLyBjYW4gcmVzdHJpY3QgZGVwb3NpdCBvciB3aXRoZHJhdyBvcGVyYXRpb25zCiAgICBieXRlYyA5IC8vICJzdG9wQXV0aG9yaXR5IgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czo3MQogICAgLy8gYXNzZXJ0KG9wLlR4bi5zZW5kZXIuYnl0ZXMgPT09IHRoaXMuc3RvcEF1dGhvcml0eS52YWx1ZS5ieXRlcywgJ1JvdXRlcjogaXMgbm90IHN0b3BBdXRob3JpdHknKTsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICA9PQogICAgYXNzZXJ0IC8vIFJvdXRlcjogaXMgbm90IHN0b3BBdXRob3JpdHkKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcm91dGVyLmFsZ28udHM6NTMKICAgIC8vIGNhblN3YXAgPSBHbG9iYWxTdGF0ZTxib29sZWFuPih7IGluaXRpYWxWYWx1ZTogdHJ1ZSB9KTsKICAgIGJ5dGVjXzEgLy8gImNhblN3YXAiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjEzMwogICAgLy8gdGhpcy5jYW5Td2FwLnZhbHVlID0gZmFsc2U7CiAgICBpbnRjXzEgLy8gMAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcm91dGVyLmFsZ28udHM6MTMwCiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjpSb3V0ZXIuc3RhcnRTd2FwW3JvdXRpbmddKCkgLT4gdm9pZDoKc3RhcnRTd2FwOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czoxNDEKICAgIC8vIHRoaXMub25seU93bmVyKCk7CiAgICBjYWxsc3ViIG9ubHlPd25lcgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czo1MwogICAgLy8gY2FuU3dhcCA9IEdsb2JhbFN0YXRlPGJvb2xlYW4+KHsgaW5pdGlhbFZhbHVlOiB0cnVlIH0pOwogICAgYnl0ZWNfMSAvLyAiY2FuU3dhcCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcm91dGVyLmFsZ28udHM6MTQyCiAgICAvLyB0aGlzLmNhblN3YXAudmFsdWUgPSB0cnVlOwogICAgaW50Y18wIC8vIDEKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjEzOQogICAgLy8gQGFiaW1ldGhvZCgpCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czo6Um91dGVyLnNldFN0b3BBdXRob3JpdHlbcm91dGluZ10oKSAtPiB2b2lkOgpzZXRTdG9wQXV0aG9yaXR5OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czoxNDgKICAgIC8vIEBhYmltZXRob2QoKQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMyAvLyAzMgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC5zdGF0aWNfYXJyYXk8YXJjNC51aW50OCwgMzI+CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjE1MAogICAgLy8gdGhpcy5vbmx5T3duZXIoKTsKICAgIGNhbGxzdWIgb25seU93bmVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjQyCiAgICAvLyBwcml2YXRlIHN0b3BBdXRob3JpdHkgPSBHbG9iYWxTdGF0ZTxBZGRyZXNzPigpOy8vIGNhbiByZXN0cmljdCBkZXBvc2l0IG9yIHdpdGhkcmF3IG9wZXJhdGlvbnMKICAgIGJ5dGVjIDkgLy8gInN0b3BBdXRob3JpdHkiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjE1MQogICAgLy8gdGhpcy5zdG9wQXV0aG9yaXR5LnZhbHVlID0gc3RvcEF1dGhvcml0eTsKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjE0OAogICAgLy8gQGFiaW1ldGhvZCgpCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czo6Um91dGVyLnNldFJlYmFsYW5jZXJbcm91dGluZ10oKSAtPiB2b2lkOgpzZXRSZWJhbGFuY2VyOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czoxNTcKICAgIC8vIEBhYmltZXRob2QoKQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMyAvLyAzMgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC5zdGF0aWNfYXJyYXk8YXJjNC51aW50OCwgMzI+CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjE1OQogICAgLy8gdGhpcy5vbmx5T3duZXIoKTsKICAgIGNhbGxzdWIgb25seU93bmVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjUyCiAgICAvLyBwcml2YXRlIHJlYmFsYW5jZXIgPSBHbG9iYWxTdGF0ZTxBZGRyZXNzPih7IGluaXRpYWxWYWx1ZTogbmV3IEFkZHJlc3MoYnplcm8oMCkpIH0pOy8vIGNhbiByZXN0cmljdCBkZXBvc2l0IG9yIHdpdGhkcmF3IG9wZXJhdGlvbnMKICAgIGJ5dGVjIDQgLy8gInJlYmFsYW5jZXIiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjE2MAogICAgLy8gdGhpcy5yZWJhbGFuY2VyLnZhbHVlID0gcmViYWxhbmNlcjsKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjE1NwogICAgLy8gQGFiaW1ldGhvZCgpCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9nYXMtdXNhZ2UuYWxnby50czo6R2FzVXNhZ2UuZ2V0R2FzVXNhZ2Vbcm91dGluZ10oKSAtPiB2b2lkOgpnZXRHYXNVc2FnZToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvZ2FzLXVzYWdlLmFsZ28udHM6MTcKICAgIC8vIEBhYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMCAvLyAxCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ4CiAgICBjYWxsc3ViIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvZ2FzLXVzYWdlLmFsZ28udHM6Okdhc1VzYWdlLmdldEdhc1VzYWdlCiAgICBpdG9iCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9nYXMtdXNhZ2UuYWxnby50czo6R2FzVXNhZ2Uuc2V0R2FzVXNhZ2Vbcm91dGluZ10oKSAtPiB2b2lkOgpzZXRHYXNVc2FnZToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvZ2FzLXVzYWdlLmFsZ28udHM6MjIKICAgIC8vIEBhYmltZXRob2QoKQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMCAvLyAxCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ4CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2dhcy11c2FnZS5hbGdvLnRzOjI0CiAgICAvLyB0aGlzLm9ubHlPd25lcigpOwogICAgY2FsbHN1YiBvbmx5T3duZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvZ2FzLXVzYWdlLmFsZ28udHM6MTAKICAgIC8vIGdhc1VzYWdlID0gQm94TWFwPEJ5dGUsIHVpbnQ2ND4oeyBrZXlQcmVmaXg6ICd1JyB9KTsKICAgIGJ5dGVjIDEyIC8vICJ1IgogICAgdW5jb3ZlciAyCiAgICBjb25jYXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvZ2FzLXVzYWdlLmFsZ28udHM6MjUKICAgIC8vIHRoaXMuZ2FzVXNhZ2UoY2hhaW5JZCkudmFsdWUgPSBnYXNBbW91bnQ7CiAgICBzd2FwCiAgICBpdG9iCiAgICBib3hfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2dhcy11c2FnZS5hbGdvLnRzOjIyCiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2dhcy11c2FnZS5hbGdvLnRzOjpHYXNVc2FnZS5zZXRHYXNPcmFjbGVbcm91dGluZ10oKSAtPiB2b2lkOgpzZXRHYXNPcmFjbGU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2dhcy11c2FnZS5hbGdvLnRzOjI4CiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzIgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50NjQKICAgIGJ0b2kKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvZ2FzLXVzYWdlLmFsZ28udHM6MzAKICAgIC8vIHRoaXMub25seU93bmVyKCk7CiAgICBjYWxsc3ViIG9ubHlPd25lcgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9nYXMtdXNhZ2UuYWxnby50czo5CiAgICAvLyBnYXNPcmFjbGUgPSBHbG9iYWxTdGF0ZTxBcHBsaWNhdGlvbj4oKTsKICAgIGJ5dGVjXzMgLy8gImdhc09yYWNsZSIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvZ2FzLXVzYWdlLmFsZ28udHM6MzEKICAgIC8vIHRoaXMuZ2FzT3JhY2xlLnZhbHVlID0gZ2FzT3JhY2xlOwogICAgc3dhcAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvZ2FzLXVzYWdlLmFsZ28udHM6MjgKICAgIC8vIEBhYmltZXRob2QoKQogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvZ2FzLXVzYWdlLmFsZ28udHM6Okdhc1VzYWdlLmdldFRyYW5zYWN0aW9uUmVsYXllckNvc3Rbcm91dGluZ10oKSAtPiB2b2lkOgpnZXRUcmFuc2FjdGlvblJlbGF5ZXJDb3N0OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9nYXMtdXNhZ2UuYWxnby50czozNAogICAgLy8gQGFiaW1ldGhvZCh7IHJlYWRvbmx5OiB0cnVlIH0pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18wIC8vIDEKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDgKICAgIGNhbGxzdWIgc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9nYXMtdXNhZ2UuYWxnby50czo6R2FzVXNhZ2UuZ2V0VHJhbnNhY3Rpb25SZWxheWVyQ29zdAogICAgaXRvYgogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvb3duYWJsZS5hbGdvLnRzOjpPd25hYmxlLnRyYW5zZmVyT3duZXJzaGlwW3JvdXRpbmddKCkgLT4gdm9pZDoKdHJhbnNmZXJPd25lcnNoaXA6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL293bmFibGUuYWxnby50czoxNgogICAgLy8gQGFiaW1ldGhvZCgpCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18zIC8vIDMyCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnN0YXRpY19hcnJheTxhcmM0LnVpbnQ4LCAzMj4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvb3duYWJsZS5hbGdvLnRzOjE4CiAgICAvLyB0aGlzLm9ubHlPd25lcigpOwogICAgY2FsbHN1YiBvbmx5T3duZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvb3duYWJsZS5hbGdvLnRzOjYKICAgIC8vIHByb3RlY3RlZCBvd25lciA9IEdsb2JhbFN0YXRlPEFkZHJlc3M+KCk7CiAgICBieXRlY18yIC8vICJvd25lciIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvb3duYWJsZS5hbGdvLnRzOjE5CiAgICAvLyB0aGlzLm93bmVyLnZhbHVlID0gbmV3T3duZXI7CiAgICBzd2FwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9vd25hYmxlLmFsZ28udHM6MTYKICAgIC8vIEBhYmltZXRob2QoKQogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6OkJyaWRnZS5fc3dhcEFuZEJyaWRnZShmZWVGcm9tTmF0aXZlOiB1aW50NjQsIGFzc2V0VHJhbnNmZXJSZWY6IHVpbnQ2NCwgcmVjaXBpZW50OiBieXRlcywgZGVzdGluYXRpb25DaGFpbklkOiBieXRlcywgcmVjZWl2ZVRva2VuOiBieXRlcywgbm9uY2U6IGJ5dGVzLCBmZWVUb2tlbkFtb3VudDogdWludDY0LCBidWRnZXQ6IHVpbnQ2NCkgLT4gdm9pZDoKX3N3YXBBbmRCcmlkZ2U6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjExNi0xMjUKICAgIC8vIHByaXZhdGUgX3N3YXBBbmRCcmlkZ2UoCiAgICAvLyAgIGZlZUZyb21OYXRpdmU6IHVpbnQ2NCwKICAgIC8vICAgYXNzZXRUcmFuc2ZlclJlZjogZ3R4bi5Bc3NldFRyYW5zZmVyVHhuLAogICAgLy8gICByZWNpcGllbnQ6IFN0YXRpY0J5dGVzPDMyPiwKICAgIC8vICAgZGVzdGluYXRpb25DaGFpbklkOiBCeXRlLAogICAgLy8gICByZWNlaXZlVG9rZW46IFN0YXRpY0J5dGVzPDMyPiwKICAgIC8vICAgbm9uY2U6IFN0YXRpY0J5dGVzPDMyPiwKICAgIC8vICAgZmVlVG9rZW5BbW91bnQ6IHVpbnQ2NCwKICAgIC8vICAgYnVkZ2V0OiB1aW50NjQsCiAgICAvLyApOiB2b2lkIHsKICAgIHByb3RvIDggMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoxMjYKICAgIC8vIGVuc3VyZUJ1ZGdldChidWRnZXQsIE9wVXBGZWVTb3VyY2UuR3JvdXBDcmVkaXQpOwogICAgZnJhbWVfZGlnIC0xCiAgICBpbnRjXzEgLy8gMAogICAgY2FsbHN1YiBlbnN1cmVfYnVkZ2V0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjY0CiAgICAvLyBhc3NlcnQodGhpcy5jYW5Td2FwLnZhbHVlLCAnUm91dGVyOiBzd2FwIHByb2hpYml0ZWQnKTsKICAgIGludGNfMSAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjUzCiAgICAvLyBjYW5Td2FwID0gR2xvYmFsU3RhdGU8Ym9vbGVhbj4oeyBpbml0aWFsVmFsdWU6IHRydWUgfSk7CiAgICBieXRlY18xIC8vICJjYW5Td2FwIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czo2NAogICAgLy8gYXNzZXJ0KHRoaXMuY2FuU3dhcC52YWx1ZSwgJ1JvdXRlcjogc3dhcCBwcm9oaWJpdGVkJyk7CiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgYXNzZXJ0IC8vIFJvdXRlcjogc3dhcCBwcm9oaWJpdGVkCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjEyOAogICAgLy8gY29uc3QgYW1vdW50ID0gYW1vdW50RnJvbUFzc2V0VHJhbnNmZXIoYXNzZXRUcmFuc2ZlclJlZik7CiAgICBmcmFtZV9kaWcgLTcKICAgIGNhbGxzdWIgYW1vdW50RnJvbUFzc2V0VHJhbnNmZXIKICAgIGR1cAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoxMjkKICAgIC8vIGFzc2VydChhbW91bnQgPiBmZWVUb2tlbkFtb3VudCwgJ0JyaWRnZTogYW1vdW50IHRvbyBsb3cgZm9yIGZlZScpOwogICAgZnJhbWVfZGlnIC0yCiAgICA+CiAgICBhc3NlcnQgLy8gQnJpZGdlOiBhbW91bnQgdG9vIGxvdyBmb3IgZmVlCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjEzMAogICAgLy8gYXNzZXJ0KCFyZWNpcGllbnQuYnl0ZXMuZXF1YWxzKGJ6ZXJvKDMyKSksICdCcmlkZ2U6IGJyaWRnZSB0byB0aGUgemVybyBhZGRyZXNzJyk7CiAgICBpbnRjXzMgLy8gMzIKICAgIGJ6ZXJvCiAgICBmcmFtZV9kaWcgLTYKICAgID09CiAgICAhCiAgICBhc3NlcnQgLy8gQnJpZGdlOiBicmlkZ2UgdG8gdGhlIHplcm8gYWRkcmVzcwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoxMzIKICAgIC8vIGNvbnN0IGZlZUZyb21TdGFibGU6IHVpbnQ2NCA9IHRoaXMuX2NvbnZlcnRCcmlkZ2luZ0ZlZUluVG9rZW5zVG9OYXRpdmVUb2tlbihhc3NldFRyYW5zZmVyUmVmLnhmZXJBc3NldCwgZmVlVG9rZW5BbW91bnQpOwogICAgZnJhbWVfZGlnIC03CiAgICBndHhucyBYZmVyQXNzZXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MzY1CiAgICAvLyBpZiAoZmVlVG9rZW5BbW91bnQgPT09IDApIHJldHVybiAwOwogICAgZnJhbWVfZGlnIC0yCiAgICBibnogX3N3YXBBbmRCcmlkZ2VfYWZ0ZXJfaWZfZWxzZUAzCiAgICBpbnRjXzEgLy8gMAoKX3N3YXBBbmRCcmlkZ2VfYWZ0ZXJfaW5saW5lZF9zbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjpCcmlkZ2UuX2NvbnZlcnRCcmlkZ2luZ0ZlZUluVG9rZW5zVG9OYXRpdmVUb2tlbkA1OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoxMzMKICAgIC8vIGNvbnN0IGJyaWRnaW5nRmVlOiB1aW50NjQgPSBmZWVGcm9tTmF0aXZlICsgZmVlRnJvbVN0YWJsZTsKICAgIGZyYW1lX2RpZyAtOAogICAgZGlnIDEKICAgICsKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MTM0CiAgICAvLyBlbWl0PEJyaWRnaW5nRmVlRnJvbVRva2Vucz4oeyBmZWVGcm9tTmF0aXZlLCBmZWVGcm9tU3RhYmxlLCBmZWVTdGFibGVUb2tlbkFtb3VudDogZmVlVG9rZW5BbW91bnQgfSk7CiAgICBmcmFtZV9kaWcgLTgKICAgIGl0b2IKICAgIHVuY292ZXIgMgogICAgaXRvYgogICAgY29uY2F0CiAgICBmcmFtZV9kaWcgLTIKICAgIGl0b2IKICAgIGNvbmNhdAogICAgcHVzaGJ5dGVzIDB4MzZiYWZhZGQgLy8gbWV0aG9kICJCcmlkZ2luZ0ZlZUZyb21Ub2tlbnModWludDY0LHVpbnQ2NCx1aW50NjQpIgogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MTM2CiAgICAvLyBjb25zdCBhbW91bnRBZnRlckZlZTogdWludDY0ID0gYW1vdW50IC0gZmVlVG9rZW5BbW91bnQ7CiAgICBmcmFtZV9kaWcgMAogICAgZnJhbWVfZGlnIC0yCiAgICAtCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjEzOAogICAgLy8gY29uc3QgdlVzZEFtb3VudCA9IHRoaXMuc2VuZEFuZFN3YXBUb1ZVc2QoYXNzZXRUcmFuc2ZlclJlZi54ZmVyQXNzZXQsIHNlbmRlciwgYW1vdW50QWZ0ZXJGZWUpOwogICAgZnJhbWVfZGlnIDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MTM3CiAgICAvLyBjb25zdCBzZW5kZXIgPSBuZXcgQWRkcmVzcyhUeG4uc2VuZGVyKTsKICAgIHR4biBTZW5kZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MTM4CiAgICAvLyBjb25zdCB2VXNkQW1vdW50ID0gdGhpcy5zZW5kQW5kU3dhcFRvVlVzZChhc3NldFRyYW5zZmVyUmVmLnhmZXJBc3NldCwgc2VuZGVyLCBhbW91bnRBZnRlckZlZSk7CiAgICB1bmNvdmVyIDIKICAgIGNhbGxzdWIgc2VuZEFuZFN3YXBUb1ZVc2QKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MTUwCiAgICAvLyBhc3NlcnQoZGVzdGluYXRpb25DaGFpbklkICE9PSB0aGlzLmNoYWluSWQudmFsdWUsICdCcmlkZ2U6IHdyb25nIGRlc3RpbmF0aW9uIGNoYWluJyk7CiAgICBpbnRjXzEgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czo1NwogICAgLy8gY2hhaW5JZCA9IEdsb2JhbFN0YXRlPEJ5dGU+KCk7CiAgICBieXRlYyA1IC8vICJjaGFpbklkIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoxNTAKICAgIC8vIGFzc2VydChkZXN0aW5hdGlvbkNoYWluSWQgIT09IHRoaXMuY2hhaW5JZC52YWx1ZSwgJ0JyaWRnZTogd3JvbmcgZGVzdGluYXRpb24gY2hhaW4nKTsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICBmcmFtZV9kaWcgLTUKICAgIGRpZyAxCiAgICAhPQogICAgYXNzZXJ0IC8vIEJyaWRnZTogd3JvbmcgZGVzdGluYXRpb24gY2hhaW4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MzYxCiAgICAvLyByZXR1cm4gY2hhaW5JZC5ieXRlcy5jb25jYXQodG9rZW4uYnl0ZXMpOwogICAgZnJhbWVfZGlnIC01CiAgICBmcmFtZV9kaWcgLTQKICAgIGNvbmNhdAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czo2NwogICAgLy8gb3RoZXJCcmlkZ2VUb2tlbnMgPSBCb3hNYXA8Ynl0ZXMsIFN0YXRpY0J5dGVzPih7IGtleVByZWZpeDogJ3QnIH0pOwogICAgYnl0ZWMgNyAvLyAidCIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoxNTEKICAgIC8vIGFzc2VydCh0aGlzLm90aGVyQnJpZGdlVG9rZW5zKHRoaXMuX2dldE90aGVyQnJpZGdlVG9rZW5zS2V5KGRlc3RpbmF0aW9uQ2hhaW5JZCwgcmVjZWl2ZVRva2VuKSkuZXhpc3RzLCAnQnJpZGdlOiB1bmtub3duIGNoYWluIG9yIHRva2VuJyk7CiAgICBib3hfbGVuCiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBCcmlkZ2U6IHVua25vd24gY2hhaW4gb3IgdG9rZW4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MTUzCiAgICAvLyBjb25zdCBtZXNzYWdlID0gdGhpcy5oYXNoTWVzc2FnZShhbW91bnQsIHJlY2lwaWVudCwgdGhpcy5jaGFpbklkLnZhbHVlLCBkZXN0aW5hdGlvbkNoYWluSWQsIHJlY2VpdmVUb2tlbiwgbm9uY2UpOwogICAgZGlnIDEKICAgIGZyYW1lX2RpZyAtNgogICAgdW5jb3ZlciAyCiAgICBmcmFtZV9kaWcgLTUKICAgIGZyYW1lX2RpZyAtNAogICAgZnJhbWVfZGlnIC0zCiAgICBjYWxsc3ViIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6OkJyaWRnZS5oYXNoTWVzc2FnZQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czozNDEKICAgIC8vIHJldHVybiB0aGlzLmdldFRyYW5zYWN0aW9uUmVsYXllckNvc3QoY2hhaW5JZCkgKyB0aGlzLmdldFNlbmRUcmFuc2FjdGlvblN0b3JhZ2VDb3N0KCk7CiAgICBmcmFtZV9kaWcgLTUKICAgIGNhbGxzdWIgc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9nYXMtdXNhZ2UuYWxnby50czo6R2FzVXNhZ2UuZ2V0VHJhbnNhY3Rpb25SZWxheWVyQ29zdAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czozNTUKICAgIC8vIHJldHVybiAxNTcwMDsKICAgIGludGMgNCAvLyAxNTcwMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czozNDEKICAgIC8vIHJldHVybiB0aGlzLmdldFRyYW5zYWN0aW9uUmVsYXllckNvc3QoY2hhaW5JZCkgKyB0aGlzLmdldFNlbmRUcmFuc2FjdGlvblN0b3JhZ2VDb3N0KCk7CiAgICArCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjYyCiAgICAvLyBzZW50TWVzc2FnZXMgPSBCb3hNYXA8U3RhdGljQnl0ZXM8MzI+LCBTdGF0aWNCeXRlcz4oeyBrZXlQcmVmaXg6ICdzJyB9KTsKICAgIHB1c2hieXRlcyAicyIKICAgIGRpZyAyCiAgICBjb25jYXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MTcyCiAgICAvLyBhc3NlcnQoIXRoaXMuc2VudE1lc3NhZ2VzKG1lc3NhZ2UpLmV4aXN0cywgJ0JyaWRnZTogdG9rZW5zIGFscmVhZHkgc2VudCcpOwogICAgZHVwCiAgICBib3hfbGVuCiAgICBidXJ5IDEKICAgICEKICAgIGFzc2VydCAvLyBCcmlkZ2U6IHRva2VucyBhbHJlYWR5IHNlbnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MTc0CiAgICAvLyB0aGlzLnNlbnRNZXNzYWdlcyhtZXNzYWdlKS52YWx1ZSA9IG5ldyBTdGF0aWNCeXRlcygpOwogICAgcHVzaGJ5dGVzIDB4CiAgICBib3hfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjE3NgogICAgLy8gY29uc3QgZGVzdGluYXRpb25DaGFpbklkID0gbWVzc2FnZS5hdCgxKTsKICAgIGRpZyAxCiAgICBleHRyYWN0IDEgMSAvLyBvbiBlcnJvcjogaW5kZXggYWNjZXNzIGlzIG91dCBvZiBib3VuZHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MTc3LTE4MQogICAgLy8gY29uc3QgbWVzc2FnZUNvc3QgPSBhYmlDYWxsKHsKICAgIC8vICAgbWV0aG9kOiBNZXNzZW5nZXIucHJvdG90eXBlLmdldFRyYW5zYWN0aW9uQ29zdCwKICAgIC8vICAgYXBwSWQ6IHRoaXMubWVzc2VuZ2VyLnZhbHVlLmlkLAogICAgLy8gICBhcmdzOiBbZGVzdGluYXRpb25DaGFpbklkXSwKICAgIC8vIH0pLnJldHVyblZhbHVlOwogICAgaXR4bl9iZWdpbgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoxNzkKICAgIC8vIGFwcElkOiB0aGlzLm1lc3Nlbmdlci52YWx1ZS5pZCwKICAgIGludGNfMSAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjU4CiAgICAvLyBtZXNzZW5nZXIgPSBHbG9iYWxTdGF0ZTxBcHBsaWNhdGlvbj4oKTsKICAgIGJ5dGVjIDYgLy8gIm1lc3NlbmdlciIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MTc5CiAgICAvLyBhcHBJZDogdGhpcy5tZXNzZW5nZXIudmFsdWUuaWQsCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoxNzctMTgxCiAgICAvLyBjb25zdCBtZXNzYWdlQ29zdCA9IGFiaUNhbGwoewogICAgLy8gICBtZXRob2Q6IE1lc3Nlbmdlci5wcm90b3R5cGUuZ2V0VHJhbnNhY3Rpb25Db3N0LAogICAgLy8gICBhcHBJZDogdGhpcy5tZXNzZW5nZXIudmFsdWUuaWQsCiAgICAvLyAgIGFyZ3M6IFtkZXN0aW5hdGlvbkNoYWluSWRdLAogICAgLy8gfSkucmV0dXJuVmFsdWU7CiAgICBieXRlYyAxMyAvLyBtZXRob2QgImdldFRyYW5zYWN0aW9uQ29zdChieXRlKXVpbnQ2NCIKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBzd2FwCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgZHVwCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uSUQKICAgIHB1c2hpbnQgNiAvLyBhcHBsCiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnRjXzEgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKICAgIGl0eG5fc3VibWl0CiAgICBpdHhuIExhc3RMb2cKICAgIGR1cAogICAgZXh0cmFjdCA0IDAKICAgIHN3YXAKICAgIGV4dHJhY3QgMCA0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgID09CiAgICBhc3NlcnQgLy8gQnl0ZXMgaGFzIHZhbGlkIHByZWZpeAogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgYnRvaQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoxODUKICAgIC8vIHJlY2VpdmVyOiB0aGlzLm1lc3Nlbmdlci52YWx1ZS5hZGRyZXNzLAogICAgZGlnIDEKICAgIGFwcF9wYXJhbXNfZ2V0IEFwcEFkZHJlc3MKICAgIGFzc2VydCAvLyBhcHBsaWNhdGlvbiBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MTg3LTE4OQogICAgLy8gYWJpQ2FsbCh7CiAgICAvLyAgIG1ldGhvZDogTWVzc2VuZ2VyLnByb3RvdHlwZS5zZW5kTWVzc2FnZSwgYXBwSWQ6IHRoaXMubWVzc2VuZ2VyLnZhbHVlLmlkLCBhcmdzOiBbcGF5bWVudFBhcmFtcywgbWVzc2FnZV0sCiAgICAvLyB9KTsKICAgIGl0eG5fYmVnaW4KICAgIGl0eG5fZmllbGQgUmVjZWl2ZXIKICAgIGR1cAogICAgaXR4bl9maWVsZCBBbW91bnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MTgzLTE4NgogICAgLy8gY29uc3QgcGF5bWVudFBhcmFtcyA9IGl0eG4ucGF5bWVudCh7CiAgICAvLyAgIGFtb3VudDogbWVzc2FnZUNvc3QsCiAgICAvLyAgIHJlY2VpdmVyOiB0aGlzLm1lc3Nlbmdlci52YWx1ZS5hZGRyZXNzLAogICAgLy8gfSk7CiAgICBpbnRjXzAgLy8gMQogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18xIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjE4Ny0xODkKICAgIC8vIGFiaUNhbGwoewogICAgLy8gICBtZXRob2Q6IE1lc3Nlbmdlci5wcm90b3R5cGUuc2VuZE1lc3NhZ2UsIGFwcElkOiB0aGlzLm1lc3Nlbmdlci52YWx1ZS5pZCwgYXJnczogW3BheW1lbnRQYXJhbXMsIG1lc3NhZ2VdLAogICAgLy8gfSk7CiAgICBpdHhuX25leHQKICAgIHB1c2hieXRlcyAweGQwMmY1N2Y1IC8vIG1ldGhvZCAic2VuZE1lc3NhZ2UocGF5LGJ5dGVbMzJdKXZvaWQiCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgdW5jb3ZlciAzCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgc3dhcAogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbklECiAgICBwdXNoaW50IDYgLy8gYXBwbAogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18xIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICBpdHhuX3N1Ym1pdAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoxNTYKICAgIC8vIGVtaXQ8UmVjZWl2ZUZlZT4oeyBicmlkZ2VUcmFuc2FjdGlvbkNvc3QsIG1lc3NhZ2VUcmFuc2FjdGlvbkNvc3QgfSk7CiAgICBkaWcgMQogICAgaXRvYgogICAgZGlnIDEKICAgIGl0b2IKICAgIGNvbmNhdAogICAgcHVzaGJ5dGVzIDB4NGI1NTQxOWIgLy8gbWV0aG9kICJSZWNlaXZlRmVlKHVpbnQ2NCx1aW50NjQpIgogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MTU3CiAgICAvLyBhc3NlcnQoYnJpZGdpbmdGZWUgPj0gYnJpZGdlVHJhbnNhY3Rpb25Db3N0ICsgbWVzc2FnZVRyYW5zYWN0aW9uQ29zdCwgJ0JyaWRnZTogbm90IGVub3VnaCBmZWUnKTsKICAgICsKICAgIHVuY292ZXIgMgogICAgPD0KICAgIGFzc2VydCAvLyBCcmlkZ2U6IG5vdCBlbm91Z2ggZmVlCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjE1OC0xNjUKICAgIC8vIGVtaXQ8VG9rZW5zU2VudD4oewogICAgLy8gICAgIGFtb3VudCwKICAgIC8vICAgICByZWNpcGllbnQsCiAgICAvLyAgICAgZGVzdGluYXRpb25DaGFpbklkLAogICAgLy8gICAgIHJlY2VpdmVUb2tlbiwKICAgIC8vICAgICBub25jZSwKICAgIC8vICAgICBtZXNzZW5nZXI6IEFMTEJSSURHRV9NRVNTRU5HRVIsCiAgICAvLyAgIH0sCiAgICBpdG9iCiAgICBmcmFtZV9kaWcgLTYKICAgIGNvbmNhdAogICAgZnJhbWVfZGlnIC01CiAgICBjb25jYXQKICAgIGZyYW1lX2RpZyAtNAogICAgY29uY2F0CiAgICBmcmFtZV9kaWcgLTMKICAgIGNvbmNhdAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoxNjQKICAgIC8vIG1lc3NlbmdlcjogQUxMQlJJREdFX01FU1NFTkdFUiwKICAgIGJ5dGVjIDEwIC8vIDB4MDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MTU4LTE2NQogICAgLy8gZW1pdDxUb2tlbnNTZW50Pih7CiAgICAvLyAgICAgYW1vdW50LAogICAgLy8gICAgIHJlY2lwaWVudCwKICAgIC8vICAgICBkZXN0aW5hdGlvbkNoYWluSWQsCiAgICAvLyAgICAgcmVjZWl2ZVRva2VuLAogICAgLy8gICAgIG5vbmNlLAogICAgLy8gICAgIG1lc3NlbmdlcjogQUxMQlJJREdFX01FU1NFTkdFUiwKICAgIC8vICAgfSwKICAgIGNvbmNhdAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoxNTgtMTY2CiAgICAvLyBlbWl0PFRva2Vuc1NlbnQ+KHsKICAgIC8vICAgICBhbW91bnQsCiAgICAvLyAgICAgcmVjaXBpZW50LAogICAgLy8gICAgIGRlc3RpbmF0aW9uQ2hhaW5JZCwKICAgIC8vICAgICByZWNlaXZlVG9rZW4sCiAgICAvLyAgICAgbm9uY2UsCiAgICAvLyAgICAgbWVzc2VuZ2VyOiBBTExCUklER0VfTUVTU0VOR0VSLAogICAgLy8gICB9LAogICAgLy8gKTsKICAgIHB1c2hieXRlcyAweDIyOWZiYWVjIC8vIG1ldGhvZCAiVG9rZW5zU2VudCh1aW50NjQsYnl0ZVszMl0sYnl0ZSxieXRlWzMyXSxieXRlWzMyXSxieXRlKSIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICByZXRzdWIKCl9zd2FwQW5kQnJpZGdlX2FmdGVyX2lmX2Vsc2VAMzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MzY3CiAgICAvLyBjb25zdCBmZWU6IHVpbnQ2NCA9IHRoaXMuYnJpZGdpbmdGZWVDb252ZXJzaW9uU2NhbGluZ0ZhY3Rvcihhc3NldCkudmFsdWUgKiBmZWVUb2tlbkFtb3VudCAvIGFiaUNhbGwoewogICAgZnJhbWVfZGlnIDEKICAgIGl0b2IKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcm91dGVyLmFsZ28udHM6MzkKICAgIC8vIHByb3RlY3RlZCBicmlkZ2luZ0ZlZUNvbnZlcnNpb25TY2FsaW5nRmFjdG9yID0gQm94TWFwPEFzc2V0LCB1aW50NjQ+KHsga2V5UHJlZml4OiAnZicgfSk7CiAgICBwdXNoYnl0ZXMgImYiCiAgICBzd2FwCiAgICBjb25jYXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MzY3CiAgICAvLyBjb25zdCBmZWU6IHVpbnQ2NCA9IHRoaXMuYnJpZGdpbmdGZWVDb252ZXJzaW9uU2NhbGluZ0ZhY3Rvcihhc3NldCkudmFsdWUgKiBmZWVUb2tlbkFtb3VudCAvIGFiaUNhbGwoewogICAgYm94X2dldAogICAgYXNzZXJ0IC8vIEJveCBtdXN0IGhhdmUgdmFsdWUKICAgIGJ0b2kKICAgIGZyYW1lX2RpZyAtMgogICAgKgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czozNjctMzcxCiAgICAvLyBjb25zdCBmZWU6IHVpbnQ2NCA9IHRoaXMuYnJpZGdpbmdGZWVDb252ZXJzaW9uU2NhbGluZ0ZhY3Rvcihhc3NldCkudmFsdWUgKiBmZWVUb2tlbkFtb3VudCAvIGFiaUNhbGwoewogICAgLy8gICBtZXRob2Q6IEdhc09yYWNsZS5wcm90b3R5cGUuZ2V0UHJpY2UsCiAgICAvLyAgIGFwcElkOiB0aGlzLmdhc09yYWNsZS52YWx1ZS5pZCwKICAgIC8vICAgYXJnczogW3RoaXMuY2hhaW5JZC52YWx1ZV0sCiAgICAvLyB9KS5yZXR1cm5WYWx1ZTsKICAgIGl0eG5fYmVnaW4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MzY5CiAgICAvLyBhcHBJZDogdGhpcy5nYXNPcmFjbGUudmFsdWUuaWQsCiAgICBpbnRjXzEgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9nYXMtdXNhZ2UuYWxnby50czo5CiAgICAvLyBnYXNPcmFjbGUgPSBHbG9iYWxTdGF0ZTxBcHBsaWNhdGlvbj4oKTsKICAgIGJ5dGVjXzMgLy8gImdhc09yYWNsZSIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MzY5CiAgICAvLyBhcHBJZDogdGhpcy5nYXNPcmFjbGUudmFsdWUuaWQsCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czozNzAKICAgIC8vIGFyZ3M6IFt0aGlzLmNoYWluSWQudmFsdWVdLAogICAgaW50Y18xIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6NTcKICAgIC8vIGNoYWluSWQgPSBHbG9iYWxTdGF0ZTxCeXRlPigpOwogICAgYnl0ZWMgNSAvLyAiY2hhaW5JZCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MzcwCiAgICAvLyBhcmdzOiBbdGhpcy5jaGFpbklkLnZhbHVlXSwKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjM2Ny0zNzEKICAgIC8vIGNvbnN0IGZlZTogdWludDY0ID0gdGhpcy5icmlkZ2luZ0ZlZUNvbnZlcnNpb25TY2FsaW5nRmFjdG9yKGFzc2V0KS52YWx1ZSAqIGZlZVRva2VuQW1vdW50IC8gYWJpQ2FsbCh7CiAgICAvLyAgIG1ldGhvZDogR2FzT3JhY2xlLnByb3RvdHlwZS5nZXRQcmljZSwKICAgIC8vICAgYXBwSWQ6IHRoaXMuZ2FzT3JhY2xlLnZhbHVlLmlkLAogICAgLy8gICBhcmdzOiBbdGhpcy5jaGFpbklkLnZhbHVlXSwKICAgIC8vIH0pLnJldHVyblZhbHVlOwogICAgcHVzaGJ5dGVzIDB4MWRiNzBjZGQgLy8gbWV0aG9kICJnZXRQcmljZShieXRlKXVpbnQ2NCIKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbklECiAgICBwdXNoaW50IDYgLy8gYXBwbAogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18xIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICBpdHhuX3N1Ym1pdAogICAgaXR4biBMYXN0TG9nCiAgICBkdXAKICAgIGV4dHJhY3QgNCAwCiAgICBzd2FwCiAgICBleHRyYWN0IDAgNAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICA9PQogICAgYXNzZXJ0IC8vIEJ5dGVzIGhhcyB2YWxpZCBwcmVmaXgKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzIgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50NjQKICAgIGJ0b2kKICAgIC8KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MTMyCiAgICAvLyBjb25zdCBmZWVGcm9tU3RhYmxlOiB1aW50NjQgPSB0aGlzLl9jb252ZXJ0QnJpZGdpbmdGZWVJblRva2Vuc1RvTmF0aXZlVG9rZW4oYXNzZXRUcmFuc2ZlclJlZi54ZmVyQXNzZXQsIGZlZVRva2VuQW1vdW50KTsKICAgIGIgX3N3YXBBbmRCcmlkZ2VfYWZ0ZXJfaW5saW5lZF9zbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjpCcmlkZ2UuX2NvbnZlcnRCcmlkZ2luZ0ZlZUluVG9rZW5zVG9OYXRpdmVUb2tlbkA1CgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czo6QnJpZGdlLmhhc2hNZXNzYWdlKGFtb3VudDogdWludDY0LCByZWNpcGllbnQ6IGJ5dGVzLCBzb3VyY2VDaGFpbklkOiBieXRlcywgZGVzdGluYXRpb25DaGFpbklkOiBieXRlcywgcmVjZWl2ZVRva2VuOiBieXRlcywgbm9uY2U6IGJ5dGVzKSAtPiBieXRlczoKc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czo6QnJpZGdlLmhhc2hNZXNzYWdlOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czozMDctMzE1CiAgICAvLyBAYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUgfSkKICAgIC8vIGhhc2hNZXNzYWdlKAogICAgLy8gICBhbW91bnQ6IHVpbnQ2NCwKICAgIC8vICAgcmVjaXBpZW50OiBTdGF0aWNCeXRlczwzMj4sCiAgICAvLyAgIHNvdXJjZUNoYWluSWQ6IEJ5dGUsCiAgICAvLyAgIGRlc3RpbmF0aW9uQ2hhaW5JZDogQnl0ZSwKICAgIC8vICAgcmVjZWl2ZVRva2VuOiBTdGF0aWNCeXRlczwzMj4sCiAgICAvLyAgIG5vbmNlOiBTdGF0aWNCeXRlczwzMj4sCiAgICAvLyApOiBTdGF0aWNCeXRlczwzMj4gewogICAgcHJvdG8gNiAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjMxNgogICAgLy8gY29uc3QgYW1vdW50MzIgPSBiemVybygyNCkuY29uY2F0KG9wLml0b2IoYW1vdW50KSk7CiAgICBwdXNoaW50IDI0IC8vIDI0CiAgICBiemVybwogICAgZnJhbWVfZGlnIC02CiAgICBpdG9iCiAgICBjb25jYXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MzE3CiAgICAvLyBjb25zdCBzb3VyY2VDaGFpbklkMzIgPSBiemVybygzMSkuY29uY2F0KHNvdXJjZUNoYWluSWQuYnl0ZXMpOwogICAgcHVzaGludCAzMSAvLyAzMQogICAgYnplcm8KICAgIGZyYW1lX2RpZyAtNAogICAgY29uY2F0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjMxOC0zMTkKICAgIC8vIGNvbnN0IHBhY2tlZCA9IGFtb3VudDMyCiAgICAvLyAgIC5jb25jYXQocmVjaXBpZW50LmJ5dGVzKQogICAgc3dhcAogICAgZnJhbWVfZGlnIC01CiAgICBjb25jYXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MzE4LTMyMAogICAgLy8gY29uc3QgcGFja2VkID0gYW1vdW50MzIKICAgIC8vICAgLmNvbmNhdChyZWNpcGllbnQuYnl0ZXMpCiAgICAvLyAgIC5jb25jYXQoc291cmNlQ2hhaW5JZDMyKQogICAgc3dhcAogICAgY29uY2F0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjMxOC0zMjEKICAgIC8vIGNvbnN0IHBhY2tlZCA9IGFtb3VudDMyCiAgICAvLyAgIC5jb25jYXQocmVjaXBpZW50LmJ5dGVzKQogICAgLy8gICAuY29uY2F0KHNvdXJjZUNoYWluSWQzMikKICAgIC8vICAgLmNvbmNhdChyZWNlaXZlVG9rZW4uYnl0ZXMpCiAgICBmcmFtZV9kaWcgLTIKICAgIGNvbmNhdAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czozMTgtMzIyCiAgICAvLyBjb25zdCBwYWNrZWQgPSBhbW91bnQzMgogICAgLy8gICAuY29uY2F0KHJlY2lwaWVudC5ieXRlcykKICAgIC8vICAgLmNvbmNhdChzb3VyY2VDaGFpbklkMzIpCiAgICAvLyAgIC5jb25jYXQocmVjZWl2ZVRva2VuLmJ5dGVzKQogICAgLy8gICAuY29uY2F0KG5vbmNlLmJ5dGVzKQogICAgZnJhbWVfZGlnIC0xCiAgICBjb25jYXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MzIzCiAgICAvLyAuY29uY2F0KEFMTEJSSURHRV9NRVNTRU5HRVIuYnl0ZXMpOwogICAgYnl0ZWMgMTAgLy8gMHgwMQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czozMTgtMzIzCiAgICAvLyBjb25zdCBwYWNrZWQgPSBhbW91bnQzMgogICAgLy8gICAuY29uY2F0KHJlY2lwaWVudC5ieXRlcykKICAgIC8vICAgLmNvbmNhdChzb3VyY2VDaGFpbklkMzIpCiAgICAvLyAgIC5jb25jYXQocmVjZWl2ZVRva2VuLmJ5dGVzKQogICAgLy8gICAuY29uY2F0KG5vbmNlLmJ5dGVzKQogICAgLy8gICAuY29uY2F0KEFMTEJSSURHRV9NRVNTRU5HRVIuYnl0ZXMpOwogICAgY29uY2F0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjMyNQogICAgLy8gY29uc3QgaGFzaCA9IG9wLmtlY2NhazI1NihwYWNrZWQpOyAvLyAzMiBieXRlcwogICAga2VjY2FrMjU2CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjMyOAogICAgLy8gY29uc3Qgd2l0aFNyYyA9IG9wLnNldEJ5dGUoaGFzaCwgMCwgb3AuYnRvaShzb3VyY2VDaGFpbklkLmJ5dGVzKSk7CiAgICBmcmFtZV9kaWcgLTQKICAgIGJ0b2kKICAgIGludGNfMSAvLyAwCiAgICBzd2FwCiAgICBzZXRieXRlCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjMyOQogICAgLy8gY29uc3Qgd2l0aERzdCA9IG9wLnNldEJ5dGUod2l0aFNyYywgMSwgb3AuYnRvaShkZXN0aW5hdGlvbkNoYWluSWQuYnl0ZXMpKTsKICAgIGZyYW1lX2RpZyAtMwogICAgYnRvaQogICAgaW50Y18wIC8vIDEKICAgIHN3YXAKICAgIHNldGJ5dGUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MzMxCiAgICAvLyByZXR1cm4gbmV3IFN0YXRpY0J5dGVzPDMyPih3aXRoRHN0KTsKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzMgLy8gMzIKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBzaXplCiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjpSb3V0ZXIucmVjZWl2ZUFuZFN3YXBGcm9tVlVzZChhc3NldDogdWludDY0LCByZWNpcGllbnQ6IGJ5dGVzLCB2VXNkQW1vdW50OiB1aW50NjQsIHJlY2VpdmVBbW91bnRNaW46IHVpbnQ2NCkgLT4gdWludDY0OgpyZWNlaXZlQW5kU3dhcEZyb21WVXNkOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czoxNjMtMTY4CiAgICAvLyBwcm90ZWN0ZWQgcmVjZWl2ZUFuZFN3YXBGcm9tVlVzZCgKICAgIC8vICAgYXNzZXQ6IEFzc2V0LAogICAgLy8gICByZWNpcGllbnQ6IEFkZHJlc3MsCiAgICAvLyAgIHZVc2RBbW91bnQ6IHVpbnQ2NCwKICAgIC8vICAgcmVjZWl2ZUFtb3VudE1pbjogdWludDY0LAogICAgLy8gKTogdWludDY0IHsKICAgIHByb3RvIDQgMQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czoxNjkKICAgIC8vIGFzc2VydCh0aGlzLnBvb2xzKGFzc2V0KS5leGlzdHMsICdSb3V0ZXI6IG5vIHJlY2VpdmUgcG9vbCcpOwogICAgZnJhbWVfZGlnIC00CiAgICBpdG9iCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjM0CiAgICAvLyBwb29scyA9IEJveE1hcDxBc3NldCwgdWludDY0Pih7IGtleVByZWZpeDogJ3AnIH0pOwogICAgYnl0ZWMgOCAvLyAicCIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czoxNjkKICAgIC8vIGFzc2VydCh0aGlzLnBvb2xzKGFzc2V0KS5leGlzdHMsICdSb3V0ZXI6IG5vIHJlY2VpdmUgcG9vbCcpOwogICAgZHVwCiAgICBib3hfbGVuCiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBSb3V0ZXI6IG5vIHJlY2VpdmUgcG9vbAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czoxNzAKICAgIC8vIGNvbnN0IHBvb2xJZCA9IHRoaXMucG9vbHMoYXNzZXQpLnZhbHVlOwogICAgYm94X2dldAogICAgcG9wCiAgICBidG9pCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjE3MS0xNzUKICAgIC8vIHJldHVybiBhYmlDYWxsKHsKICAgIC8vICAgbWV0aG9kOiBQb29sLnByb3RvdHlwZS5zd2FwRnJvbVZVc2QsCiAgICAvLyAgIGFwcElkOiBwb29sSWQsCiAgICAvLyAgIGFyZ3M6IFtyZWNpcGllbnQsIHZVc2RBbW91bnQsIHJlY2VpdmVBbW91bnRNaW4sIHJlY2lwaWVudCA9PT0gdGhpcy5yZWJhbGFuY2VyLnZhbHVlXSwKICAgIC8vIH0pLnJldHVyblZhbHVlOwogICAgaXR4bl9iZWdpbgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czoxNzQKICAgIC8vIGFyZ3M6IFtyZWNpcGllbnQsIHZVc2RBbW91bnQsIHJlY2VpdmVBbW91bnRNaW4sIHJlY2lwaWVudCA9PT0gdGhpcy5yZWJhbGFuY2VyLnZhbHVlXSwKICAgIGZyYW1lX2RpZyAtMgogICAgaXRvYgogICAgZnJhbWVfZGlnIC0xCiAgICBpdG9iCiAgICBpbnRjXzEgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czo1MgogICAgLy8gcHJpdmF0ZSByZWJhbGFuY2VyID0gR2xvYmFsU3RhdGU8QWRkcmVzcz4oeyBpbml0aWFsVmFsdWU6IG5ldyBBZGRyZXNzKGJ6ZXJvKDApKSB9KTsvLyBjYW4gcmVzdHJpY3QgZGVwb3NpdCBvciB3aXRoZHJhdyBvcGVyYXRpb25zCiAgICBieXRlYyA0IC8vICJyZWJhbGFuY2VyIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czoxNzQKICAgIC8vIGFyZ3M6IFtyZWNpcGllbnQsIHZVc2RBbW91bnQsIHJlY2VpdmVBbW91bnRNaW4sIHJlY2lwaWVudCA9PT0gdGhpcy5yZWJhbGFuY2VyLnZhbHVlXSwKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICBmcmFtZV9kaWcgLTMKICAgID09CiAgICBieXRlYyAxMSAvLyAweDAwCiAgICBpbnRjXzEgLy8gMAogICAgdW5jb3ZlciAyCiAgICBzZXRiaXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcm91dGVyLmFsZ28udHM6MTcxLTE3NQogICAgLy8gcmV0dXJuIGFiaUNhbGwoewogICAgLy8gICBtZXRob2Q6IFBvb2wucHJvdG90eXBlLnN3YXBGcm9tVlVzZCwKICAgIC8vICAgYXBwSWQ6IHBvb2xJZCwKICAgIC8vICAgYXJnczogW3JlY2lwaWVudCwgdlVzZEFtb3VudCwgcmVjZWl2ZUFtb3VudE1pbiwgcmVjaXBpZW50ID09PSB0aGlzLnJlYmFsYW5jZXIudmFsdWVdLAogICAgLy8gfSkucmV0dXJuVmFsdWU7CiAgICBwdXNoYnl0ZXMgMHgwZDFiNGMwNiAvLyBtZXRob2QgInN3YXBGcm9tVlVzZChhZGRyZXNzLHVpbnQ2NCx1aW50NjQsYm9vbCl1aW50NjQiCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgZnJhbWVfZGlnIC0zCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgdW5jb3ZlciAyCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgc3dhcAogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uSUQKICAgIHB1c2hpbnQgNiAvLyBhcHBsCiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnRjXzEgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKICAgIGl0eG5fc3VibWl0CiAgICBpdHhuIExhc3RMb2cKICAgIGR1cAogICAgZXh0cmFjdCA0IDAKICAgIHN3YXAKICAgIGV4dHJhY3QgMCA0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgID09CiAgICBhc3NlcnQgLy8gQnl0ZXMgaGFzIHZhbGlkIHByZWZpeAogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgYnRvaQogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czo6Um91dGVyLnNlbmRBbmRTd2FwVG9WVXNkKGFzc2V0OiB1aW50NjQsIHVzZXI6IGJ5dGVzLCBhbW91bnQ6IHVpbnQ2NCkgLT4gdWludDY0OgpzZW5kQW5kU3dhcFRvVlVzZDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcm91dGVyLmFsZ28udHM6MTc5CiAgICAvLyBwcm90ZWN0ZWQgc2VuZEFuZFN3YXBUb1ZVc2QoYXNzZXQ6IEFzc2V0LCB1c2VyOiBBZGRyZXNzLCBhbW91bnQ6IHVpbnQ2NCk6IHVpbnQ2NCB7CiAgICBwcm90byAzIDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcm91dGVyLmFsZ28udHM6MTgwCiAgICAvLyBhc3NlcnQodGhpcy5wb29scyhhc3NldCkuZXhpc3RzLCAnUm91dGVyOiBubyBwb29sJyk7CiAgICBmcmFtZV9kaWcgLTMKICAgIGl0b2IKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcm91dGVyLmFsZ28udHM6MzQKICAgIC8vIHBvb2xzID0gQm94TWFwPEFzc2V0LCB1aW50NjQ+KHsga2V5UHJlZml4OiAncCcgfSk7CiAgICBieXRlYyA4IC8vICJwIgogICAgc3dhcAogICAgY29uY2F0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjE4MAogICAgLy8gYXNzZXJ0KHRoaXMucG9vbHMoYXNzZXQpLmV4aXN0cywgJ1JvdXRlcjogbm8gcG9vbCcpOwogICAgZHVwCiAgICBib3hfbGVuCiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBSb3V0ZXI6IG5vIHBvb2wKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcm91dGVyLmFsZ28udHM6MTgxCiAgICAvLyBjb25zdCBwb29sSWQgPSB0aGlzLnBvb2xzKGFzc2V0KS52YWx1ZTsKICAgIGJveF9nZXQKICAgIHBvcAogICAgYnRvaQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czoxODMtMTg4CiAgICAvLyBpdHhuLmFzc2V0VHJhbnNmZXIoewogICAgLy8gICB4ZmVyQXNzZXQ6IGFzc2V0LAogICAgLy8gICBhc3NldEFtb3VudDogYW1vdW50LAogICAgLy8gICBhc3NldFJlY2VpdmVyOiBBcHBsaWNhdGlvbihwb29sSWQpLmFkZHJlc3MsCiAgICAvLyB9KQogICAgLy8gICAuc3VibWl0KCk7CiAgICBpdHhuX2JlZ2luCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjE4NgogICAgLy8gYXNzZXRSZWNlaXZlcjogQXBwbGljYXRpb24ocG9vbElkKS5hZGRyZXNzLAogICAgZHVwCiAgICBhcHBfcGFyYW1zX2dldCBBcHBBZGRyZXNzCiAgICBhc3NlcnQgLy8gYXBwbGljYXRpb24gZXhpc3RzCiAgICBpdHhuX2ZpZWxkIEFzc2V0UmVjZWl2ZXIKICAgIGZyYW1lX2RpZyAtMQogICAgaXR4bl9maWVsZCBBc3NldEFtb3VudAogICAgZnJhbWVfZGlnIC0zCiAgICBpdHhuX2ZpZWxkIFhmZXJBc3NldAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czoxODMtMTg3CiAgICAvLyBpdHhuLmFzc2V0VHJhbnNmZXIoewogICAgLy8gICB4ZmVyQXNzZXQ6IGFzc2V0LAogICAgLy8gICBhc3NldEFtb3VudDogYW1vdW50LAogICAgLy8gICBhc3NldFJlY2VpdmVyOiBBcHBsaWNhdGlvbihwb29sSWQpLmFkZHJlc3MsCiAgICAvLyB9KQogICAgcHVzaGludCA0IC8vIDQKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludGNfMSAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czoxODMtMTg4CiAgICAvLyBpdHhuLmFzc2V0VHJhbnNmZXIoewogICAgLy8gICB4ZmVyQXNzZXQ6IGFzc2V0LAogICAgLy8gICBhc3NldEFtb3VudDogYW1vdW50LAogICAgLy8gICBhc3NldFJlY2VpdmVyOiBBcHBsaWNhdGlvbihwb29sSWQpLmFkZHJlc3MsCiAgICAvLyB9KQogICAgLy8gICAuc3VibWl0KCk7CiAgICBpdHhuX3N1Ym1pdAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czoxOTAtMTk0CiAgICAvLyByZXR1cm4gYWJpQ2FsbCh7CiAgICAvLyAgIG1ldGhvZDogUG9vbC5wcm90b3R5cGUuc3dhcFRvVlVzZCwKICAgIC8vICAgYXBwSWQ6IHBvb2xJZCwKICAgIC8vICAgYXJnczogW3VzZXIsIGFtb3VudCwgdXNlciA9PT0gdGhpcy5yZWJhbGFuY2VyLnZhbHVlXSwKICAgIC8vIH0pLnJldHVyblZhbHVlOwogICAgaXR4bl9iZWdpbgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czoxOTMKICAgIC8vIGFyZ3M6IFt1c2VyLCBhbW91bnQsIHVzZXIgPT09IHRoaXMucmViYWxhbmNlci52YWx1ZV0sCiAgICBmcmFtZV9kaWcgLTEKICAgIGl0b2IKICAgIGludGNfMSAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjUyCiAgICAvLyBwcml2YXRlIHJlYmFsYW5jZXIgPSBHbG9iYWxTdGF0ZTxBZGRyZXNzPih7IGluaXRpYWxWYWx1ZTogbmV3IEFkZHJlc3MoYnplcm8oMCkpIH0pOy8vIGNhbiByZXN0cmljdCBkZXBvc2l0IG9yIHdpdGhkcmF3IG9wZXJhdGlvbnMKICAgIGJ5dGVjIDQgLy8gInJlYmFsYW5jZXIiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjE5MwogICAgLy8gYXJnczogW3VzZXIsIGFtb3VudCwgdXNlciA9PT0gdGhpcy5yZWJhbGFuY2VyLnZhbHVlXSwKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICBmcmFtZV9kaWcgLTIKICAgID09CiAgICBieXRlYyAxMSAvLyAweDAwCiAgICBpbnRjXzEgLy8gMAogICAgdW5jb3ZlciAyCiAgICBzZXRiaXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcm91dGVyLmFsZ28udHM6MTkwLTE5NAogICAgLy8gcmV0dXJuIGFiaUNhbGwoewogICAgLy8gICBtZXRob2Q6IFBvb2wucHJvdG90eXBlLnN3YXBUb1ZVc2QsCiAgICAvLyAgIGFwcElkOiBwb29sSWQsCiAgICAvLyAgIGFyZ3M6IFt1c2VyLCBhbW91bnQsIHVzZXIgPT09IHRoaXMucmViYWxhbmNlci52YWx1ZV0sCiAgICAvLyB9KS5yZXR1cm5WYWx1ZTsKICAgIHB1c2hieXRlcyAweGQ5NzhhZDE0IC8vIG1ldGhvZCAic3dhcFRvVlVzZChhZGRyZXNzLHVpbnQ2NCxib29sKXVpbnQ2NCIKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBmcmFtZV9kaWcgLTIKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBzd2FwCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25JRAogICAgcHVzaGludCA2IC8vIGFwcGwKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludGNfMSAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgaXR4bl9zdWJtaXQKICAgIGl0eG4gTGFzdExvZwogICAgZHVwCiAgICBleHRyYWN0IDQgMAogICAgc3dhcAogICAgZXh0cmFjdCAwIDQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgPT0KICAgIGFzc2VydCAvLyBCeXRlcyBoYXMgdmFsaWQgcHJlZml4CiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2dhcy11c2FnZS5hbGdvLnRzOjpHYXNVc2FnZS5nZXRHYXNVc2FnZShjaGFpbklkOiBieXRlcykgLT4gdWludDY0OgpzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2dhcy11c2FnZS5hbGdvLnRzOjpHYXNVc2FnZS5nZXRHYXNVc2FnZToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvZ2FzLXVzYWdlLmFsZ28udHM6MTctMTgKICAgIC8vIEBhYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgLy8gZ2V0R2FzVXNhZ2UoY2hhaW5JZDogQnl0ZSk6IHVpbnQ2NCB7CiAgICBwcm90byAxIDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvZ2FzLXVzYWdlLmFsZ28udHM6MTAKICAgIC8vIGdhc1VzYWdlID0gQm94TWFwPEJ5dGUsIHVpbnQ2ND4oeyBrZXlQcmVmaXg6ICd1JyB9KTsKICAgIGJ5dGVjIDEyIC8vICJ1IgogICAgZnJhbWVfZGlnIC0xCiAgICBjb25jYXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvZ2FzLXVzYWdlLmFsZ28udHM6MTkKICAgIC8vIHJldHVybiB0aGlzLmdhc1VzYWdlKGNoYWluSWQpLnZhbHVlOwogICAgYm94X2dldAogICAgYXNzZXJ0IC8vIEJveCBtdXN0IGhhdmUgdmFsdWUKICAgIGJ0b2kKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvZ2FzLXVzYWdlLmFsZ28udHM6Okdhc1VzYWdlLmdldFRyYW5zYWN0aW9uUmVsYXllckNvc3QoY2hhaW5JZDogYnl0ZXMpIC0+IHVpbnQ2NDoKc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9nYXMtdXNhZ2UuYWxnby50czo6R2FzVXNhZ2UuZ2V0VHJhbnNhY3Rpb25SZWxheWVyQ29zdDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvZ2FzLXVzYWdlLmFsZ28udHM6MzQtMzUKICAgIC8vIEBhYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgLy8gZ2V0VHJhbnNhY3Rpb25SZWxheWVyQ29zdChjaGFpbklkOiBCeXRlKTogdWludDY0IHsKICAgIHByb3RvIDEgMQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9nYXMtdXNhZ2UuYWxnby50czoxMAogICAgLy8gZ2FzVXNhZ2UgPSBCb3hNYXA8Qnl0ZSwgdWludDY0Pih7IGtleVByZWZpeDogJ3UnIH0pOwogICAgYnl0ZWMgMTIgLy8gInUiCiAgICBmcmFtZV9kaWcgLTEKICAgIGNvbmNhdAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9nYXMtdXNhZ2UuYWxnby50czozNgogICAgLy8gY29uc3QgZ2FzQW1vdW50ID0gdGhpcy5nYXNVc2FnZShjaGFpbklkKS52YWx1ZTsKICAgIGJveF9nZXQKICAgIGFzc2VydCAvLyBCb3ggbXVzdCBoYXZlIHZhbHVlCiAgICBidG9pCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2dhcy11c2FnZS5hbGdvLnRzOjM3LTQxCiAgICAvLyByZXR1cm4gYWJpQ2FsbCh7CiAgICAvLyAgIG1ldGhvZDogR2FzT3JhY2xlLnByb3RvdHlwZS5nZXRUcmFuc2FjdGlvbkdhc0Nvc3RJbk5hdGl2ZVRva2VuLAogICAgLy8gICBhcHBJZDogdGhpcy5nYXNPcmFjbGUudmFsdWUuaWQsCiAgICAvLyAgIGFyZ3M6IFtjaGFpbklkLCBnYXNBbW91bnRdLAogICAgLy8gfSkucmV0dXJuVmFsdWU7CiAgICBpdHhuX2JlZ2luCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2dhcy11c2FnZS5hbGdvLnRzOjM5CiAgICAvLyBhcHBJZDogdGhpcy5nYXNPcmFjbGUudmFsdWUuaWQsCiAgICBpbnRjXzEgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9nYXMtdXNhZ2UuYWxnby50czo5CiAgICAvLyBnYXNPcmFjbGUgPSBHbG9iYWxTdGF0ZTxBcHBsaWNhdGlvbj4oKTsKICAgIGJ5dGVjXzMgLy8gImdhc09yYWNsZSIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvZ2FzLXVzYWdlLmFsZ28udHM6MzkKICAgIC8vIGFwcElkOiB0aGlzLmdhc09yYWNsZS52YWx1ZS5pZCwKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2dhcy11c2FnZS5hbGdvLnRzOjQwCiAgICAvLyBhcmdzOiBbY2hhaW5JZCwgZ2FzQW1vdW50XSwKICAgIHN3YXAKICAgIGl0b2IKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvZ2FzLXVzYWdlLmFsZ28udHM6MzctNDEKICAgIC8vIHJldHVybiBhYmlDYWxsKHsKICAgIC8vICAgbWV0aG9kOiBHYXNPcmFjbGUucHJvdG90eXBlLmdldFRyYW5zYWN0aW9uR2FzQ29zdEluTmF0aXZlVG9rZW4sCiAgICAvLyAgIGFwcElkOiB0aGlzLmdhc09yYWNsZS52YWx1ZS5pZCwKICAgIC8vICAgYXJnczogW2NoYWluSWQsIGdhc0Ftb3VudF0sCiAgICAvLyB9KS5yZXR1cm5WYWx1ZTsKICAgIHB1c2hieXRlcyAweGMyYWZjY2QxIC8vIG1ldGhvZCAiZ2V0VHJhbnNhY3Rpb25HYXNDb3N0SW5OYXRpdmVUb2tlbihieXRlLHVpbnQ2NCl1aW50NjQiCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgZnJhbWVfZGlnIC0xCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25JRAogICAgcHVzaGludCA2IC8vIGFwcGwKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludGNfMSAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgaXR4bl9zdWJtaXQKICAgIGl0eG4gTGFzdExvZwogICAgZHVwCiAgICBleHRyYWN0IDQgMAogICAgc3dhcAogICAgZXh0cmFjdCAwIDQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgPT0KICAgIGFzc2VydCAvLyBCeXRlcyBoYXMgdmFsaWQgcHJlZml4CiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL293bmFibGUuYWxnby50czo6T3duYWJsZS5vbmx5T3duZXIoKSAtPiB2b2lkOgpvbmx5T3duZXI6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL293bmFibGUuYWxnby50czoxMwogICAgLy8gYXNzZXJ0KG9wLlR4bi5zZW5kZXIuYnl0ZXMgPT09IHRoaXMub3duZXIudmFsdWUuYnl0ZXMsICdPbmx5IG93bmVyJyk7CiAgICB0eG4gU2VuZGVyCiAgICBpbnRjXzEgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9vd25hYmxlLmFsZ28udHM6NgogICAgLy8gcHJvdGVjdGVkIG93bmVyID0gR2xvYmFsU3RhdGU8QWRkcmVzcz4oKTsKICAgIGJ5dGVjXzIgLy8gIm93bmVyIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9vd25hYmxlLmFsZ28udHM6MTMKICAgIC8vIGFzc2VydChvcC5UeG4uc2VuZGVyLmJ5dGVzID09PSB0aGlzLm93bmVyLnZhbHVlLmJ5dGVzLCAnT25seSBvd25lcicpOwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgID09CiAgICBhc3NlcnQgLy8gT25seSBvd25lcgogICAgcmV0c3ViCg==",clear:"I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg=="},byteCode:{approval:"CyAFAQAIINR6JhEEFR98dQdjYW5Td2FwBW93bmVyCWdhc09yYWNsZQpyZWJhbGFuY2VyB2NoYWluSWQJbWVzc2VuZ2VyAXQBcA1zdG9wQXV0aG9yaXR5AQEBAAF1BENBeqME90dbggwVH3x1AAAAAAAAPVQDBoEBMRhAAAkjrycETGcpImcxGRREMRhBAM2CDARl9wVzBD44AnwEpGAK7QTeTK1KBE66ByEExhftcwRXUxVgBGOAgngEBlB8agT1+W6zBEsGLKAEw83ZKicNggkEB9+EKQSAxccPBEE00GgE7xX4VQRrHuIjBBhwpJIENVcyTQQEsWHxBNKzV+snDoIEBAylrnoEJ0cPBwTL/G0CBOF7r7Q2GgCOGwDZARQBZAGpArACzQLqAwYDJANdA+QEHgRCAAYAAQRXBMsFEwUoBTYFPgVPBWAFcgWQBaEFswAnD7AiQycPsCJDgARmTKQENhoAjgEAiACKAgCL/oEKCIsAMgwNQQAqsYEGshCBBbIZJxCyHicQsh+L/40CAAsABLNC/9syALIBQv/1I7IBQv/viYoBAYv/OBQyChJEi/84IDIDEkSL/zgVMgMSRIv/OBKJigEBi/84BzIKE0EAAiOJi/84IDIDE0EAAiOJi/84CTIDE0EAAiOJi/84CIk2GgFJFSUSRDYaAkkVIhJENhoDSRUkEkQXNhoESRUkEkQXKksEZytMZycJTwNnJwVPAmcnBkxnIkM2GgFJFSQSRBeIB3exMgqyFCOyErIRgQSyECOyAbOAGEJyaWRnZTogb3B0LWluIGNvbXBsZXRlZLAiQzEWgQIJSTgQIhJEMRYiCUk4EIEEEkQ2GgFJFSUSRDYaAkkVIhJENhoDSRUlEkQ2GgRJFSUSRDYaBUkVJBJEF08GiP8cTgZOBiNPB4gEYSJDMRYiCUk4EIEEEkQ2GgFJFSUSRDYaAkkVIhJENhoDSRUlEkQ2GgRJFSUSRDYaBUkVJBJEFzYaBkkVJBJEFyNOB4gEHCJDMRYiCUk4ECISRDYaAUkVJBJEFzYaAklOA0kVJRJENhoDSRUiEkQ2GgRJFSUSRDYaBUlOBkkVJRJENhoGSRUkEkQXIyllRESAAWJLBFBJvUUBRE8HiP50SSEED0QjJwVlREsISwhPCE8DSwhPCIgFA08CvkRLAUxQAkxRAAJMUQIgUElOBkkVJRJEgAFtSwFQSb1FARREgAC/sSMnBmVEgAQz4UeqshqyGLIagQayECOyAbO0PklXBABMVwAEKBJESRUiEkQjU0RPAoEYW08DTwRPBIgEz0whBAlJQQAPsUsEsgdJsggishAjsgGzSwEWSwVQSwRQJwpQSwNQgARFg2rWTFCwIkM2GgFJFSISRDYaAkkVJRJEiAWZgAFiTwJQTL8iQzYaAUkVIhJENhoCSRUlEkSIBXxQJwdMUIAAvyJDNhoBSRUiEkQ2GgJJFSUSRIgFX1AnB0xQvEgiQzYaAUkVJBJEF4gFSrEjKmVEsgeyCCKyECOyAbMiQzYaAUkVJBJEF0mIBSsyCklOAkxwAExJTwJEQQAasSMqZUSyFEmyEksCshFLAbIAgQSyECOyAbMiQzYaAUkVIhJENhoCSRUkEkQXSwGIBJ+xIycGZUQnDrIaSwOyGrIYgQayECOyAbO0PklXBABMVwAEKBJESRUkEkQXsSMrZUROAggWgAR799UMshpPA7IashqyGIEGshAjsgGztD5JVwQATFcABCgSREkVJBJEF0wWgAFlTFC+RBcKFihMULAiQzYaAUkVJBJEFzYaAkkVJRJENhoDSRUiEkQ2GgRJFSISRDYaBUkVJRJENhoGSRUlEkSIAwQoTFCwIkM2GgFJFSISRDYaAkkVJRJEUCcHTFC9RQEnCyNPAlQoTFCwIkM2GgFJFSISRIgD0SEECBYoTFCwIkMxFiIJSTgQgQQSRDYaAUkVJBJEFzYaAkkVJRJENhoDSRUkEkQXNhoESRUkEkQXI4j7kCMpZUREMQBLBIj7v08FOBFJSwNLA4gDB0sGSwZPAk8GiAKiTwNPBFBPAhZQTwMWUE8CFlBMFlCABBVARLNMULAiQzYaAUkVJBJEFzYaAkkVJBJEF4gDfEkWJwhLAVBPAxa/THEBRIEJTAlJgQYIgQpMlIABZksDUEwWv4EKTJSAAWVPAlBMFr8iQzYaAUkVJBJEF4gDPRYnCExQvEgiQzEAIycJZUQSRCkjZyJDiAMjKSJnIkM2GgFJFSUSRIgDEycJTGciQzYaAUkVJRJEiAMCJwRMZyJDNhoBSRUiEkSIAqcWKExQsCJDNhoBSRUiEkQ2GgJJFSQSRBeIAtYnDE8CUEwWvyJDNhoBSRUkEkQXiALAK0xnIkM2GgFJFSISRIgCchYoTFCwIkM2GgFJFSUSRIgCnipMZyJDiggAi/8jiPpNIyllRESL+Yj6fkmL/g1EJa+L+hIURIv5OBGL/kAA7iOL+EsBCIv4Fk8CFlCL/hZQgAQ2uvrdTFCwiwCL/gmLATEATwKIAZUjJwVlRIv7SwETRIv7i/xQJwdMUL1FAURLAYv6TwKL+4v8i/2IAOKL+4gB3yEECIABc0sCUEm9RQEURIAAv0sBVwEBsSMnBmVEJw2yGkyyGkmyGIEGshAjsgGztD5JVwQATFcABCgSREkVJBJEF0sBcghEsbIHSbIIIrIQI7IBtoAE0C9X9bIaTwOyGkyyGIEGshAjsgGzSwEWSwEWUIAES1VBm0xQsAhPAg5EFov6UIv7UIv8UIv9UCcKUIAEIp+67ExQsImLARaAAWZMUL5EF4v+C7EjK2VEIycFZUSABB23DN2yGrIashiBBrIQI7IBs7Q+SVcEAExXAAQoEkRJFSQSRBcKQv7QigYBgRivi/oWUIEfr4v8UEyL+1BMUIv+UIv/UCcKUAKL/BcjTFaL/RciTFZJFSUSRImKBAGL/BYnCExQSb1FAUS+SBexi/4Wi/8WIycEZUSL/RInCyNPAlSABA0bTAayGov9shpPArIaTLIashqyGIEGshAjsgGztD5JVwQATFcABCgSREkVJBJEF4mKAwGL/RYnCExQSb1FAUS+SBexSXIIRLIUi/+yEov9shGBBLIQI7IBs7GL/xYjJwRlRIv+EicLI08CVIAE2XitFLIai/6yGkyyGrIashiBBrIQI7IBs7Q+SVcEAExXAAQoEkRJFSQSRBeJigEBJwyL/1C+RBeJigEBJwyL/1C+RBexIytlREwWgATCr8zRshqL/7IashqyGIEGshAjsgGztD5JVwQATFcABCgSREkVJBJEF4kxACMqZUQSRIk=",clear:"C4EBQw=="},events:[{name:"BridgingFeeFromTokens",args:[{type:"uint64",name:"feeFromNative"},{type:"uint64",name:"feeFromStable"},{type:"uint64",name:"feeStableTokenAmount"}]},{name:"ReceiveFee",args:[{type:"uint64",name:"bridgeTransactionCost"},{type:"uint64",name:"messageTransactionCost"}]},{name:"TokensSent",args:[{type:"uint64",name:"amount"},{type:"byte[32]",name:"recipient"},{type:"byte",name:"destinationChainId"},{type:"byte[32]",name:"receiveToken"},{type:"byte[32]",name:"nonce"},{type:"byte",name:"messenger"}]},{name:"TokensReceived",args:[{type:"uint64",name:"receiveAmount"},{type:"address",name:"recipient"},{type:"byte[32]",name:"nonce"},{type:"byte",name:"messenger"},{type:"byte[32]",name:"message"}]},{name:"Swapped",args:[{type:"address",name:"sender"},{type:"address",name:"recipient"},{type:"uint64",name:"tokenId"},{type:"uint64",name:"receiveTokenId"},{type:"uint64",name:"amount"},{type:"uint64",name:"receivedAmount"}]}],templateVariables:{}};var W=class i{static get create(){return{_resolveByMethod(n){switch(n.method){case"createApplication":case"createApplication(address,byte,uint64,uint64)void":return i.create.createApplication(n)}throw new Error("Unknown ' + verb + ' method")},createApplication(n){return{...n,method:"createApplication(address,byte,uint64,uint64)void",args:Array.isArray(n.args)?n.args:[n.args.owner,n.args.chainId,n.args.messenger,n.args.gasOracle]}}}}static optInAsset(n){return{...n,method:"optInAsset(uint64)void",args:Array.isArray(n.args)?n.args:[n.args.asset]}}static swapAndBridge(n){return{...n,method:"swapAndBridge(pay,axfer,byte[32],byte,byte[32],byte[32],uint64)void",args:Array.isArray(n.args)?n.args:[n.args.paymentRef,n.args.assetTransferRef,n.args.recipient,n.args.destinationChainId,n.args.receiveToken,n.args.nonce,n.args.budget]}}static swapAndBridgeWithStable(n){return{...n,method:"swapAndBridgeWithStable(axfer,byte[32],byte,byte[32],byte[32],uint64,uint64)void",args:Array.isArray(n.args)?n.args:[n.args.assetTransferRef,n.args.recipient,n.args.destinationChainId,n.args.receiveToken,n.args.nonce,n.args.feeTokenAmount,n.args.budget]}}static receiveTokens(n){return{...n,method:"receiveTokens(pay,uint64,byte[32],byte,byte[32],byte[32],uint64)void",args:Array.isArray(n.args)?n.args:[n.args.paymentRef,n.args.amount,n.args.recipient,n.args.sourceChainId,n.args.receiveToken,n.args.nonce,n.args.receiveAmountMin]}}static registerBridge(n){return{...n,method:"registerBridge(byte,byte[32])void",args:Array.isArray(n.args)?n.args:[n.args.chainId,n.args.bridgeAddress]}}static addBridgeToken(n){return{...n,method:"addBridgeToken(byte,byte[32])void",args:Array.isArray(n.args)?n.args:[n.args.chainId,n.args.tokenAddress]}}static removeBridgeToken(n){return{...n,method:"removeBridgeToken(byte,byte[32])void",args:Array.isArray(n.args)?n.args:[n.args.chainId,n.args.tokenAddress]}}static withdrawGasTokens(n){return{...n,method:"withdrawGasTokens(uint64)void",args:Array.isArray(n.args)?n.args:[n.args.amount]}}static withdrawBridgingFeeInTokens(n){return{...n,method:"withdrawBridgingFeeInTokens(uint64)void",args:Array.isArray(n.args)?n.args:[n.args.asset]}}static getBridgingCostInTokens(n){return{...n,method:"getBridgingCostInTokens(byte,uint64)uint64",args:Array.isArray(n.args)?n.args:[n.args.destinationChainId,n.args.asset]}}static hashMessage(n){return{...n,method:"hashMessage(uint64,byte[32],byte,byte,byte[32],byte[32])byte[32]",args:Array.isArray(n.args)?n.args:[n.args.amount,n.args.recipient,n.args.sourceChainId,n.args.destinationChainId,n.args.receiveToken,n.args.nonce]}}static isOtherBridgeTokenSupported(n){return{...n,method:"isOtherBridgeTokenSupported(byte,byte[32])bool",args:Array.isArray(n.args)?n.args:[n.args.chainId,n.args.token]}}static getTransactionCost(n){return{...n,method:"getTransactionCost(byte)uint64",args:Array.isArray(n.args)?n.args:[n.args.chainId]}}static getReceiveTokensCost(n){return{...n,method:"getReceiveTokensCost()uint64",args:Array.isArray(n.args)?n.args:[]}}static getSendTransactionStorageCost(n){return{...n,method:"getSendTransactionStorageCost()uint64",args:Array.isArray(n.args)?n.args:[]}}static swap(n){return{...n,method:"swap(axfer,uint64,address,uint64,uint64)void",args:Array.isArray(n.args)?n.args:[n.args.assetTransferRef,n.args.receiveAsset,n.args.recipient,n.args.receiveAmountMin,n.args.budget]}}static addPool(n){return{...n,method:"addPool(uint64,uint64)void",args:Array.isArray(n.args)?n.args:[n.args.poolId,n.args.asset]}}static removePool(n){return{...n,method:"removePool(uint64)void",args:Array.isArray(n.args)?n.args:[n.args.tokenId]}}static stopSwap(n){return{...n,method:"stopSwap()void",args:Array.isArray(n.args)?n.args:[]}}static startSwap(n){return{...n,method:"startSwap()void",args:Array.isArray(n.args)?n.args:[]}}static setStopAuthority(n){return{...n,method:"setStopAuthority(address)void",args:Array.isArray(n.args)?n.args:[n.args.stopAuthority]}}static setRebalancer(n){return{...n,method:"setRebalancer(address)void",args:Array.isArray(n.args)?n.args:[n.args.rebalancer]}}static getGasUsage(n){return{...n,method:"getGasUsage(byte)uint64",args:Array.isArray(n.args)?n.args:[n.args.chainId]}}static setGasUsage(n){return{...n,method:"setGasUsage(byte,uint64)void",args:Array.isArray(n.args)?n.args:[n.args.chainId,n.args.gasAmount]}}static setGasOracle(n){return{...n,method:"setGasOracle(uint64)void",args:Array.isArray(n.args)?n.args:[n.args.gasOracle]}}static getTransactionRelayerCost(n){return{...n,method:"getTransactionRelayerCost(byte)uint64",args:Array.isArray(n.args)?n.args:[n.args.chainId]}}static transferOwnership(n){return{...n,method:"transferOwnership(address)void",args:Array.isArray(n.args)?n.args:[n.args.newOwner]}}};var Yi=class i{appClient;constructor(n){this.appClient=n instanceof Na.AppClient?n:new Na.AppClient({...n,appSpec:Bi})}decodeReturnValue(n,a){return a!==void 0?(0,Ms.getArc56ReturnValue)(a,this.appClient.getABIMethod(n),Bi.structs):void 0}static async fromCreatorAndName(n){return new i(await Na.AppClient.fromCreatorAndName({...n,appSpec:Bi}))}static async fromNetwork(n){return new i(await Na.AppClient.fromNetwork({...n,appSpec:Bi}))}get appId(){return this.appClient.appId}get appAddress(){return this.appClient.appAddress}get appName(){return this.appClient.appName}get appSpec(){return this.appClient.appSpec}get algorand(){return this.appClient.algorand}params={clearState:n=>this.appClient.params.bare.clearState(n),optInAsset:n=>this.appClient.params.call(W.optInAsset(n)),swapAndBridge:n=>this.appClient.params.call(W.swapAndBridge(n)),swapAndBridgeWithStable:n=>this.appClient.params.call(W.swapAndBridgeWithStable(n)),receiveTokens:n=>this.appClient.params.call(W.receiveTokens(n)),registerBridge:n=>this.appClient.params.call(W.registerBridge(n)),addBridgeToken:n=>this.appClient.params.call(W.addBridgeToken(n)),removeBridgeToken:n=>this.appClient.params.call(W.removeBridgeToken(n)),withdrawGasTokens:n=>this.appClient.params.call(W.withdrawGasTokens(n)),withdrawBridgingFeeInTokens:n=>this.appClient.params.call(W.withdrawBridgingFeeInTokens(n)),getBridgingCostInTokens:n=>this.appClient.params.call(W.getBridgingCostInTokens(n)),hashMessage:n=>this.appClient.params.call(W.hashMessage(n)),isOtherBridgeTokenSupported:n=>this.appClient.params.call(W.isOtherBridgeTokenSupported(n)),getTransactionCost:n=>this.appClient.params.call(W.getTransactionCost(n)),getReceiveTokensCost:(n={args:[]})=>this.appClient.params.call(W.getReceiveTokensCost(n)),getSendTransactionStorageCost:(n={args:[]})=>this.appClient.params.call(W.getSendTransactionStorageCost(n)),swap:n=>this.appClient.params.call(W.swap(n)),addPool:n=>this.appClient.params.call(W.addPool(n)),removePool:n=>this.appClient.params.call(W.removePool(n)),stopSwap:(n={args:[]})=>this.appClient.params.call(W.stopSwap(n)),startSwap:(n={args:[]})=>this.appClient.params.call(W.startSwap(n)),setStopAuthority:n=>this.appClient.params.call(W.setStopAuthority(n)),setRebalancer:n=>this.appClient.params.call(W.setRebalancer(n)),getGasUsage:n=>this.appClient.params.call(W.getGasUsage(n)),setGasUsage:n=>this.appClient.params.call(W.setGasUsage(n)),setGasOracle:n=>this.appClient.params.call(W.setGasOracle(n)),getTransactionRelayerCost:n=>this.appClient.params.call(W.getTransactionRelayerCost(n)),transferOwnership:n=>this.appClient.params.call(W.transferOwnership(n))};createTransaction={clearState:n=>this.appClient.createTransaction.bare.clearState(n),optInAsset:n=>this.appClient.createTransaction.call(W.optInAsset(n)),swapAndBridge:n=>this.appClient.createTransaction.call(W.swapAndBridge(n)),swapAndBridgeWithStable:n=>this.appClient.createTransaction.call(W.swapAndBridgeWithStable(n)),receiveTokens:n=>this.appClient.createTransaction.call(W.receiveTokens(n)),registerBridge:n=>this.appClient.createTransaction.call(W.registerBridge(n)),addBridgeToken:n=>this.appClient.createTransaction.call(W.addBridgeToken(n)),removeBridgeToken:n=>this.appClient.createTransaction.call(W.removeBridgeToken(n)),withdrawGasTokens:n=>this.appClient.createTransaction.call(W.withdrawGasTokens(n)),withdrawBridgingFeeInTokens:n=>this.appClient.createTransaction.call(W.withdrawBridgingFeeInTokens(n)),getBridgingCostInTokens:n=>this.appClient.createTransaction.call(W.getBridgingCostInTokens(n)),hashMessage:n=>this.appClient.createTransaction.call(W.hashMessage(n)),isOtherBridgeTokenSupported:n=>this.appClient.createTransaction.call(W.isOtherBridgeTokenSupported(n)),getTransactionCost:n=>this.appClient.createTransaction.call(W.getTransactionCost(n)),getReceiveTokensCost:(n={args:[]})=>this.appClient.createTransaction.call(W.getReceiveTokensCost(n)),getSendTransactionStorageCost:(n={args:[]})=>this.appClient.createTransaction.call(W.getSendTransactionStorageCost(n)),swap:n=>this.appClient.createTransaction.call(W.swap(n)),addPool:n=>this.appClient.createTransaction.call(W.addPool(n)),removePool:n=>this.appClient.createTransaction.call(W.removePool(n)),stopSwap:(n={args:[]})=>this.appClient.createTransaction.call(W.stopSwap(n)),startSwap:(n={args:[]})=>this.appClient.createTransaction.call(W.startSwap(n)),setStopAuthority:n=>this.appClient.createTransaction.call(W.setStopAuthority(n)),setRebalancer:n=>this.appClient.createTransaction.call(W.setRebalancer(n)),getGasUsage:n=>this.appClient.createTransaction.call(W.getGasUsage(n)),setGasUsage:n=>this.appClient.createTransaction.call(W.setGasUsage(n)),setGasOracle:n=>this.appClient.createTransaction.call(W.setGasOracle(n)),getTransactionRelayerCost:n=>this.appClient.createTransaction.call(W.getTransactionRelayerCost(n)),transferOwnership:n=>this.appClient.createTransaction.call(W.transferOwnership(n))};send={clearState:n=>this.appClient.send.bare.clearState(n),optInAsset:async n=>{let a=await this.appClient.send.call(W.optInAsset(n));return{...a,return:a.return}},swapAndBridge:async n=>{let a=await this.appClient.send.call(W.swapAndBridge(n));return{...a,return:a.return}},swapAndBridgeWithStable:async n=>{let a=await this.appClient.send.call(W.swapAndBridgeWithStable(n));return{...a,return:a.return}},receiveTokens:async n=>{let a=await this.appClient.send.call(W.receiveTokens(n));return{...a,return:a.return}},registerBridge:async n=>{let a=await this.appClient.send.call(W.registerBridge(n));return{...a,return:a.return}},addBridgeToken:async n=>{let a=await this.appClient.send.call(W.addBridgeToken(n));return{...a,return:a.return}},removeBridgeToken:async n=>{let a=await this.appClient.send.call(W.removeBridgeToken(n));return{...a,return:a.return}},withdrawGasTokens:async n=>{let a=await this.appClient.send.call(W.withdrawGasTokens(n));return{...a,return:a.return}},withdrawBridgingFeeInTokens:async n=>{let a=await this.appClient.send.call(W.withdrawBridgingFeeInTokens(n));return{...a,return:a.return}},getBridgingCostInTokens:async n=>{let a=await this.appClient.send.call(W.getBridgingCostInTokens(n));return{...a,return:a.return}},hashMessage:async n=>{let a=await this.appClient.send.call(W.hashMessage(n));return{...a,return:a.return}},isOtherBridgeTokenSupported:async n=>{let a=await this.appClient.send.call(W.isOtherBridgeTokenSupported(n));return{...a,return:a.return}},getTransactionCost:async n=>{let a=await this.appClient.send.call(W.getTransactionCost(n));return{...a,return:a.return}},getReceiveTokensCost:async(n={args:[]})=>{let a=await this.appClient.send.call(W.getReceiveTokensCost(n));return{...a,return:a.return}},getSendTransactionStorageCost:async(n={args:[]})=>{let a=await this.appClient.send.call(W.getSendTransactionStorageCost(n));return{...a,return:a.return}},swap:async n=>{let a=await this.appClient.send.call(W.swap(n));return{...a,return:a.return}},addPool:async n=>{let a=await this.appClient.send.call(W.addPool(n));return{...a,return:a.return}},removePool:async n=>{let a=await this.appClient.send.call(W.removePool(n));return{...a,return:a.return}},stopSwap:async(n={args:[]})=>{let a=await this.appClient.send.call(W.stopSwap(n));return{...a,return:a.return}},startSwap:async(n={args:[]})=>{let a=await this.appClient.send.call(W.startSwap(n));return{...a,return:a.return}},setStopAuthority:async n=>{let a=await this.appClient.send.call(W.setStopAuthority(n));return{...a,return:a.return}},setRebalancer:async n=>{let a=await this.appClient.send.call(W.setRebalancer(n));return{...a,return:a.return}},getGasUsage:async n=>{let a=await this.appClient.send.call(W.getGasUsage(n));return{...a,return:a.return}},setGasUsage:async n=>{let a=await this.appClient.send.call(W.setGasUsage(n));return{...a,return:a.return}},setGasOracle:async n=>{let a=await this.appClient.send.call(W.setGasOracle(n));return{...a,return:a.return}},getTransactionRelayerCost:async n=>{let a=await this.appClient.send.call(W.getTransactionRelayerCost(n));return{...a,return:a.return}},transferOwnership:async n=>{let a=await this.appClient.send.call(W.transferOwnership(n));return{...a,return:a.return}}};clone(n){return new i(this.appClient.clone(n))}async getBridgingCostInTokens(n){return(await this.appClient.send.call(W.getBridgingCostInTokens(n))).return}async hashMessage(n){return(await this.appClient.send.call(W.hashMessage(n))).return}async isOtherBridgeTokenSupported(n){return(await this.appClient.send.call(W.isOtherBridgeTokenSupported(n))).return}async getTransactionCost(n){return(await this.appClient.send.call(W.getTransactionCost(n))).return}async getReceiveTokensCost(n={args:[]}){return(await this.appClient.send.call(W.getReceiveTokensCost(n))).return}async getSendTransactionStorageCost(n={args:[]}){return(await this.appClient.send.call(W.getSendTransactionStorageCost(n))).return}async getGasUsage(n){return(await this.appClient.send.call(W.getGasUsage(n))).return}async getTransactionRelayerCost(n){return(await this.appClient.send.call(W.getTransactionRelayerCost(n))).return}state={global:{getAll:async()=>{let n=await this.appClient.state.global.getAll();return{chainId:n.chainId,messenger:n.messenger,stopAuthority:n.stopAuthority,rebalancer:n.rebalancer,canSwap:n.canSwap,gasOracle:n.gasOracle,owner:n.owner}},chainId:async()=>await this.appClient.state.global.getValue("chainId"),messenger:async()=>await this.appClient.state.global.getValue("messenger"),stopAuthority:async()=>await this.appClient.state.global.getValue("stopAuthority"),rebalancer:async()=>await this.appClient.state.global.getValue("rebalancer"),canSwap:async()=>await this.appClient.state.global.getValue("canSwap"),gasOracle:async()=>await this.appClient.state.global.getValue("gasOracle"),owner:async()=>await this.appClient.state.global.getValue("owner")},box:{getAll:async()=>{let n=await this.appClient.state.box.getAll();return{}},processedMessages:{getMap:async()=>await this.appClient.state.box.getMap("processedMessages"),value:async n=>await this.appClient.state.box.getMapValue("processedMessages",n)},sentMessages:{getMap:async()=>await this.appClient.state.box.getMap("sentMessages"),value:async n=>await this.appClient.state.box.getMapValue("sentMessages",n)},otherBridges:{getMap:async()=>await this.appClient.state.box.getMap("otherBridges"),value:async n=>await this.appClient.state.box.getMapValue("otherBridges",n)},otherBridgeTokens:{getMap:async()=>await this.appClient.state.box.getMap("otherBridgeTokens"),value:async n=>await this.appClient.state.box.getMapValue("otherBridgeTokens",n)},pools:{getMap:async()=>await this.appClient.state.box.getMap("pools"),value:async n=>await this.appClient.state.box.getMapValue("pools",n)},fromGasOracleScalingFactor:{getMap:async()=>await this.appClient.state.box.getMap("fromGasOracleScalingFactor"),value:async n=>await this.appClient.state.box.getMapValue("fromGasOracleScalingFactor",n)},bridgingFeeConversionScalingFactor:{getMap:async()=>await this.appClient.state.box.getMap("bridgingFeeConversionScalingFactor"),value:async n=>await this.appClient.state.box.getMapValue("bridgingFeeConversionScalingFactor",n)},gasUsage:{getMap:async()=>await this.appClient.state.box.getMap("gasUsage"),value:async n=>await this.appClient.state.box.getMapValue("gasUsage",n)}}};newGroup(){let n=this,a=this.algorand.newGroup(),r=Promise.resolve(),o=[];return{optInAsset(s){return r=r.then(async()=>a.addAppCallMethodCall(await n.params.optInAsset(s))),o.push(void 0),this},swapAndBridge(s){return r=r.then(async()=>a.addAppCallMethodCall(await n.params.swapAndBridge(s))),o.push(void 0),this},swapAndBridgeWithStable(s){return r=r.then(async()=>a.addAppCallMethodCall(await n.params.swapAndBridgeWithStable(s))),o.push(void 0),this},receiveTokens(s){return r=r.then(async()=>a.addAppCallMethodCall(await n.params.receiveTokens(s))),o.push(void 0),this},registerBridge(s){return r=r.then(async()=>a.addAppCallMethodCall(await n.params.registerBridge(s))),o.push(void 0),this},addBridgeToken(s){return r=r.then(async()=>a.addAppCallMethodCall(await n.params.addBridgeToken(s))),o.push(void 0),this},removeBridgeToken(s){return r=r.then(async()=>a.addAppCallMethodCall(await n.params.removeBridgeToken(s))),o.push(void 0),this},withdrawGasTokens(s){return r=r.then(async()=>a.addAppCallMethodCall(await n.params.withdrawGasTokens(s))),o.push(void 0),this},withdrawBridgingFeeInTokens(s){return r=r.then(async()=>a.addAppCallMethodCall(await n.params.withdrawBridgingFeeInTokens(s))),o.push(void 0),this},getBridgingCostInTokens(s){return r=r.then(async()=>a.addAppCallMethodCall(await n.params.getBridgingCostInTokens(s))),o.push(d=>n.decodeReturnValue("getBridgingCostInTokens(byte,uint64)uint64",d)),this},hashMessage(s){return r=r.then(async()=>a.addAppCallMethodCall(await n.params.hashMessage(s))),o.push(d=>n.decodeReturnValue("hashMessage(uint64,byte[32],byte,byte,byte[32],byte[32])byte[32]",d)),this},isOtherBridgeTokenSupported(s){return r=r.then(async()=>a.addAppCallMethodCall(await n.params.isOtherBridgeTokenSupported(s))),o.push(d=>n.decodeReturnValue("isOtherBridgeTokenSupported(byte,byte[32])bool",d)),this},getTransactionCost(s){return r=r.then(async()=>a.addAppCallMethodCall(await n.params.getTransactionCost(s))),o.push(d=>n.decodeReturnValue("getTransactionCost(byte)uint64",d)),this},getReceiveTokensCost(s){return r=r.then(async()=>a.addAppCallMethodCall(await n.params.getReceiveTokensCost(s))),o.push(d=>n.decodeReturnValue("getReceiveTokensCost()uint64",d)),this},getSendTransactionStorageCost(s){return r=r.then(async()=>a.addAppCallMethodCall(await n.params.getSendTransactionStorageCost(s))),o.push(d=>n.decodeReturnValue("getSendTransactionStorageCost()uint64",d)),this},swap(s){return r=r.then(async()=>a.addAppCallMethodCall(await n.params.swap(s))),o.push(void 0),this},addPool(s){return r=r.then(async()=>a.addAppCallMethodCall(await n.params.addPool(s))),o.push(void 0),this},removePool(s){return r=r.then(async()=>a.addAppCallMethodCall(await n.params.removePool(s))),o.push(void 0),this},stopSwap(s){return r=r.then(async()=>a.addAppCallMethodCall(await n.params.stopSwap(s))),o.push(void 0),this},startSwap(s){return r=r.then(async()=>a.addAppCallMethodCall(await n.params.startSwap(s))),o.push(void 0),this},setStopAuthority(s){return r=r.then(async()=>a.addAppCallMethodCall(await n.params.setStopAuthority(s))),o.push(void 0),this},setRebalancer(s){return r=r.then(async()=>a.addAppCallMethodCall(await n.params.setRebalancer(s))),o.push(void 0),this},getGasUsage(s){return r=r.then(async()=>a.addAppCallMethodCall(await n.params.getGasUsage(s))),o.push(d=>n.decodeReturnValue("getGasUsage(byte)uint64",d)),this},setGasUsage(s){return r=r.then(async()=>a.addAppCallMethodCall(await n.params.setGasUsage(s))),o.push(void 0),this},setGasOracle(s){return r=r.then(async()=>a.addAppCallMethodCall(await n.params.setGasOracle(s))),o.push(void 0),this},getTransactionRelayerCost(s){return r=r.then(async()=>a.addAppCallMethodCall(await n.params.getTransactionRelayerCost(s))),o.push(d=>n.decodeReturnValue("getTransactionRelayerCost(byte)uint64",d)),this},transferOwnership(s){return r=r.then(async()=>a.addAppCallMethodCall(await n.params.transferOwnership(s))),o.push(void 0),this},clearState(s){return r=r.then(()=>a.addAppCall(n.params.clearState(s))),this},addTransaction(s,d){return r=r.then(()=>a.addTransaction(s,d)),this},async composer(){return await r,a},async simulate(s){await r;let d=await(s?a.simulate(s):a.simulate());return{...d,returns:d.returns?.map((c,g)=>o[g]!==void 0?o[g](c):c.returnValue)}},async send(s){await r;let d=await a.send(s);return{...d,returns:d.returns?.map((c,g)=>o[g]!==void 0?o[g](c):c.returnValue)}}}}};var Ls=require("@algorandfoundation/algokit-utils/types/app-arc56"),Fa=require("@algorandfoundation/algokit-utils/types/app-client"),qg=require("@algorandfoundation/algokit-utils/types/app-factory"),wi={name:"PaddingUtil",structs:{},methods:[{name:"createApplication",args:[],returns:{type:"void"},actions:{create:["NoOp"],call:[]},readonly:!1,events:[],recommendations:{}}],arcs:[22,28],networks:{},state:{schema:{global:{ints:0,bytes:0},local:{ints:0,bytes:0}},keys:{global:{},local:{},box:{}},maps:{global:{},local:{},box:{}}},bareActions:{create:[],call:["NoOp"]},sourceInfo:{approval:{sourceInfo:[{pc:[27],errorMessage:"OnCompletion must be NoOp && can only call when creating"},{pc:[37],errorMessage:"OnCompletion must be NoOp && can only call when not creating"}],pcOffsetMethod:"none"},clear:{sourceInfo:[],pcOffsetMethod:"none"}},source:{approval:"I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3BhZGRpbmctdXRpbC5jb250cmFjdC5hbGdvLnRzOjQKICAgIC8vIGV4cG9ydCBjbGFzcyBQYWRkaW5nVXRpbCBleHRlbmRzIENvbnRyYWN0IGltcGxlbWVudHMgQ29udmVudGlvbmFsUm91dGluZyB7CiAgICB0eG4gTnVtQXBwQXJncwogICAgYnogbWFpbl9wYWRkaW5nQDUKICAgIHB1c2hieXRlcyAweGI4NDQ3YjM2IC8vIG1ldGhvZCAiY3JlYXRlQXBwbGljYXRpb24oKXZvaWQiCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAwCiAgICBtYXRjaCBtYWluX2NyZWF0ZUFwcGxpY2F0aW9uX3JvdXRlQDMKICAgIGVycgoKbWFpbl9jcmVhdGVBcHBsaWNhdGlvbl9yb3V0ZUAzOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wYWRkaW5nLXV0aWwuY29udHJhY3QuYWxnby50czo2CiAgICAvLyBjcmVhdGVBcHBsaWNhdGlvbigpOiB2b2lkIHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICAhCiAgICAmJgogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBtdXN0IGJlIE5vT3AgJiYgY2FuIG9ubHkgY2FsbCB3aGVuIGNyZWF0aW5nCiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCgptYWluX3BhZGRpbmdANToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcGFkZGluZy11dGlsLmNvbnRyYWN0LmFsZ28udHM6OQogICAgLy8gQGJhcmVtZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgICYmCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIG11c3QgYmUgTm9PcCAmJiBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg==",clear:"I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg=="},byteCode:{approval:"CzEbQQAZgAS4RHs2NhoAjgEAAQAxGRQxGBQQRIEBQzEZFDEYEESBAUM=",clear:"C4EBQw=="},events:[],templateVariables:{}};var Wi=class i{appClient;constructor(n){this.appClient=n instanceof Fa.AppClient?n:new Fa.AppClient({...n,appSpec:wi})}decodeReturnValue(n,a){return a!==void 0?(0,Ls.getArc56ReturnValue)(a,this.appClient.getABIMethod(n),wi.structs):void 0}static async fromCreatorAndName(n){return new i(await Fa.AppClient.fromCreatorAndName({...n,appSpec:wi}))}static async fromNetwork(n){return new i(await Fa.AppClient.fromNetwork({...n,appSpec:wi}))}get appId(){return this.appClient.appId}get appAddress(){return this.appClient.appAddress}get appName(){return this.appClient.appName}get appSpec(){return this.appClient.appSpec}get algorand(){return this.appClient.algorand}params={clearState:n=>this.appClient.params.bare.clearState(n),bare:n=>this.appClient.params.bare.call(n)};createTransaction={clearState:n=>this.appClient.createTransaction.bare.clearState(n),bare:n=>this.appClient.createTransaction.bare.call(n)};send={clearState:n=>this.appClient.send.bare.clearState(n),bare:n=>this.appClient.send.bare.call(n)};clone(n){return new i(this.appClient.clone(n))}state={};newGroup(){let n=this,a=this.algorand.newGroup(),r=Promise.resolve(),o=[];return{bare(s){return r=r.then(()=>a.addAppCall(n.params.bare(s))),this},clearState(s){return r=r.then(()=>a.addAppCall(n.params.clearState(s))),this},addTransaction(s,d){return r=r.then(()=>a.addTransaction(s,d)),this},async composer(){return await r,a},async simulate(s){await r;let d=await(s?a.simulate(s):a.simulate());return{...d,returns:d.returns?.map((c,g)=>o[g]!==void 0?o[g](c):c.returnValue)}},async send(s){await r;let d=await a.send(s);return{...d,returns:d.returns?.map((c,g)=>o[g]!==void 0?o[g](c):c.returnValue)}}}}};var xs=require("@algorandfoundation/algokit-utils"),xn=Ft(require("algosdk"));function ln(i){return(i*1e3).microAlgos()}async function no(i,n,a){let r=new xn.AtomicTransactionComposer,o=(0,xn.makeBasicAccountTransactionSigner)({addr:n,sk:new Uint8Array(64)});i.forEach(c=>{r.addTransaction({txn:c,signer:o})});let d=(await(0,xs.populateAppCallResources)(r,a)).buildGroup().map(c=>c.txn);return An(...d)}function An(...i){return i.map(a=>xn.default.encodeUnsignedTransaction(a)).map(a=>Buffer.from(a).toString("hex"))}async function Ni(i,n,a){typeof i=="string"&&(i=BigInt(i));let o=(await a.account.getInformation(n)).assets;return o?o.find(({assetId:d})=>d===i)!==void 0:!1}async function Fi(i,n,a){typeof i=="string"&&(i=BigInt(i));let o=(await a.account.getInformation(n)).appsLocalState;return o?o.find(({id:d})=>d===i)!==void 0:!1}var ke=class{};var Ks=require("@solana/web3.js"),Sa=require("@stacks/transactions"),Es=require("@stellar/stellar-sdk"),Zi=Ft(require("algosdk")),Ne=require("big.js"),ro=Ft(require("randombytes")),io=require("tronweb"),_s=require("web3");var S=require("big.js"),Gi=Ft(require("bn.js"));function ao(i,n){return(0,S.Big)(100).minus((0,S.Big)(100).times(n).div(i)).toNumber()}function Dt(i,n){return Ve(i,n,3).round(0,S.Big.roundDown)}function Ke(i,n){return Ve(i,3,n)}function Ve(i,n,a){let r=(0,S.Big)(a).minus(n).toNumber();return(0,S.Big)(i).times(Ga(r))}function Ga(i){return(0,S.Big)(10).pow(i)}function j(i,n){return(0,S.Big)(i).times(Ga(n))}function P(i,n){let a=(0,S.Big)(i);return a.eq(0)?(0,S.Big)(0):(0,S.Big)(a).div(Ga(n))}function We(i){return P((0,S.Big)(i.tokenBalance).minus(i.vUsdBalance).toFixed(),3).div(2).toFixed()}function St(i,{feeShare:n,decimals:a},r){let o=(0,S.Big)(i);if(o.lte(0))return"0";let s=o.times(n),d=o.minus(s),c=Dt(d,a),g=(0,S.Big)(r.tokenBalance).plus(c),l=kt(g,r.aValue,r.dValue);return(0,S.Big)(r.vUsdBalance).minus(l).round(0,S.Big.roundDown).toFixed()}function Za(i,{feeShare:n,decimals:a},r){let o=(0,S.Big)(i);if(o.lte(0))return(0,S.Big)(0).toFixed();let s=o.plus(r.vUsdBalance),d=kt(s,r.aValue,r.dValue),c=Ke((0,S.Big)(r.tokenBalance).minus(d),a),g=(0,S.Big)(c).times(n);return(0,S.Big)(c).minus(g).round(0,S.Big.roundDown).toFixed()}function Hs(i,n){let a=(0,S.Big)(i);if(a.lte(0))return n;let r=a.plus(n.vUsdBalance),o=kt(r,n.aValue,n.dValue);return{aValue:n.aValue,dValue:n.dValue,tokenBalance:o.toFixed(0),vUsdBalance:r.toFixed(0)}}function Js(i,{feeShare:n,decimals:a},r){if((0,S.Big)(i).lte(0))return(0,S.Big)(0);let o=(0,S.Big)(r.vUsdBalance).minus(i);if(o.lte(0))throw new Zt;let s=kt(o,r.aValue,r.dValue),d=(0,S.Big)(s).minus(r.tokenBalance),c=Ke(d,a),g=(0,S.Big)(n).div((0,S.Big)(1).minus(n)),l=(0,S.Big)(c).times(g).round(0,S.Big.roundUp);return(0,S.Big)(c).plus(l).round(0,S.Big.roundDown)}function Os(i,{feeShare:n,decimals:a},r){if((0,S.Big)(i).lte(0))return(0,S.Big)(0);let o=(0,S.Big)(n).div((0,S.Big)(1).minus(n)),s=(0,S.Big)(i).times(o).round(0,S.Big.roundUp),d=(0,S.Big)(i).plus(s),c=Dt(d,a),g=(0,S.Big)(r.tokenBalance).minus(c);if(g.lte(0))throw new Zt;let l=kt(g,r.aValue,r.dValue);return(0,S.Big)(l).minus(r.vUsdBalance).round(0,S.Big.roundDown)}function kt(i,n,a){let r=(0,S.Big)(4).times(n).times((0,S.Big)(a).minus(i)).minus(a),o=(0,S.Big)(a).pow(3),s=r.pow(2),d=(0,S.Big)(i).times((0,S.Big)(i).times(s).plus((0,S.Big)(4).times(n).times(o))).sqrt().round(0,S.Big.roundDown),c=(0,S.Big)(8).times(n).times(i),g=r.times(i).plus(d).div(c).round(0,S.Big.roundDown);return g.eq(0)?(0,S.Big)(0):g.plus(1)}function zs(i,n,a,r){let o=new Gi.default(i),s=new Gi.default(a),d=new Gi.default(n);return o.mul(s).shrn(r).sub(d).toString()}function Us(i){return(0,S.Big)(i).gt(0)?`${Number((0,S.Big)(i).times(100).toFixed(2)).toLocaleString()}%`:"N/A"}function Ds(i,n,a){let r=(0,S.Big)(n).times(a),o=(0,S.Big)(n).plus(a),s=(0,S.Big)(8).times(i).times(r).times(o),d=r.times((0,S.Big)(16).times(i).minus(4)).div(3),c=s.times(s),g=d.times(d).times(d),l=c.plus(g),A=(0,S.Big)(l).sqrt(),u=(0,S.Big)(Math.cbrt(+s.plus(A).toFixed())),m=(0,S.Big)(Math.cbrt(+s.minus(A).toFixed()));return u.plus(m).toFixed()}function Qt(i,n,a){let r;switch(n){case"EVM":{r=Qs(i);break}case"SOLANA":{r=new Ks.PublicKey(i).toBuffer();break}case"TRX":{r=nl(i);break}case"SRB":{r=new Es.Address(i).toBuffer();break}case"SUI":{r=Qs(i);break}case"ALG":{r=el(i);break}case"STX":{r=tl(i);break}}switch(a){case"EVM":return"0x"+r.toString("hex");case"SOLANA":return Array.from(r);case"TRX":return r;case"SRB":return r.toJSON().data;case"SUI":return"0x"+r.toString("hex");case"ALG":return r;case"STX":return r}}function Ct(i){return i.replace(/^0x/i,"")}function oo(i){return Buffer.from(i.replace(/^0x/i,""),"hex")}function Qs(i){let a=oo(i);return Buffer.concat([Buffer.alloc(32-a.length,0),a],32)}function el(i){if(Zi.default.isValidAddress(i))return Buffer.from(Zi.Address.fromString(i).publicKey);if(/^\d+$/.test(i)){let n=BigInt(i).toString(16);return n=n.padStart(64,"0"),Buffer.from(n,"hex")}throw new f(`Unexpected Alg address: ${i}`)}function tl(i){if(i.includes(".")){let[a,r]=(0,Sa.parseContractId)(i);if(!a||!r)throw new f(`Unexpected Alg address: ${i}`);let o=Buffer.from((0,Sa.createAddress)(a).hash160,"hex"),s=_s.Web3.utils.keccak256(Buffer.concat([o,Buffer.from(r)]));return oo(s)}let n=Buffer.from((0,Sa.createAddress)(i).hash160,"hex");return Si(n,32)}function nl(i){let n=ka(i),a=oo(n);return Si(a,32)}function ka(i){let n=io.utils.crypto.decodeBase58Address(i);return n?io.utils.bytes.byteArray2hexStr(n).replace(/^41/,"0x"):""}function Si(i,n){if(i.length>=n)return i;let a=Buffer.alloc(n,0);return i.copy(a,n-i.length),a}function Vt(){return(0,ro.default)(32)}function Pt(){let i=(0,ro.default)(32).readBigInt64BE();return i<0?i*-1n:i}function tt(i,n){let a={},r=n.sourceToken;switch(a.amount=j(n.amount,r.decimals).toFixed(),a.contractAddress=r.bridgeAddress,a.fromAccountAddress=n.fromAccountAddress,i){case"SUI":{if(!r.originTokenAddress)throw new f("SUI sourceToken must contain 'originTokenAddress'");a.fromTokenAddress=r.originTokenAddress;break}case"ALG":{a.fromTokenAddress=r.tokenAddress;break}default:a.fromTokenAddress=Qt(r.tokenAddress,i,i)}switch(a.toAccountAddress=n.toAccountAddress,i){case"SUI":{if(!n.destinationToken.originTokenAddress)throw new f("SUI destinationToken must contain 'originTokenAddress'");a.toTokenAddress=n.destinationToken.originTokenAddress;break}case"ALG":{a.toTokenAddress=n.destinationToken.tokenAddress;break}default:a.toTokenAddress=Qt(n.destinationToken.tokenAddress,i,i)}return a.minimumReceiveAmount=n.minimumReceiveAmount?j(n.minimumReceiveAmount,n.destinationToken.decimals).toFixed():"0",a}async function Ee(i,n,a){let r={};r.fromChainId=n.sourceToken.allbridgeChainId,r.fromChainSymbol=n.sourceToken.chainSymbol;let o=x.getChainProperty(n.destinationToken.chainSymbol).chainType;if(i==="SUI"){if(!n.sourceToken.originTokenAddress)throw new f("SUI token must contain 'originTokenAddress'");r.fromTokenAddress=n.sourceToken.originTokenAddress}else r.fromTokenAddress=n.sourceToken.tokenAddress;if(r.toChainId=n.destinationToken.allbridgeChainId,r.toTokenAddress=n.destinationToken.tokenAddress,r.gasFeePaymentMethod=n.gasFeePaymentMethod??"native",r.gasFeePaymentMethod==="abr"&&!n.sourceToken.abrPayer)throw new f("Source token must contain 'abrPayer' for ABR payment method");let s=n.sourceToken;switch(n.messenger){case 3:if(!s.cctpAddress||!n.destinationToken.cctpAddress)throw new we("Such route does not support CCTP protocol");r.contractAddress=s.cctpAddress;break;case 4:if(!s.cctpV2Address||!n.destinationToken.cctpV2Address)throw new we("Such route does not support CCTP V2 protocol");r.contractAddress=s.cctpV2Address;break;case 5:if(!s.oftBridgeAddress||!n.destinationToken.oftBridgeAddress||s.oftId!==n.destinationToken.oftId)throw new Ze("Such route does not support OFT protocol");r.contractAddress=s.oftBridgeAddress;break;case 6:if(!s.xReserve?.bridgeAddress||!n.destinationToken.xReserve)throw new f("Such route does not support xReserve protocol");r.contractAddress=s.xReserve.bridgeAddress;break;case 1:case 2:r.contractAddress=s.bridgeAddress;break}r.messenger=n.messenger,r.fromAccountAddress=n.fromAccountAddress,r.amount=j(n.amount,s.decimals).toFixed();let{fee:d,feeFormat:c}=n;if(!d){let u=(await so(n.sourceToken,r.toChainId,r.messenger,a))[r.gasFeePaymentMethod];if(!u)throw new Ut;d=u.int,c="int"}if(c=="float")switch(r.gasFeePaymentMethod){case"native":r.fee=j(d,x.getChainDecimalsByType(s.chainType)).toFixed(0);break;case"stablecoin":r.fee=j(d,s.decimals).toFixed(0);break;case"abr":if(!s.abrPayer)throw new f("Source token must contain 'abrPayer' for ABR payment method");r.fee=j(d,s.abrPayer.abrToken.decimals).toFixed(0);break;default:return se(r.gasFeePaymentMethod,"Unhandled FeePaymentMethod")}else r.fee=d;let{extraGas:g,extraGasFormat:l}=n;if(g&&+g>0){let A=await co(s,n.destinationToken,r.messenger,a),u,m;switch(r.gasFeePaymentMethod){case"native":u=x.getChainDecimalsByType(s.chainType),m=(0,Ne.Big)(A.exchangeRate);break;case"stablecoin":u=s.decimals,m=(0,Ne.Big)(A.exchangeRate).div(A.sourceNativeTokenPrice);break;case"abr":if(!s.abrPayer)throw new f("Source token must contain 'abrPayer' for ABR payment method");if(!A.abrExchangeRate)throw new f("Cannot transfer WITH_ABR option");u=s.abrPayer.abrToken.decimals,m=(0,Ne.Big)(A.exchangeRate).div(A.abrExchangeRate);break;default:return se(r.gasFeePaymentMethod,"Unhandled FeePaymentMethod")}switch(l??"int"){case"float":{r.extraGas=j(g,u).toFixed(0);let y=m.mul(g);r.extraGasDest=j(y,x.getChainDecimalsByType(n.destinationToken.chainType)).toFixed(0,Ne.Big.roundDown);break}case"int":{r.extraGas=g;let y=P(r.extraGas,x.getChainDecimalsByType(s.chainType)),v=m.mul(y);r.extraGasDest=j(v,x.getChainDecimalsByType(n.destinationToken.chainType)).toFixed(0,Ne.Big.roundDown);break}}il(r.extraGas,r.gasFeePaymentMethod,A)}switch(["SUI","ALG"].includes(i)||(r.fromTokenAddress=Qt(r.fromTokenAddress,i,i)),r.toAccountAddress=Qt(n.toAccountAddress,o,i),r.toTokenAddress=Qt(r.toTokenAddress,o,i),r.gasFeePaymentMethod){case"native":break;case"stablecoin":al(r.amount,s.decimals,s.symbol,r.fee,r.extraGas);break;case"abr":{let{abrExchangeRate:A}=await a.getReceiveTransactionCost({sourceChainId:r.fromChainId,destinationChainId:r.toChainId,messenger:r.messenger,sourceToken:n.sourceToken.tokenAddress});r.abrExchangeRate=A;break}default:return se(r.gasFeePaymentMethod,"Unhandled FeePaymentMethod")}return r}function al(i,n,a,r,o){let s=(0,Ne.Big)(i).minus(r).minus(o??0);if(s.lte(0))throw new Gt(`Amount not enough to pay fee, ${P((0,Ne.Big)(s).minus(1).neg(),n).toFixed()} ${a} is missing`)}async function so(i,n,a,r){let o=await r.getReceiveTransactionCost({sourceChainId:i.allbridgeChainId,destinationChainId:n,messenger:a,sourceToken:i.tokenAddress}),s={native:{int:o.fee,float:P(o.fee,x.getChainDecimalsByType(i.chainType)).toFixed()},adminFeeShareWithExtras:o.adminFeeShareWithExtras};if(o.sourceNativeTokenPrice){let d=Ve(new Ne.Big(o.fee).mul(o.sourceNativeTokenPrice),x.getChainDecimalsByType(i.chainType),i.decimals).toFixed(0,Ne.Big.roundUp);s.stablecoin={int:d,float:P(d,i.decimals).toFixed()}}if(o.abrExchangeRate&&i.abrPayer&&i.abrPayer.payerAvailability[a]){let d=Ve(new Ne.Big(o.fee).mul(o.abrExchangeRate),x.getChainDecimalsByType(i.chainType),i.abrPayer.abrToken.decimals).toFixed(0,Ne.Big.roundUp);s.abr={int:d,float:P(d,i.abrPayer.abrToken.decimals).toFixed()}}return s}function il(i,n,a){let r=a.extraGasMax[n];if(!r)throw new Ut(`Impossible to pay extra gas by '${n}' payment method`);let o=r.int;if((0,Ne.Big)(i).gt(o))throw new Ta(`Extra gas ${i} in int format, exceeded limit ${o} for '${n}' payment method`)}async function co(i,n,a,r){let o={},s=await r.getReceiveTransactionCost({sourceChainId:i.allbridgeChainId,destinationChainId:n.allbridgeChainId,messenger:a,sourceToken:i.tokenAddress}),d={int:n.txCostAmount.transfer,float:P(n.txCostAmount.transfer,x.getChainDecimalsByType(n.chainType)).toFixed()},c={int:n.txCostAmount.swap,float:P(n.txCostAmount.swap,x.getChainDecimalsByType(n.chainType)).toFixed()};if(a===6){let y=()=>({int:"0",float:"0"});return{extraGasMax:{native:y()},destinationChain:{gasAmountMax:y(),swap:c,transfer:d},exchangeRate:s.exchangeRate,sourceNativeTokenPrice:s.sourceNativeTokenPrice}}let g=n.txCostAmount.maxAmount,l=P(g,x.getChainDecimalsByType(n.chainType)).toFixed(),A=(0,Ne.Big)(l).div(s.exchangeRate).toFixed(x.getChainDecimalsByType(i.chainType),Ne.Big.roundDown),u=j(A,x.getChainDecimalsByType(i.chainType)).toFixed(0);if(o.native={int:u,float:A},s.sourceNativeTokenPrice){let y=(0,Ne.Big)(A).mul(s.sourceNativeTokenPrice).toFixed(i.decimals,Ne.Big.roundDown);o.stablecoin={int:j(y,i.decimals).toFixed(0),float:y}}let m;if(s.abrExchangeRate&&i.abrPayer&&i.abrPayer.payerAvailability[a]){m=!0;let y=(0,Ne.Big)(A).mul(s.abrExchangeRate).toFixed(i.abrPayer.abrToken.decimals,Ne.Big.roundDown);o.abr={int:j(y,i.abrPayer.abrToken.decimals).toFixed(0),float:y}}return{extraGasMax:o,destinationChain:{gasAmountMax:{int:g,float:l},swap:c,transfer:d},exchangeRate:s.exchangeRate,abrExchangeRate:m?s.abrExchangeRate:void 0,sourceNativeTokenPrice:s.sourceNativeTokenPrice}}function $s(i){return i.sourceToken.chainSymbol!==i.destinationToken.chainSymbol}var Xa=class extends ke{constructor(a,r){super();this.algorand=a;this.api=r;let o=Pa.default.generateAccount(),s=new qs.SigningAccount(o,o.addr);a.setDefaultSigner(s),a.setDefaultValidityWindow(100)}algorand;api;chainType="ALG";send(a){throw new J}async buildRawTransactionSend(a){let r=await Ee(this.chainType,a,this.api);if(!a.sourceToken.bridgeId)throw new f("ALG sourceToken must contain 'bridgeId'");if(!a.sourceToken.paddingUtilId)throw new f("ALG sourceToken must contain 'paddingUtilId'");let o=BigInt(a.sourceToken.bridgeId),s=this.getBridge(o),d=BigInt(a.sourceToken.paddingUtilId),c=this.getPaddingUtil(d),g=Pa.Address.fromString(a.fromAccountAddress),l=BigInt(a.sourceToken.tokenAddress),A=r.toChainId,u=r.toAccountAddress,m=r.toTokenAddress,y=Vt(),v=BigInt(r.amount),C=BigInt(r.fee);r.extraGas&&(C=C+BigInt(r.extraGas));let T=this.algorand.newGroup(),Y=await this.algorand.createTransaction.assetTransfer({amount:v,assetId:l,receiver:s.appAddress,sender:g});switch(r.gasFeePaymentMethod){case"native":{let N=await this.algorand.createTransaction.payment({amount:ed.AlgoAmount.MicroAlgo(C),receiver:s.appAddress,sender:g});T.addAppCallMethodCall(await s.params.swapAndBridge({args:{paymentRef:N,assetTransferRef:Y,recipient:u,destinationChainId:A,receiveToken:m,nonce:y},sender:g,extraFee:ln(8)}));break}case"stablecoin":{T.addAppCallMethodCall(await s.params.swapAndBridgeWithStable({args:{assetTransferRef:Y,recipient:u,destinationChainId:A,receiveToken:m,nonce:y,feeTokenAmount:C},sender:g,extraFee:ln(9)}));break}case"abr":throw new f("ALG bridge does not support ABR payment method");default:return se(r.gasFeePaymentMethod,"Unhandled FeePaymentMethod")}let h=await this.algorand.createTransaction.appCall({appId:c.appId,sender:g,note:"padding1"});T.addTransaction(h);let F=await this.algorand.createTransaction.appCall({appId:c.appId,sender:g,note:"padding2"});T.addTransaction(F);let{transactions:G}=await T.buildTransactions();return no(G,g,this.algorand.client.algod)}async buildRawTransactionSwap(a){let r=tt(this.chainType,a),o=Pa.Address.fromString(a.fromAccountAddress),s=a.toAccountAddress,d=BigInt(a.sourceToken.tokenAddress),c=BigInt(a.destinationToken.tokenAddress),g=BigInt(r.minimumReceiveAmount),l=BigInt(r.amount);if(!a.sourceToken.bridgeId)throw new f("ALG sourceToken must contain 'bridgeId'");if(!a.sourceToken.paddingUtilId)throw new f("ALG sourceToken must contain 'paddingUtilId'");let A=BigInt(a.sourceToken.bridgeId),u=this.getBridge(A),m=BigInt(a.sourceToken.paddingUtilId),y=this.getPaddingUtil(m),v=this.algorand.newGroup();a.fromAccountAddress===s&&(await Ni(c,s,this.algorand)||v.addAssetOptIn({sender:o,assetId:c}));let C=this.algorand.createTransaction.assetTransfer({assetId:d,amount:l,sender:o,receiver:u.appAddress});v.addAppCallMethodCall(await u.params.swap({args:{assetTransferRef:C,recipient:s,receiveAsset:c,receiveAmountMin:g},sender:o,extraFee:ln(4)}));let T=await this.algorand.createTransaction.appCall({appId:y.appId,sender:o});v.addTransaction(T);let{transactions:Y}=await v.buildTransactions();return no(Y,o,this.algorand.client.algod)}getBridge(a){return this.algorand.client.getTypedAppClientById(Yi,{appId:a})}getPaddingUtil(a){return this.algorand.client.getTypedAppClientById(Wi,{appId:a})}};var gd=require("@stacks/transactions"),Ma=require("big.js");var rl={abi:[{inputs:[{internalType:"uint256",name:"_chainId",type:"uint256"},{internalType:"uint256",name:"_chainPrecision",type:"uint256"},{internalType:"contract Messenger",name:"_allbridgeMessenger",type:"address"},{internalType:"contract WormholeMessenger",name:"_wormholeMessenger",type:"address"},{internalType:"contract IGasOracle",name:"_gasOracle",type:"address"}],stateMutability:"nonpayable",type:"constructor"},{anonymous:!1,inputs:[{indexed:!1,internalType:"uint256",name:"gas",type:"uint256"}],name:"BridgingFeeFromTokens",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"previousOwner",type:"address"},{indexed:!0,internalType:"address",name:"newOwner",type:"address"}],name:"OwnershipTransferred",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"uint256",name:"bridgeTransactionCost",type:"uint256"},{indexed:!1,internalType:"uint256",name:"messageTransactionCost",type:"uint256"}],name:"ReceiveFee",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"sender",type:"address"},{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"}],name:"Received",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"sender",type:"address"},{indexed:!1,internalType:"address",name:"recipient",type:"address"},{indexed:!1,internalType:"bytes32",name:"sendToken",type:"bytes32"},{indexed:!1,internalType:"bytes32",name:"receiveToken",type:"bytes32"},{indexed:!1,internalType:"uint256",name:"sendAmount",type:"uint256"},{indexed:!1,internalType:"uint256",name:"receiveAmount",type:"uint256"}],name:"Swapped",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"},{indexed:!1,internalType:"bytes32",name:"recipient",type:"bytes32"},{indexed:!1,internalType:"uint256",name:"nonce",type:"uint256"},{indexed:!1,internalType:"enum MessengerProtocol",name:"messenger",type:"uint8"},{indexed:!1,internalType:"bytes32",name:"message",type:"bytes32"}],name:"TokensReceived",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"},{indexed:!1,internalType:"bytes32",name:"recipient",type:"bytes32"},{indexed:!1,internalType:"uint256",name:"destinationChainId",type:"uint256"},{indexed:!1,internalType:"bytes32",name:"receiveToken",type:"bytes32"},{indexed:!1,internalType:"uint256",name:"nonce",type:"uint256"},{indexed:!1,internalType:"enum MessengerProtocol",name:"messenger",type:"uint8"}],name:"TokensSent",type:"event"},{stateMutability:"payable",type:"fallback"},{inputs:[{internalType:"uint256",name:"_chainId",type:"uint256"},{internalType:"bytes32",name:"tokenAddress",type:"bytes32"}],name:"addBridgeToken",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"contract Pool",name:"pool",type:"address"},{internalType:"bytes32",name:"token",type:"bytes32"}],name:"addPool",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"canSwap",outputs:[{internalType:"uint8",name:"",type:"uint8"}],stateMutability:"view",type:"function"},{inputs:[],name:"chainId",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"chainId",type:"uint256"}],name:"gasUsage",outputs:[{internalType:"uint256",name:"amount",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"destinationChainId",type:"uint256"},{internalType:"enum MessengerProtocol",name:"messenger",type:"uint8"},{internalType:"address",name:"tokenAddress",type:"address"}],name:"getBridgingCostInTokens",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"chainId",type:"uint256"},{internalType:"enum MessengerProtocol",name:"protocol",type:"uint8"}],name:"getMessageCost",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"chainId",type:"uint256"},{internalType:"enum MessengerProtocol",name:"protocol",type:"uint8"}],name:"getMessageGasUsage",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"chainId",type:"uint256"}],name:"getTransactionCost",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes32",name:"message",type:"bytes32"},{internalType:"enum MessengerProtocol",name:"protocol",type:"uint8"}],name:"hasReceivedMessage",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes32",name:"message",type:"bytes32"}],name:"hasSentMessage",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"bytes32",name:"recipient",type:"bytes32"},{internalType:"uint256",name:"sourceChainId",type:"uint256"},{internalType:"uint256",name:"destinationChainId",type:"uint256"},{internalType:"bytes32",name:"receiveToken",type:"bytes32"},{internalType:"uint256",name:"nonce",type:"uint256"},{internalType:"enum MessengerProtocol",name:"messenger",type:"uint8"}],name:"hashMessage",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],stateMutability:"pure",type:"function"},{inputs:[{internalType:"uint256",name:"chainId",type:"uint256"},{internalType:"bytes32",name:"tokenAddress",type:"bytes32"}],name:"otherBridgeTokens",outputs:[{internalType:"bool",name:"isSupported",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"chainId",type:"uint256"}],name:"otherBridges",outputs:[{internalType:"bytes32",name:"bridgeAddress",type:"bytes32"}],stateMutability:"view",type:"function"},{inputs:[],name:"owner",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes32",name:"tokenId",type:"bytes32"}],name:"pools",outputs:[{internalType:"contract Pool",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes32",name:"messageHash",type:"bytes32"}],name:"processedMessages",outputs:[{internalType:"uint256",name:"isProcessed",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"bytes32",name:"recipient",type:"bytes32"},{internalType:"uint256",name:"sourceChainId",type:"uint256"},{internalType:"bytes32",name:"receiveToken",type:"bytes32"},{internalType:"uint256",name:"nonce",type:"uint256"},{internalType:"enum MessengerProtocol",name:"messenger",type:"uint8"},{internalType:"uint256",name:"receiveAmountMin",type:"uint256"}],name:"receiveTokens",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"uint256",name:"_chainId",type:"uint256"},{internalType:"bytes32",name:"bridgeAddress",type:"bytes32"}],name:"registerBridge",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"_chainId",type:"uint256"},{internalType:"bytes32",name:"tokenAddress",type:"bytes32"}],name:"removeBridgeToken",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"renounceOwnership",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes32",name:"messageHash",type:"bytes32"}],name:"sentMessages",outputs:[{internalType:"uint256",name:"isSent",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"contract Messenger",name:"_allbridgeMessenger",type:"address"}],name:"setAllbridgeMessenger",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"contract IGasOracle",name:"_gasOracle",type:"address"}],name:"setGasOracle",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"chainId",type:"uint256"},{internalType:"uint256",name:"gasAmount",type:"uint256"}],name:"setGasUsage",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"_rebalancer",type:"address"}],name:"setRebalancer",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"_stopAuthority",type:"address"}],name:"setStopAuthority",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"contract WormholeMessenger",name:"_wormholeMessenger",type:"address"}],name:"setWormholeMessenger",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"startSwap",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"stopSwap",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"bytes32",name:"token",type:"bytes32"},{internalType:"bytes32",name:"receiveToken",type:"bytes32"},{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256",name:"receiveAmountMin",type:"uint256"}],name:"swap",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes32",name:"token",type:"bytes32"},{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"bytes32",name:"recipient",type:"bytes32"},{internalType:"uint256",name:"destinationChainId",type:"uint256"},{internalType:"bytes32",name:"receiveToken",type:"bytes32"},{internalType:"uint256",name:"nonce",type:"uint256"},{internalType:"enum MessengerProtocol",name:"messenger",type:"uint8"},{internalType:"uint256",name:"feeTokenAmount",type:"uint256"}],name:"swapAndBridge",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"address",name:"newOwner",type:"address"}],name:"transferOwnership",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"contract IERC20",name:"token",type:"address"}],name:"withdrawBridgingFeeInTokens",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"amount",type:"uint256"}],name:"withdrawGasTokens",outputs:[],stateMutability:"nonpayable",type:"function"},{stateMutability:"payable",type:"receive"}]},td=rl;var ol={abi:[{inputs:[{internalType:"uint256",name:"chainId_",type:"uint256"},{internalType:"uint256",name:"chainPrecision_",type:"uint256"},{internalType:"address",name:"tokenAddress",type:"address"},{internalType:"address",name:"cctpMessenger_",type:"address"},{internalType:"address",name:"cctpTransmitter_",type:"address"},{internalType:"contract IGasOracle",name:"gasOracle_",type:"address"}],stateMutability:"nonpayable",type:"constructor"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"previousOwner",type:"address"},{indexed:!0,internalType:"address",name:"newOwner",type:"address"}],name:"OwnershipTransferred",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"recipient",type:"address"},{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"}],name:"ReceivedExtraGas",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"sender",type:"address"},{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"}],name:"ReceivedGas",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"sender",type:"address"},{indexed:!1,internalType:"uint256",name:"nonce",type:"uint256"},{indexed:!1,internalType:"bytes32",name:"newRecipient",type:"bytes32"}],name:"RecipientReplaced",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"bytes32",name:"recipientWalletAddress",type:"bytes32"}],name:"TokensSentExtras",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"},{indexed:!1,internalType:"address",name:"sender",type:"address"},{indexed:!1,internalType:"bytes32",name:"recipient",type:"bytes32"},{indexed:!1,internalType:"uint256",name:"destinationChainId",type:"uint256"},{indexed:!1,internalType:"uint256",name:"nonce",type:"uint256"},{indexed:!1,internalType:"uint256",name:"receivedRelayerFeeFromGas",type:"uint256"},{indexed:!1,internalType:"uint256",name:"receivedRelayerFeeFromTokens",type:"uint256"},{indexed:!1,internalType:"uint256",name:"relayerFee",type:"uint256"},{indexed:!1,internalType:"uint256",name:"receivedRelayerFeeTokenAmount",type:"uint256"},{indexed:!1,internalType:"uint256",name:"adminFeeTokenAmount",type:"uint256"}],name:"TokensSent",type:"event"},{stateMutability:"payable",type:"fallback"},{inputs:[],name:"adminFeeShareBP",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"bytes32",name:"recipient",type:"bytes32"},{internalType:"uint256",name:"destinationChainId",type:"uint256"},{internalType:"uint256",name:"relayerFeeTokenAmount",type:"uint256"}],name:"bridge",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"bytes32",name:"recipient",type:"bytes32"},{internalType:"bytes32",name:"recipientWalletAddress",type:"bytes32"},{internalType:"uint256",name:"destinationChainId",type:"uint256"},{internalType:"uint256",name:"relayerFeeTokenAmount",type:"uint256"}],name:"bridgeWithWalletAddress",outputs:[],stateMutability:"payable",type:"function"},{inputs:[],name:"chainId",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes",name:"originalMessage",type:"bytes"},{internalType:"bytes",name:"originalAttestation",type:"bytes"},{internalType:"bytes32",name:"newRecipient",type:"bytes32"}],name:"changeRecipient",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"chainId",type:"uint256"}],name:"gasUsage",outputs:[{internalType:"uint256",name:"amount",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"destinationChainId",type:"uint256"}],name:"getBridgingCostInTokens",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"chainId_",type:"uint256"}],name:"getDomainByChainId",outputs:[{internalType:"uint32",name:"",type:"uint32"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"chainId",type:"uint256"}],name:"getTransactionCost",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"sourceChainId",type:"uint256"},{internalType:"uint64",name:"nonce",type:"uint64"}],name:"isMessageProcessed",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[],name:"owner",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"recipient",type:"address"},{internalType:"bytes",name:"message",type:"bytes"},{internalType:"bytes",name:"signature",type:"bytes"}],name:"receiveTokens",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"uint256",name:"chainId_",type:"uint256"},{internalType:"uint32",name:"domain",type:"uint32"}],name:"registerBridgeDestination",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"renounceOwnership",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"adminFeeShareBP_",type:"uint256"}],name:"setAdminFeeShare",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"contract IGasOracle",name:"gasOracle_",type:"address"}],name:"setGasOracle",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"chainId",type:"uint256"},{internalType:"uint256",name:"gasAmount",type:"uint256"}],name:"setGasUsage",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"newOwner",type:"address"}],name:"transferOwnership",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"chainId_",type:"uint256"}],name:"unregisterBridgeDestination",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"withdrawFeeInTokens",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"amount",type:"uint256"}],name:"withdrawGas",outputs:[],stateMutability:"nonpayable",type:"function"},{stateMutability:"payable",type:"receive"}]},nd=ol;var sl={abi:[{inputs:[{internalType:"uint256",name:"chainId_",type:"uint256"},{internalType:"uint256",name:"chainPrecision_",type:"uint256"},{internalType:"contract IGasOracle",name:"gasOracle_",type:"address"}],stateMutability:"nonpayable",type:"constructor"},{inputs:[{internalType:"uint16",name:"optionType",type:"uint16"}],name:"InvalidOptionType",type:"error"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"sender",type:"address"},{indexed:!1,internalType:"bytes32",name:"recipient",type:"bytes32"},{indexed:!1,internalType:"address",name:"tokenAddress",type:"address"},{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"},{indexed:!1,internalType:"uint256",name:"destinationChainId",type:"uint256"},{indexed:!1,internalType:"uint256",name:"receivedRelayerFeeFromGas",type:"uint256"},{indexed:!1,internalType:"uint256",name:"receivedRelayerFeeFromTokens",type:"uint256"},{indexed:!1,internalType:"uint256",name:"relayerFeeWithExtraGas",type:"uint256"},{indexed:!1,internalType:"uint256",name:"receivedRelayerFeeTokenAmount",type:"uint256"},{indexed:!1,internalType:"uint256",name:"adminFeeTokenAmount",type:"uint256"},{indexed:!1,internalType:"uint256",name:"extraGasDestinationToken",type:"uint256"}],name:"OftTokensSent",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"previousOwner",type:"address"},{indexed:!0,internalType:"address",name:"newOwner",type:"address"}],name:"OwnershipTransferred",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"sender",type:"address"},{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"}],name:"ReceivedGas",type:"event"},{stateMutability:"payable",type:"fallback"},{inputs:[{internalType:"address",name:"oft_",type:"address"}],name:"addToken",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"tokenAddress",type:"address"}],name:"adminFeeShareBP",outputs:[{internalType:"uint256",name:"feeShare",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"tokenAddress",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"bytes32",name:"recipient",type:"bytes32"},{internalType:"uint256",name:"destinationChainId",type:"uint256"},{internalType:"uint256",name:"relayerFeeTokenAmount",type:"uint256"},{internalType:"uint256",name:"extraGasInDestinationToken",type:"uint256"},{internalType:"uint256",name:"slippageBP",type:"uint256"}],name:"bridge",outputs:[],stateMutability:"payable",type:"function"},{inputs:[],name:"chainId",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"tokenAddress_",type:"address"},{internalType:"uint256",name:"destinationChainId_",type:"uint256"},{internalType:"uint128",name:"extraGasAmount_",type:"uint128"}],name:"extraGasPrice",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"chainId_",type:"uint256"}],name:"getEidByChainId",outputs:[{internalType:"uint32",name:"",type:"uint32"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"tokenAddress",type:"address"}],name:"oftAddress",outputs:[{internalType:"address",name:"oftAddress",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"owner",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"chainId_",type:"uint256"},{internalType:"uint32",name:"eid_",type:"uint32"},{internalType:"uint128",name:"lzGasLimit_",type:"uint128"}],name:"registerBridgeDestination",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"tokenAddress_",type:"address"},{internalType:"uint256",name:"destinationChainId_",type:"uint256"}],name:"relayerFee",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"oft_",type:"address"}],name:"removeToken",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"renounceOwnership",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"tokenAddress_",type:"address"},{internalType:"uint256",name:"adminFeeShareBP_",type:"uint256"}],name:"setAdminFeeShare",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"chainId_",type:"uint256"},{internalType:"uint128",name:"lzGasLimit_",type:"uint128"}],name:"setLzGasLimit",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"chainId_",type:"uint256"},{internalType:"uint256",name:"maxExtraGas_",type:"uint256"}],name:"setMaxExtraGas",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"newOwner",type:"address"}],name:"transferOwnership",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"chainId_",type:"uint256"}],name:"unregisterBridgeDestination",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"contract IERC20",name:"token_",type:"address"}],name:"withdrawFeeInTokens",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"amount_",type:"uint256"}],name:"withdrawGas",outputs:[],stateMutability:"nonpayable",type:"function"},{stateMutability:"payable",type:"receive"}]},ad=sl;var dl={abi:[{inputs:[{internalType:"address",name:"_abrTokenAddress",type:"address"},{internalType:"uint256",name:"_chainPrecision",type:"uint256"}],stateMutability:"nonpayable",type:"constructor"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"previousOwner",type:"address"},{indexed:!0,internalType:"address",name:"newOwner",type:"address"}],name:"OwnershipTransferred",type:"event"},{stateMutability:"payable",type:"fallback"},{inputs:[],name:"abrToken",outputs:[{internalType:"contract IERC20Metadata",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"_tokenAddress",type:"address"},{internalType:"address",name:"_bridge",type:"address"}],name:"approveBridgeToken",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"exchangeRate",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"_amount",type:"uint256"}],name:"nativeTokensToAbr",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"owner",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"_id",type:"uint256"},{internalType:"address",name:"_target",type:"address"},{internalType:"string",name:"_signature",type:"string"}],name:"registerTarget",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"renounceOwnership",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"_newExchangeRate",type:"uint256"}],name:"setExchangeRate",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"id",type:"uint256"}],name:"targets",outputs:[{internalType:"address",name:"target",type:"address"},{internalType:"bytes4",name:"selector",type:"bytes4"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"newOwner",type:"address"}],name:"transferOwnership",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"_token",type:"address"},{internalType:"uint256",name:"_amount",type:"uint256"},{internalType:"uint256",name:"_abrAmount",type:"uint256"},{internalType:"uint256",name:"_targetId",type:"uint256"},{internalType:"bytes",name:"_params",type:"bytes"}],name:"transferTokensAndCallTarget",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"uint256",name:"amount",type:"uint256"}],name:"withdrawGas",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"tokenAddress",type:"address"}],name:"withdrawTokens",outputs:[],stateMutability:"nonpayable",type:"function"},{stateMutability:"payable",type:"receive"}]},id=dl;var cl={abi:[{inputs:[{internalType:"uint256",name:"chainId_",type:"uint256"},{internalType:"address",name:"tokenAddress",type:"address"},{internalType:"address",name:"xReserve_",type:"address"}],stateMutability:"nonpayable",type:"constructor"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"previousOwner",type:"address"},{indexed:!0,internalType:"address",name:"newOwner",type:"address"}],name:"OwnershipTransferred",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"sender",type:"address"},{indexed:!1,internalType:"bytes32",name:"recipient",type:"bytes32"},{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"},{indexed:!1,internalType:"uint256",name:"destinationChainId",type:"uint256"},{indexed:!1,internalType:"uint256",name:"adminFeeTokenAmount",type:"uint256"},{indexed:!1,internalType:"uint256",name:"maxFee",type:"uint256"}],name:"TokensSent",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"bytes32",name:"recipientWalletAddress",type:"bytes32"}],name:"TokensSentExtras",type:"event"},{stateMutability:"payable",type:"fallback"},{inputs:[],name:"adminFeeShareBP",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"bytes32",name:"recipient",type:"bytes32"},{internalType:"uint256",name:"destinationChainId",type:"uint256"}],name:"bridge",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"bytes32",name:"recipient",type:"bytes32"},{internalType:"bytes32",name:"recipientWalletAddress",type:"bytes32"},{internalType:"uint256",name:"destinationChainId",type:"uint256"}],name:"bridgeWithWalletAddress",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"chainId",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"chainId_",type:"uint256"}],name:"getDomainByChainId",outputs:[{internalType:"uint32",name:"",type:"uint32"}],stateMutability:"view",type:"function"},{inputs:[],name:"maxFeeShare",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"owner",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"chainId_",type:"uint256"},{internalType:"uint32",name:"domain",type:"uint32"}],name:"registerBridgeDestination",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"renounceOwnership",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"adminFeeShareBP_",type:"uint256"}],name:"setAdminFeeShare",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"maxFeeShare_",type:"uint256"}],name:"setMaxFeeShare",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"newOwner",type:"address"}],name:"transferOwnership",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"chainId_",type:"uint256"}],name:"unregisterBridgeDestination",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"withdrawFeeInTokens",outputs:[],stateMutability:"nonpayable",type:"function"},{stateMutability:"payable",type:"receive"}]},rd=cl;var dd=Ft(require("@coral-xyz/anchor")),cd=require("@solana/spl-token"),lo=require("@solana/web3.js");var Pe=Ft(require("@coral-xyz/anchor")),Xe=require("@solana/web3.js");function _e(i,n){return Pe.utils.token.associatedAddress({mint:n,owner:i})}async function lt(i){let[n]=await Xe.PublicKey.findProgramAddress([Pe.utils.bytes.utf8.encode("config")],i);return n}async function ki(i,n){let[a]=await Xe.PublicKey.findProgramAddress([Pe.utils.bytes.utf8.encode("lock"),Uint8Array.from(i)],n);return a}async function Xt(i,n){let[a]=await Xe.PublicKey.findProgramAddress([Pe.utils.bytes.utf8.encode("price_v2"),Uint8Array.from([i])],n);return a}async function un(i){let n=await lt(i),[a]=await Xe.PublicKey.findProgramAddress([n.toBuffer()],i);return a}async function Vi(i,n){let[a]=await Xe.PublicKey.findProgramAddress([i.toBuffer()],n);return a}async function Kt(i,n){let[a]=await Xe.PublicKey.findProgramAddress([Pe.utils.bytes.utf8.encode("token"),i.toBytes()],n);return a}async function Pi(i,n,a){let[r]=await Xe.PublicKey.findProgramAddress([Pe.utils.bytes.utf8.encode("other_bridge_token"),Buffer.from([i]),n],a);return r}async function Tn(i,n){let[a]=await Xe.PublicKey.findProgramAddress([Pe.utils.bytes.utf8.encode("chain_bridge"),Uint8Array.from([i])],n);return a}async function Hn(i,n){let[a]=await Xe.PublicKey.findProgramAddress([Pe.utils.bytes.utf8.encode("gas_usage"),Uint8Array.from([i])],n);return a}async function Xi(i,n){let[a]=await Xe.PublicKey.findProgramAddress([Pe.utils.bytes.utf8.encode("sent_message"),i],n);return a}async function go(i,n,a){let[r]=await Xe.PublicKey.findProgramAddress([Pe.utils.bytes.utf8.encode("user_deposit"),n.toBytes(),i.toBytes()],a);return r}async function ji(i,n){let[a]=await Xe.PublicKey.findProgramAddress([Pe.utils.bytes.utf8.encode("cctp_bridge"),i.toBytes()],n);return a}function Mi(i,n){let[a]=Xe.PublicKey.findProgramAddressSync([Pe.utils.bytes.utf8.encode("config"),i.toBytes()],n);return a}async function od(i,n){let[a]=await Xe.PublicKey.findProgramAddress([Pe.utils.bytes.utf8.encode("token"),i.toBytes()],n);return a}function Li(i,n){let[a]=Xe.PublicKey.findProgramAddressSync([Pe.utils.bytes.utf8.encode("lock"),n.toBuffer()],i);return a}function ja(i,n,a,r){let o=Rn("message_transmitter",a),s=Rn("token_messenger",r),d=Rn("__event_authority",r),c=Rn("token_minter",r),g=Rn("local_token",r,[n]),l=Rn("remote_token_messenger",r,[i.toString()]),A=Rn("sender_authority",r);return{messageTransmitterAccount:o,tokenMessenger:s,tokenMessengerEventAuthority:d,tokenMinter:c,localToken:g,remoteTokenMessengerKey:l,authorityPda:A}}function Rn(i,n,a=[]){let r=[Buffer.from(Pe.utils.bytes.utf8.encode(i))];for(let s of a)typeof s=="string"?r.push(Buffer.from(Pe.utils.bytes.utf8.encode(s))):Array.isArray(s)||Buffer.isBuffer(s)?r.push(Buffer.from(Uint8Array.from(s))):r.push(Buffer.from(Uint8Array.from(s.toBuffer())));return Xe.PublicKey.findProgramAddressSync(r,n)[0]}var sd=require("@coral-xyz/anchor"),xi=require("@solana/web3.js");function It(i,n){let a=new xi.Connection(i,"confirmed"),r=new xi.PublicKey(n);return new sd.AnchorProvider(a,{publicKey:r},{preflightCommitment:"confirmed",commitment:"confirmed"})}async function Hi(i,n,a,r){let o,s=new lo.PublicKey(n),d=new lo.PublicKey(a),c=_e(s,d),g=It(r,n);dd.setProvider(g);let l=await(0,cd.getAccount)(g.connection,c);if(l?.owner.equals(s))o=Qt(c.toBase58(),"SOLANA",i);else{let A=await g.connection.getTokenAccountsByOwner(s,{mint:d});if(A.value.length===0&&!l)o=Qt(c.toBase58(),"SOLANA",i);else if(A.value.length>0){let u=A.value[0];if(!u?.pubkey)throw new f("First token account or its public key is undefined");o=Qt(u.pubkey.toBase58(),"SOLANA",i)}else throw new f("Associated account has wrong owner")}return o}var La=class extends ke{constructor(a,r,o){super();this.web3=a;this.api=r;this.nodeRpcUrlsConfig=o}web3;api;nodeRpcUrlsConfig;chainType="EVM";async send(a){let r=await this.buildRawTransactionSend(a);return this.sendRawTransaction(r)}async buildRawTransactionSwap(a){let r=tt(this.chainType,a);return await this.buildRawTransactionSwapFromParams(r)}async buildRawTransactionSwapFromParams(a){let{amount:r,contractAddress:o,fromAccountAddress:s,fromTokenAddress:d,toAccountAddress:c,toTokenAddress:g,minimumReceiveAmount:l}=a,u=this.getBridgeContract(o).methods.swap(r,d,g,c,l);return Promise.resolve({from:s,to:o,data:u.encodeABI()})}async buildRawTransactionSend(a){let r=await Ee(this.chainType,a,this.api),{amount:o,contractAddress:s,fromAccountAddress:d,fromTokenAddress:c,toChainId:g,toAccountAddress:l,toTokenAddress:A,messenger:u,fee:m,gasFeePaymentMethod:y,extraGas:v,extraGasDest:C,abrExchangeRate:T}=r,Y="0x"+Vt().toString("hex"),h,F,G=m;v&&(G=(0,Ma.Big)(G).plus(v).toFixed());let N;if(y==="abr"){if(!T)throw new f("Cannot find 'abrExchangeRate' for ABR payment method");if(!a.sourceToken.abrPayer)throw new f("Source token must contain 'abrPayer' for ABR payment method");N=G;let k=(0,Ma.Big)(G).div(T);G=Ve(k,a.sourceToken.abrPayer.abrToken.decimals,x.getChainDecimalsByType(a.sourceToken.chainType)).toFixed()}switch(u){case 3:case 4:{let k=await this.buildRawTransactionCctpSend(a,r,G);h=k.sendMethod,F=k.value;break}case 5:{let k=this.buildRawTransactionOftSend(a,r,G,C);h=k.sendMethod,F=k.value;break}case 6:{let k=this.buildRawTransactionXReserveSend(a,r,G,C);h=k.sendMethod,F=k.value;break}case 1:case 2:{let k=this.getBridgeContract(s);switch(y){case"abr":case"native":{h=k.methods.swapAndBridge(c,o,l,g,A,Y,u,0),F=G;break}case"stablecoin":{h=k.methods.swapAndBridge(c,o,l,g,A,Y,u,G),F="0";break}default:return se(y,"Unhandled FeePaymentMethod")}}break}if(y==="abr"){if(!a.sourceToken.abrPayer)throw new f("Source token must contain 'abrPayer' for ABR payment method");let k=a.sourceToken.abrPayer.payerAddress;if(!N)throw new f("Failed to calculate totalFeeInAbr");let H=this.getAbrPayerContract(k),re="0x"+h.encodeABI().slice(10),E=u;return a.destinationToken.chainType==="SOLANA"&&(u===3&&(E=6),u===4&&(E=7)),h=H.methods.transferTokensAndCallTarget(a.sourceToken.tokenAddress,o,N,E,re),Promise.resolve({from:d,to:k,value:"0",data:h.encodeABI()})}return Promise.resolve({from:d,to:s,value:F,data:h.encodeABI()})}async buildRawTransactionCctpSend(a,r,o){let{amount:s,contractAddress:d,toChainId:c,toAccountAddress:g,gasFeePaymentMethod:l}=r,A=this.getCctpBridgeContract(d),u,m;if(a.destinationToken.chainType==="SOLANA"){let y=await Hi(this.chainType,a.toAccountAddress,a.destinationToken.tokenAddress,this.nodeRpcUrlsConfig.getNodeRpcUrl("SOL"));switch(l){case"abr":case"native":{u=A.methods.bridgeWithWalletAddress(s,y,g,c,0),m=o;break}case"stablecoin":{u=A.methods.bridgeWithWalletAddress(s,y,g,c,o),m="0";break}default:return se(l,"Unhandled FeePaymentMethod")}}else switch(l){case"abr":case"native":{u=A.methods.bridge(s,g,c,0),m=o;break}case"stablecoin":{u=A.methods.bridge(s,g,c,o),m="0";break}default:return se(l,"Unhandled FeePaymentMethod")}return{sendMethod:u,value:m}}buildRawTransactionOftSend(a,r,o,s){let{amount:d,contractAddress:c,toChainId:g,toAccountAddress:l,gasFeePaymentMethod:A}=r,u=this.getOftBridgeContract(c),m,y;switch(A){case"abr":case"native":{m=u.methods.bridge(a.sourceToken.tokenAddress,d,l,g,0,s??"0","10"),y=o;break}case"stablecoin":{m=u.methods.bridge(a.sourceToken.tokenAddress,d,l,g,o,s??"0","10"),y="0";break}default:return se(A,"Unhandled FeePaymentMethod")}return{sendMethod:m,value:y}}buildRawTransactionXReserveSend(a,r,o,s){let{amount:d,contractAddress:c,toChainId:g,toAccountAddress:l,gasFeePaymentMethod:A}=r;if(A!=="native")throw new f("xReserve bridge supports only WITH_NATIVE_CURRENCY payment method");if((0,Ma.Big)(o).gt(0)||s&&(0,Ma.Big)(s).gt(0))throw new f("xReserve bridge does not support additional bridge fee or extra gas");let u=l;if(a.destinationToken.chainType=="STX"){let{version:y,hash160:v}=(0,gd.createAddress)(a.toAccountAddress),C=Number(y).toString(16),T=Buffer.from(`${C}${v}`,"hex");u="0x"+Si(T,32).toString("hex")}return{sendMethod:this.getXReserveBridgeContract(c).methods.bridge(d,u,g),value:"0"}}async sendRawTransaction(a){let r=await this.web3.eth.estimateGas(a),o={maxPriorityFeePerGas:null,maxFeePerGas:null},{transactionHash:s}=await this.web3.eth.sendTransaction({...a,gas:r,...o});return{txId:s.toString()}}getBridgeContract(a){return new this.web3.eth.Contract(td.abi,a)}getCctpBridgeContract(a){return new this.web3.eth.Contract(nd.abi,a)}getOftBridgeContract(a){return new this.web3.eth.Contract(ad.abi,a)}getAbrPayerContract(a){return new this.web3.eth.Contract(id.abi,a)}getXReserveBridgeContract(a){return new this.web3.eth.Contract(rd.abi,a)}};var Ji=class{constructor(n,a,r,o){this.api=n;this.nodeRpcUrlsConfig=a;this.params=r;this.tokenService=o}api;nodeRpcUrlsConfig;params;tokenService;async approve(n,a){let r,o;a?(r=n,o=a):o=n;let s=xa(o.token,o.messenger,o.gasFeePaymentMethod);return this.tokenService.buildRawTransactionApprove({...o,spender:s},r)}async send(n,a){return D(n.amount),O("amount",n.amount,n.sourceToken.decimals),$s(n)?Oi(n.sourceToken.chainSymbol,this.api,this.nodeRpcUrlsConfig,this.params,a).buildRawTransactionSend(n):Oi(n.sourceToken.chainSymbol,this.api,this.nodeRpcUrlsConfig,this.params,a).buildRawTransactionSwap(n)}};var Id=require("@solana/web3.js");var ot=require("@solana/web3.js"),ld=require("big.js");var Ao=require("@solana/web3.js");async function Bn(i,n){return await Promise.all(i.message.addressTableLookups.map(async a=>new Ao.AddressLookupTableAccount({key:a.accountKey,state:Ao.AddressLookupTableAccount.deserialize(await n.getAccountInfo(a.accountKey).then(r=>{if(!r)throw new f("Cannot get AccountInfo");return r.data}))})))}var zi="AUTO";async function Jn(i,n,a){let r=new ot.Connection(a,"confirmed"),o=(await r.simulateTransaction(i)).value.unitsConsumed;await ud(i.instructions,o,n,r)}async function Ad(i,n,a){let r=new ot.Connection(a,"confirmed"),o=await Bn(i,r),s=ot.TransactionMessage.decompile(i.message,{addressLookupTableAccounts:o});if(i.serialize().length>1232)throw new Wa;await ud(s.instructions,769230,n,r),i.message=s.compileToV0Message(o)}async function ud(i,n,a,r){if(n<=0)return;let o=gl(n,i),d=po(a?.solana)?.fee;if(!d||d===zi){await uo(i,r);return}if("pricePerUnitInMicroLamports"in d){await uo(i,r,d.pricePerUnitInMicroLamports);return}let c=(0,ld.Big)(d.extraFeeInLamports).div(o).mul(Ga(6)).toFixed(0);await uo(i,r,c)}function po(i){return i?typeof i!="object"?{fee:i}:"pricePerUnitInMicroLamports"in i||"extraFeeInLamports"in i?{fee:i}:"fee"in i||"payTxFeeWithStablecoinSwap"in i?i:{}:{}}function gl(i,n){let a=n.findIndex(s=>s.programId.equals(ot.ComputeBudgetProgram.programId)&&ot.ComputeBudgetInstruction.decodeInstructionType(s)==="SetComputeUnitLimit"),r=Number((i*1.3).toFixed(0)),o=ot.ComputeBudgetProgram.setComputeUnitLimit({units:r});return a>=0?n[a]=o:n.push(o),r.toString()}async function uo(i,n,a){let r=i.findIndex(d=>d.programId.equals(ot.ComputeBudgetProgram.programId)&&ot.ComputeBudgetInstruction.decodeInstructionType(d)==="SetComputeUnitPrice"),o=BigInt(a||await ll(n)),s=ot.ComputeBudgetProgram.setComputeUnitPrice({microLamports:o});return r>=0?i[r]=s:i.push(s),o.toString()}async function ll(i){let n=await i.getRecentPrioritizationFees(),a=0;for(let r of n)a+=r.prioritizationFee;return(a/n.length).toFixed(0)}var Re=require("@coral-xyz/anchor"),Ki=require("@solana/spl-token"),te=require("@solana/web3.js");var pn={};va(pn,{accounts:()=>ml,address:()=>Al,default:()=>Cl,errors:()=>bl,instructions:()=>pl,metadata:()=>ul,types:()=>yl});var Al="EmLt85sXNvqjzZo3C6BCq55ZzSuvSNFomVnf6b1PgY8R",ul={name:"bridge",version:"0.1.0",spec:"0.1.0",description:"Created with Anchor"},pl=[{name:"add_other_bridge_token",discriminator:[103,180,1,186,219,156,185,114],accounts:[{name:"admin",signer:!0},{name:"payer",writable:!0,signer:!0},{name:"config",pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]}]}},{name:"other_bridge_token",writable:!0},{name:"system_program",address:"11111111111111111111111111111111"}],args:[{name:"_chain_id",type:"u8"},{name:"_token_address",type:{array:["u8",32]}}]},{name:"adjust_total_lp_amount",discriminator:[8,190,6,31,121,124,62,241],accounts:[{name:"admin",signer:!0},{name:"mint"},{name:"config",pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]}]}},{name:"pool",writable:!0,pda:{seeds:[{kind:"const",value:[112,111,111,108]},{kind:"account",path:"mint"}]}},{name:"bridge_token",writable:!0,pda:{seeds:[{kind:"const",value:[116,111,107,101,110]},{kind:"account",path:"mint"}]}},{name:"user_token",writable:!0},{name:"user_deposit",writable:!0,pda:{seeds:[{kind:"const",value:[117,115,101,114,95,100,101,112,111,115,105,116]},{kind:"account",path:"mint"},{kind:"account",path:"admin"}]}},{name:"bridge_authority",pda:{seeds:[{kind:"account",path:"config"}]}},{name:"token_program",address:"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"}],args:[]},{name:"claim_rewards",discriminator:[4,144,132,71,116,23,151,80],accounts:[{name:"user",writable:!0,signer:!0},{name:"mint"},{name:"config",pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]}]}},{name:"pool",writable:!0,pda:{seeds:[{kind:"const",value:[112,111,111,108]},{kind:"account",path:"mint"}]}},{name:"bridge_token",writable:!0,pda:{seeds:[{kind:"const",value:[116,111,107,101,110]},{kind:"account",path:"mint"}]}},{name:"user_token",writable:!0},{name:"user_deposit",writable:!0,pda:{seeds:[{kind:"const",value:[117,115,101,114,95,100,101,112,111,115,105,116]},{kind:"account",path:"mint"},{kind:"account",path:"user"}]}},{name:"bridge_authority",pda:{seeds:[{kind:"account",path:"config"}]}},{name:"token_program",address:"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"},{name:"system_program",address:"11111111111111111111111111111111"}],args:[]},{name:"deposit",discriminator:[242,35,198,137,82,225,242,182],accounts:[{name:"user",writable:!0,signer:!0},{name:"mint"},{name:"config",pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]}]}},{name:"pool",writable:!0,pda:{seeds:[{kind:"const",value:[112,111,111,108]},{kind:"account",path:"mint"}]}},{name:"bridge_token",writable:!0,pda:{seeds:[{kind:"const",value:[116,111,107,101,110]},{kind:"account",path:"mint"}]}},{name:"user_token",writable:!0},{name:"user_deposit",writable:!0,pda:{seeds:[{kind:"const",value:[117,115,101,114,95,100,101,112,111,115,105,116]},{kind:"account",path:"mint"},{kind:"account",path:"user"}]}},{name:"bridge_authority",pda:{seeds:[{kind:"account",path:"config"}]}},{name:"token_program",address:"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"},{name:"system_program",address:"11111111111111111111111111111111"}],args:[{name:"amount",type:"u64"}]},{name:"init_deposit_account",discriminator:[136,79,202,206,211,146,182,158],accounts:[{name:"user",writable:!0,signer:!0},{name:"payer",writable:!0,signer:!0},{name:"mint"},{name:"user_deposit",writable:!0,pda:{seeds:[{kind:"const",value:[117,115,101,114,95,100,101,112,111,115,105,116]},{kind:"account",path:"mint"},{kind:"account",path:"user"}]}},{name:"system_program",address:"11111111111111111111111111111111"}],args:[]},{name:"initialize",discriminator:[175,175,109,31,13,152,155,237],accounts:[{name:"admin",writable:!0,signer:!0},{name:"config",writable:!0,pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]}]}},{name:"system_program",address:"11111111111111111111111111111111"}],args:[{name:"args",type:{defined:{name:"InitializeArgs"}}}]},{name:"initialize_pool",discriminator:[95,180,10,172,84,174,232,40],accounts:[{name:"payer",writable:!0,signer:!0},{name:"admin",signer:!0},{name:"config",pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]}]}},{name:"pool",writable:!0,pda:{seeds:[{kind:"const",value:[112,111,111,108]},{kind:"account",path:"mint"}]}},{name:"bridge_authority",pda:{seeds:[{kind:"account",path:"config"}]}},{name:"mint"},{name:"token",writable:!0,pda:{seeds:[{kind:"const",value:[116,111,107,101,110]},{kind:"account",path:"mint"}]}},{name:"token_program",address:"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"},{name:"system_program",address:"11111111111111111111111111111111"},{name:"rent",address:"SysvarRent111111111111111111111111111111111"}],args:[{name:"args",type:{defined:{name:"InitializePoolArgs"}}}]},{name:"receive_and_swap",discriminator:[49,243,231,17,38,214,140,225],accounts:[{name:"user",writable:!0},{name:"payer",writable:!0,signer:!0},{name:"mint"},{name:"config",pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]}]}},{name:"pool",writable:!0,pda:{seeds:[{kind:"const",value:[112,111,111,108]},{kind:"account",path:"mint"}]}},{name:"bridge_token",writable:!0,pda:{seeds:[{kind:"const",value:[116,111,107,101,110]},{kind:"account",path:"mint"}]}},{name:"received_message_account"},{name:"unlock",writable:!0,pda:{seeds:[{kind:"const",value:[117,110,108,111,99,107]},{kind:"arg",path:"args.hash"}]}},{name:"chain_bridge"},{name:"user_token",writable:!0},{name:"bridge_authority",pda:{seeds:[{kind:"account",path:"config"}]}},{name:"token_program",address:"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"},{name:"system_program",address:"11111111111111111111111111111111"},{name:"messenger_program"}],args:[{name:"args",type:{defined:{name:"UnlockArgs"}}}]},{name:"receive_and_swap_wormhole",discriminator:[53,141,209,156,114,7,54,229],accounts:[{name:"user",writable:!0},{name:"payer",writable:!0,signer:!0},{name:"mint"},{name:"config",pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]}]}},{name:"pool",writable:!0,pda:{seeds:[{kind:"const",value:[112,111,111,108]},{kind:"account",path:"mint"}]}},{name:"bridge_token",writable:!0,pda:{seeds:[{kind:"const",value:[116,111,107,101,110]},{kind:"account",path:"mint"}]}},{name:"received_message_account"},{name:"unlock",writable:!0,pda:{seeds:[{kind:"const",value:[117,110,108,111,99,107]},{kind:"arg",path:"args.hash"}]}},{name:"chain_bridge"},{name:"user_token",writable:!0},{name:"bridge_authority",pda:{seeds:[{kind:"account",path:"config"}]}},{name:"token_program",address:"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"},{name:"system_program",address:"11111111111111111111111111111111"},{name:"messenger_program"}],args:[{name:"args",type:{defined:{name:"UnlockArgs"}}}]},{name:"register_chain_bridge",discriminator:[239,66,180,165,175,10,49,233],accounts:[{name:"admin",signer:!0},{name:"payer",writable:!0,signer:!0},{name:"config",pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]}]}},{name:"chain_bridge",writable:!0},{name:"system_program",address:"11111111111111111111111111111111"}],args:[{name:"args",type:{defined:{name:"RegisterChainBridgeArgs"}}}]},{name:"remove_other_bridge_token",discriminator:[149,232,199,145,241,219,24,154],accounts:[{name:"admin",signer:!0},{name:"payer",writable:!0,signer:!0},{name:"config",writable:!0,pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]}]}},{name:"other_bridge_token",writable:!0},{name:"system_program",address:"11111111111111111111111111111111"}],args:[{name:"_chain_id",type:"u8"},{name:"_token_address",type:{array:["u8",32]}}]},{name:"set_admin",discriminator:[251,163,0,52,91,194,187,92],accounts:[{name:"admin",signer:!0},{name:"new_admin"},{name:"config",writable:!0,pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]}]}}],args:[]},{name:"set_allbridge_messenger_program_id",discriminator:[168,21,145,139,97,252,84,77],accounts:[{name:"admin",signer:!0},{name:"config",writable:!0,pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]}]}}],args:[{name:"new_program_id",type:"pubkey"}]},{name:"set_balance_ratio_min",discriminator:[210,171,132,168,93,237,9,201],accounts:[{name:"admin",signer:!0},{name:"config",pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]}]}},{name:"pool",writable:!0}],args:[{name:"balance_ratio_min_bp",type:"u16"}]},{name:"set_gas_oracle_program_id",discriminator:[172,152,29,206,112,239,205,83],accounts:[{name:"admin",signer:!0},{name:"config",writable:!0,pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]}]}}],args:[{name:"new_program_id",type:"pubkey"}]},{name:"set_pool_admin_fee_share",discriminator:[235,219,45,195,124,82,164,230],accounts:[{name:"admin",signer:!0},{name:"config",pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]}]}},{name:"pool",writable:!0}],args:[{name:"fee_share_bp",type:"u64"}]},{name:"set_pool_fee_share",discriminator:[151,35,220,215,38,227,226,9],accounts:[{name:"admin",signer:!0},{name:"config",pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]}]}},{name:"pool",writable:!0}],args:[{name:"fee_share_bp",type:"u64"}]},{name:"set_rebalancer",discriminator:[28,161,168,250,215,4,144,154],accounts:[{name:"admin",signer:!0},{name:"config",writable:!0,pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]}]}},{name:"rebalancer"}],args:[]},{name:"set_stop_authority",discriminator:[238,229,235,32,221,191,227,43],accounts:[{name:"admin",signer:!0},{name:"new_authority"},{name:"config",writable:!0,pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]}]}}],args:[]},{name:"set_wormhole_messenger_program_id",discriminator:[215,127,198,117,43,17,36,24],accounts:[{name:"admin",signer:!0},{name:"config",writable:!0,pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]}]}}],args:[{name:"new_program_id",type:"pubkey"}]},{name:"start_bridge",discriminator:[213,146,40,152,47,121,85,18],accounts:[{name:"admin",signer:!0},{name:"config",writable:!0,pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]}]}}],args:[{name:"action_type",type:{defined:{name:"ActionType"}}}]},{name:"stop_bridge",discriminator:[187,52,235,53,245,59,218,1],accounts:[{name:"stop_authority",signer:!0},{name:"config",writable:!0,pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]}]}}],args:[{name:"action_type",type:{defined:{name:"ActionType"}}}]},{name:"swap",discriminator:[248,198,158,145,225,117,135,200],accounts:[{name:"user",writable:!0,signer:!0},{name:"payer",writable:!0,signer:!0},{name:"send_mint"},{name:"receive_mint"},{name:"config",writable:!0,pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]}]}},{name:"send_pool",writable:!0,pda:{seeds:[{kind:"const",value:[112,111,111,108]},{kind:"account",path:"send_mint"}]}},{name:"receive_pool",writable:!0,pda:{seeds:[{kind:"const",value:[112,111,111,108]},{kind:"account",path:"receive_mint"}]}},{name:"send_bridge_token",writable:!0,pda:{seeds:[{kind:"const",value:[116,111,107,101,110]},{kind:"account",path:"send_mint"}]}},{name:"receive_bridge_token",writable:!0,pda:{seeds:[{kind:"const",value:[116,111,107,101,110]},{kind:"account",path:"receive_mint"}]}},{name:"send_user_token",writable:!0},{name:"receive_user_token",writable:!0},{name:"bridge_authority",pda:{seeds:[{kind:"account",path:"config"}]}},{name:"token_program",address:"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"}],args:[{name:"amount",type:"u64"},{name:"receive_amount_min",type:"u64"}]},{name:"swap_and_bridge",discriminator:[204,63,169,171,186,125,86,159],accounts:[{name:"user",writable:!0,signer:!0},{name:"payer",writable:!0,signer:!0},{name:"lock",writable:!0,pda:{seeds:[{kind:"const",value:[108,111,99,107]},{kind:"arg",path:"args.nonce"}]}},{name:"mint"},{name:"config",writable:!0,pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]}]}},{name:"other_bridge_token",writable:!0},{name:"messenger"},{name:"messenger_config",writable:!0},{name:"sent_message_account",writable:!0},{name:"messenger_gas_usage"},{name:"pool",writable:!0,pda:{seeds:[{kind:"const",value:[112,111,111,108]},{kind:"account",path:"mint"}]}},{name:"bridge_token",writable:!0,pda:{seeds:[{kind:"const",value:[116,111,107,101,110]},{kind:"account",path:"mint"}]}},{name:"gas_price"},{name:"this_gas_price"},{name:"chain_bridge"},{name:"user_token",writable:!0},{name:"bridge_authority",pda:{seeds:[{kind:"account",path:"config"}]}},{name:"token_program",address:"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"},{name:"system_program",address:"11111111111111111111111111111111"}],args:[{name:"args",type:{defined:{name:"BridgeArgs"}}}]},{name:"swap_and_bridge_wormhole",discriminator:[41,91,201,180,150,117,154,65],accounts:[{name:"user",signer:!0},{name:"payer",writable:!0,signer:!0},{name:"lock",writable:!0,pda:{seeds:[{kind:"const",value:[108,111,99,107]},{kind:"arg",path:"args.nonce"}]}},{name:"mint"},{name:"config",writable:!0,pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]}]}},{name:"other_bridge_token",writable:!0},{name:"pool",writable:!0,pda:{seeds:[{kind:"const",value:[112,111,111,108]},{kind:"account",path:"mint"}]}},{name:"bridge_token",writable:!0,pda:{seeds:[{kind:"const",value:[116,111,107,101,110]},{kind:"account",path:"mint"}]}},{name:"gas_price"},{name:"this_gas_price"},{name:"chain_bridge"},{name:"user_token",writable:!0},{name:"bridge_authority",pda:{seeds:[{kind:"account",path:"config"}]}},{name:"wormhole_messenger"},{name:"wormhole_messenger_config",writable:!0},{name:"wormhole_program"},{name:"bridge",writable:!0},{name:"message",writable:!0,signer:!0},{name:"sequence",writable:!0},{name:"fee_collector",writable:!0},{name:"messenger_gas_usage"},{name:"clock",address:"SysvarC1ock11111111111111111111111111111111"},{name:"rent",address:"SysvarRent111111111111111111111111111111111"},{name:"token_program",address:"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"},{name:"system_program",address:"11111111111111111111111111111111"}],args:[{name:"args",type:{defined:{name:"BridgeArgs"}}}]},{name:"update_chain_bridge",discriminator:[227,4,133,105,230,88,226,173],accounts:[{name:"admin",signer:!0},{name:"config",pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]}]}},{name:"chain_bridge",writable:!0}],args:[{name:"args",type:{defined:{name:"UpdateChainBridgeArgs"}}}]},{name:"withdraw",discriminator:[183,18,70,156,148,109,161,34],accounts:[{name:"user",writable:!0,signer:!0},{name:"mint"},{name:"config",pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]}]}},{name:"pool",writable:!0,pda:{seeds:[{kind:"const",value:[112,111,111,108]},{kind:"account",path:"mint"}]}},{name:"bridge_token",writable:!0,pda:{seeds:[{kind:"const",value:[116,111,107,101,110]},{kind:"account",path:"mint"}]}},{name:"user_token",writable:!0},{name:"user_deposit",writable:!0,pda:{seeds:[{kind:"const",value:[117,115,101,114,95,100,101,112,111,115,105,116]},{kind:"account",path:"mint"},{kind:"account",path:"user"}]}},{name:"bridge_authority",pda:{seeds:[{kind:"account",path:"config"}]}},{name:"token_program",address:"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"},{name:"system_program",address:"11111111111111111111111111111111"}],args:[{name:"amount_lp",type:"u64"}]},{name:"withdraw_admin_fee",discriminator:[176,135,230,197,163,130,60,252],accounts:[{name:"admin",signer:!0},{name:"mint"},{name:"config",pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]}]}},{name:"pool",writable:!0,pda:{seeds:[{kind:"const",value:[112,111,111,108]},{kind:"account",path:"mint"}]}},{name:"bridge_token",writable:!0,pda:{seeds:[{kind:"const",value:[116,111,107,101,110]},{kind:"account",path:"mint"}]}},{name:"admin_token",writable:!0},{name:"bridge_authority",pda:{seeds:[{kind:"account",path:"config"}]}},{name:"token_program",address:"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"},{name:"system_program",address:"11111111111111111111111111111111"}],args:[]},{name:"withdraw_gas_token",discriminator:[109,117,140,223,117,175,2,139],accounts:[{name:"admin",signer:!0},{name:"recipient",writable:!0},{name:"config",writable:!0,pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]}]}}],args:[{name:"amount",type:"u64"}]}],ml=[{name:"ChainBridge",discriminator:[25,216,147,218,140,42,98,49]},{name:"Config",discriminator:[155,12,170,224,30,250,204,130]},{name:"Lock",discriminator:[8,255,36,202,210,22,57,137]},{name:"OtherBridgeToken",discriminator:[27,112,167,155,2,141,52,167]},{name:"Pool",discriminator:[241,154,109,4,17,177,109,188]},{name:"Price",discriminator:[50,107,127,61,83,36,39,75]},{name:"Unlock",discriminator:[187,122,21,254,7,157,241,10]},{name:"UserDeposit",discriminator:[69,238,23,217,255,137,185,35]}],bl=[{code:6e3,name:"AccountAlreadyInitialized",msg:"This account has already been initialized"},{code:6001,name:"AdminAuthorityInvalid",msg:"This instruction requires admin authority"},{code:6002,name:"InvalidSignature",msg:"Provided signature has wrong signer or message"},{code:6003,name:"InvalidHash",msg:"Wrong unlock message hash"},{code:6004,name:"PoolOverflow",msg:"Pool overflow"},{code:6005,name:"ReservesExhausted",msg:"Reserves exhausted"},{code:6006,name:"ZeroAmount",msg:"Zero amount"},{code:6007,name:"ZeroChanges",msg:"Zero changes"},{code:6008,name:"HighVusdAmount",msg:"vUSD amount is too high"},{code:6009,name:"BalanceRatioExceeded",msg:"Balance ratio exceeded"},{code:6010,name:"InsufficientReceivedAmount",msg:"Received insufficient amount"},{code:6011,name:"ForbiddenAction",msg:"ForbiddenAction"},{code:6012,name:"ValueTooHigh",msg:"Value is too high"},{code:6013,name:"EmptyRecipient",msg:"Empty recipient"}],yl=[{name:"ActionType",type:{kind:"enum",variants:[{name:"Deposit"},{name:"Withdraw"},{name:"Swap"}]}},{name:"BridgeArgs",type:{kind:"struct",fields:[{name:"nonce",type:{array:["u8",32]}},{name:"recipient",type:{array:["u8",32]}},{name:"destination_chain_id",type:"u8"},{name:"receive_token",type:{array:["u8",32]}},{name:"vusd_amount",type:"u64"}]}},{name:"ChainBridge",type:{kind:"struct",fields:[{name:"address",type:{array:["u8",32]}},{name:"chain_id",type:"u8"},{name:"gas_usage",type:"u64"}]}},{name:"Config",type:{kind:"struct",fields:[{name:"admin",type:"pubkey"},{name:"allbridge_messenger_program_id",type:"pubkey"},{name:"wormhole_messenger_program_id",type:"pubkey"},{name:"gas_oracle_program_id",type:"pubkey"},{name:"rebalancer",type:"pubkey"},{name:"stop_authority",type:"pubkey"},{name:"authority_bump_seed",type:"u8"},{name:"can_swap",type:"bool"},{name:"can_deposit",type:"bool"},{name:"can_withdraw",type:"bool"}]}},{name:"InitializeArgs",type:{kind:"struct",fields:[{name:"allbridge_messenger_program_id",type:"pubkey"},{name:"wormhole_messenger_program_id",type:"pubkey"},{name:"gas_oracle_program_id",type:"pubkey"}]}},{name:"InitializePoolArgs",type:{kind:"struct",fields:[{name:"a",type:"u64"},{name:"fee_share_bp",type:"u64"},{name:"admin_fee_share_bp",type:"u64"},{name:"balance_ratio_min_bp",type:"u16"}]}},{name:"Lock",type:{kind:"struct",fields:[{name:"sender",type:"pubkey"},{name:"sent_token_address",type:"pubkey"},{name:"amount",type:"u64"},{name:"vusd_amount",type:"u64"},{name:"recipient",type:{array:["u8",32]}},{name:"destination_chain_id",type:"u8"},{name:"receive_token",type:{array:["u8",32]}},{name:"nonce",type:{array:["u8",32]}},{name:"messenger",type:{defined:{name:"Messenger"}}},{name:"slot",type:"u64"},{name:"fee",type:"u64"}]}},{name:"Messenger",type:{kind:"enum",variants:[{name:"None"},{name:"Allbridge"},{name:"Wormhole"}]}},{name:"OtherBridgeToken",type:{kind:"struct",fields:[]}},{name:"Pool",type:{kind:"struct",fields:[{name:"mint",type:"pubkey"},{name:"a",type:"u64"},{name:"d",type:"u64"},{name:"token_balance",type:"u64"},{name:"v_usd_balance",type:"u64"},{name:"reserves",type:"u64"},{name:"decimals",type:"u8"},{name:"total_lp_amount",type:"u64"},{name:"fee_share_bp",type:"u64"},{name:"admin_fee_share_bp",type:"u64"},{name:"acc_reward_per_share_p",type:"u128"},{name:"admin_fee_amount",type:"u64"},{name:"balance_ratio_min_bp",type:"u16"}]}},{name:"Price",type:{kind:"struct",fields:[{name:"chain_id",type:"u8"},{name:"price",type:"u64"},{name:"gas_price",type:"u64"}]}},{name:"RegisterChainBridgeArgs",type:{kind:"struct",fields:[{name:"chain_bridge_address",type:{array:["u8",32]}},{name:"chain_id",type:"u8"},{name:"gas_usage",type:"u64"}]}},{name:"Unlock",type:{kind:"struct",fields:[{name:"hash",type:{array:["u8",32]}},{name:"amount",type:"u64"},{name:"fee",type:"u64"},{name:"v_usd_amount",type:"u64"},{name:"slot",type:"u64"}]}},{name:"UnlockArgs",type:{kind:"struct",fields:[{name:"nonce",type:{array:["u8",32]}},{name:"amount",type:"u64"},{name:"recipient",type:"pubkey"},{name:"source_chain_id",type:"u8"},{name:"receive_token",type:"pubkey"},{name:"messenger",type:{defined:{name:"Messenger"}}},{name:"hash",type:{array:["u8",32]}},{name:"receive_amount_min",type:"u64"}]}},{name:"UpdateChainBridgeArgs",type:{kind:"struct",fields:[{name:"chain_bridge_address",type:{array:["u8",32]}},{name:"chain_id",type:"u8"},{name:"gas_usage",type:"u64"}]}},{name:"UserDeposit",type:{kind:"struct",fields:[{name:"user_address",type:"pubkey"},{name:"mint",type:"pubkey"},{name:"lp_amount",type:"u64"},{name:"reward_debt",type:"u64"}]}}],Cl={address:Al,metadata:ul,instructions:pl,accounts:ml,errors:bl,types:yl};var mo={};va(mo,{accounts:()=>fl,address:()=>Il,default:()=>Bl,errors:()=>Rl,instructions:()=>vl,metadata:()=>hl,types:()=>Tl});var Il="XHXBA5WK4PTaLjjVfhPLttXwjeiq18yLdPsBL42YKaY",hl={name:"cctp_bridge",version:"0.1.0",spec:"0.1.0",description:"Created with Anchor"},vl=[{name:"bridge",discriminator:[174,41,120,146,98,218,169,25],accounts:[{name:"user",writable:!0,signer:!0},{name:"payer",writable:!0,signer:!0},{name:"message_sent_event_data",writable:!0,signer:!0},{name:"lock",writable:!0,pda:{seeds:[{kind:"const",value:[108,111,99,107]},{kind:"account",path:"message_sent_event_data"}]}},{name:"mint",writable:!0},{name:"cctp_bridge",writable:!0,pda:{seeds:[{kind:"const",value:[99,99,116,112,95,98,114,105,100,103,101]},{kind:"account",path:"mint"}]}},{name:"cctp_messenger"},{name:"message_transmitter_program"},{name:"message_transmitter_account",writable:!0},{name:"token_messenger"},{name:"token_minter"},{name:"local_token",writable:!0},{name:"remote_token_messenger_key"},{name:"authority_pda"},{name:"event_authority"},{name:"bridge_token",writable:!0,pda:{seeds:[{kind:"const",value:[116,111,107,101,110]},{kind:"account",path:"mint"}]}},{name:"gas_price"},{name:"this_gas_price"},{name:"chain_bridge"},{name:"user_token",writable:!0},{name:"bridge_authority",pda:{seeds:[{kind:"account",path:"cctp_bridge"}]}},{name:"token_program",address:"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"},{name:"system_program",address:"11111111111111111111111111111111"}],args:[{name:"args",type:{defined:{name:"BridgeArgs"}}}]},{name:"initialize",discriminator:[175,175,109,31,13,152,155,237],accounts:[{name:"payer",writable:!0,signer:!0},{name:"admin",writable:!0,signer:!0},{name:"mint"},{name:"cctp_bridge",writable:!0,pda:{seeds:[{kind:"const",value:[99,99,116,112,95,98,114,105,100,103,101]},{kind:"account",path:"mint"}]}},{name:"bridge_authority",pda:{seeds:[{kind:"account",path:"cctp_bridge"}]}},{name:"bridge_token",writable:!0,pda:{seeds:[{kind:"const",value:[116,111,107,101,110]},{kind:"account",path:"mint"}]}},{name:"system_program",address:"11111111111111111111111111111111"},{name:"token_program",address:"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"},{name:"rent",address:"SysvarRent111111111111111111111111111111111"}],args:[{name:"args",type:{defined:{name:"InitializeArgs"}}}]},{name:"register_chain_bridge",discriminator:[239,66,180,165,175,10,49,233],accounts:[{name:"admin",signer:!0},{name:"payer",writable:!0,signer:!0},{name:"cctp_bridge",pda:{seeds:[{kind:"const",value:[99,99,116,112,95,98,114,105,100,103,101]},{kind:"arg",path:"args.mint"}]}},{name:"chain_bridge",writable:!0},{name:"system_program",address:"11111111111111111111111111111111"}],args:[{name:"args",type:{defined:{name:"RegisterChainBridgeArgs"}}}]},{name:"set_admin",discriminator:[251,163,0,52,91,194,187,92],accounts:[{name:"admin",signer:!0},{name:"mint"},{name:"new_admin"},{name:"cctp_bridge",writable:!0,pda:{seeds:[{kind:"const",value:[99,99,116,112,95,98,114,105,100,103,101]},{kind:"account",path:"mint"}]}}],args:[]},{name:"set_admin_fee_share",discriminator:[34,2,1,74,101,120,39,19],accounts:[{name:"admin",signer:!0},{name:"mint"},{name:"cctp_bridge",writable:!0,pda:{seeds:[{kind:"const",value:[99,99,116,112,95,98,114,105,100,103,101]},{kind:"account",path:"mint"}]}}],args:[{name:"fee_share_bp",type:"u64"}]},{name:"set_cctp_token_messenger_minter",discriminator:[7,23,157,231,197,83,45,203],accounts:[{name:"admin",signer:!0},{name:"mint"},{name:"cctp_bridge",writable:!0,pda:{seeds:[{kind:"const",value:[99,99,116,112,95,98,114,105,100,103,101]},{kind:"account",path:"mint"}]}}],args:[{name:"new_program_id",type:"pubkey"}]},{name:"set_gas_oracle_program_id",discriminator:[172,152,29,206,112,239,205,83],accounts:[{name:"admin",signer:!0},{name:"mint"},{name:"cctp_bridge",writable:!0,pda:{seeds:[{kind:"const",value:[99,99,116,112,95,98,114,105,100,103,101]},{kind:"account",path:"mint"}]}}],args:[{name:"new_program_id",type:"pubkey"}]},{name:"update_chain_bridge",discriminator:[227,4,133,105,230,88,226,173],accounts:[{name:"admin",signer:!0},{name:"cctp_bridge",pda:{seeds:[{kind:"const",value:[99,99,116,112,95,98,114,105,100,103,101]},{kind:"arg",path:"args.mint"}]}},{name:"chain_bridge",writable:!0}],args:[{name:"args",type:{defined:{name:"UpdateChainBridgeArgs"}}}]},{name:"withdraw_admin_fee",discriminator:[176,135,230,197,163,130,60,252],accounts:[{name:"admin",signer:!0},{name:"mint"},{name:"cctp_bridge",writable:!0,pda:{seeds:[{kind:"const",value:[99,99,116,112,95,98,114,105,100,103,101]},{kind:"account",path:"mint"}]}},{name:"bridge_token",writable:!0,pda:{seeds:[{kind:"const",value:[116,111,107,101,110]},{kind:"account",path:"mint"}]}},{name:"admin_token",writable:!0},{name:"bridge_authority",pda:{seeds:[{kind:"account",path:"cctp_bridge"}]}},{name:"token_program",address:"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"},{name:"system_program",address:"11111111111111111111111111111111"}],args:[]},{name:"withdraw_gas_token",discriminator:[109,117,140,223,117,175,2,139],accounts:[{name:"admin",signer:!0},{name:"recipient",writable:!0},{name:"mint"},{name:"cctp_bridge",writable:!0,pda:{seeds:[{kind:"const",value:[99,99,116,112,95,98,114,105,100,103,101]},{kind:"account",path:"mint"}]}}],args:[{name:"amount",type:"u64"}]}],fl=[{name:"CctpBridge",discriminator:[164,2,216,77,99,83,161,159]},{name:"ChainBridge",discriminator:[25,216,147,218,140,42,98,49]},{name:"Lock",discriminator:[8,255,36,202,210,22,57,137]},{name:"Price",discriminator:[50,107,127,61,83,36,39,75]}],Rl=[{code:6e3,name:"ValueTooHigh",msg:"Value is too high"}],Tl=[{name:"BridgeArgs",type:{kind:"struct",fields:[{name:"recipient",type:{array:["u8",32]}},{name:"destination_chain_id",type:"u8"},{name:"receive_token",type:{array:["u8",32]}},{name:"amount",type:"u64"}]}},{name:"CctpBridge",type:{kind:"struct",fields:[{name:"mint",type:"pubkey"},{name:"admin",type:"pubkey"},{name:"cctp_token_messenger_minter",type:"pubkey"},{name:"gas_oracle_program_id",type:"pubkey"},{name:"authority_bump_seed",type:"u8"},{name:"admin_fee_share_bp",type:"u64"},{name:"admin_fee_amount",type:"u64"}]}},{name:"ChainBridge",type:{kind:"struct",fields:[{name:"chain_id",type:"u8"},{name:"gas_usage",type:"u64"},{name:"domain",type:"u32"}]}},{name:"InitializeArgs",type:{kind:"struct",fields:[{name:"gas_oracle_program_id",type:"pubkey"},{name:"cctp_token_messenger_minter",type:"pubkey"},{name:"admin_fee_share_bp",type:"u64"}]}},{name:"Lock",type:{kind:"struct",fields:[{name:"sender",type:"pubkey"},{name:"amount",type:"u64"},{name:"admin_fee",type:"u64"},{name:"relayer_fee",type:"u64"},{name:"recipient",type:{array:["u8",32]}},{name:"destination_chain_id",type:"u8"},{name:"slot",type:"u64"}]}},{name:"Price",type:{kind:"struct",fields:[{name:"chain_id",type:"u8"},{name:"price",type:"u64"},{name:"gas_price",type:"u64"}]}},{name:"RegisterChainBridgeArgs",type:{kind:"struct",fields:[{name:"chain_id",type:"u8"},{name:"gas_usage",type:"u64"},{name:"domain",type:"u32"},{name:"mint",type:"pubkey"}]}},{name:"UpdateChainBridgeArgs",type:{kind:"struct",fields:[{name:"chain_id",type:"u8"},{name:"gas_usage",type:"u64"},{name:"domain",type:"u32"},{name:"mint",type:"pubkey"}]}}],Bl={address:Il,metadata:hl,instructions:vl,accounts:fl,errors:Rl,types:Tl};var bo={};va(bo,{accounts:()=>Nl,address:()=>Yl,default:()=>Zl,errors:()=>Fl,instructions:()=>Wl,metadata:()=>wl,types:()=>Gl});var Yl="jUK1TcugDebbLdEdxzZqrChtFGbnR8Sigkqdw4QdRSJ",wl={name:"cctp_v2_bridge",version:"0.1.0",spec:"0.1.0",description:"Created with Anchor"},Wl=[{name:"bridge",discriminator:[174,41,120,146,98,218,169,25],accounts:[{name:"user",writable:!0,signer:!0},{name:"payer",writable:!0,signer:!0},{name:"message_sent_event_data",writable:!0,signer:!0},{name:"lock",writable:!0,pda:{seeds:[{kind:"const",value:[108,111,99,107]},{kind:"account",path:"message_sent_event_data"}]}},{name:"mint",writable:!0},{name:"config",writable:!0,pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]},{kind:"account",path:"mint"}]}},{name:"token_messenger_minter_program"},{name:"message_transmitter_program"},{name:"message_transmitter_account",writable:!0},{name:"token_messenger"},{name:"token_minter"},{name:"local_token",writable:!0},{name:"remote_token_messenger"},{name:"authority_pda"},{name:"denylist_account",pda:{seeds:[{kind:"const",value:[100,101,110,121,108,105,115,116,95,97,99,99,111,117,110,116]},{kind:"account",path:"user"}],program:{kind:"account",path:"token_messenger_minter_program"}}},{name:"event_authority"},{name:"bridge_token",writable:!0,pda:{seeds:[{kind:"const",value:[116,111,107,101,110]},{kind:"account",path:"mint"}]}},{name:"gas_price"},{name:"this_gas_price"},{name:"chain_bridge"},{name:"user_token",writable:!0},{name:"bridge_authority",pda:{seeds:[{kind:"account",path:"config"}]}},{name:"token_program",address:"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"},{name:"system_program",address:"11111111111111111111111111111111"}],args:[{name:"args",type:{defined:{name:"BridgeArgs"}}}]},{name:"initialize",discriminator:[175,175,109,31,13,152,155,237],accounts:[{name:"payer",writable:!0,signer:!0},{name:"admin",writable:!0,signer:!0},{name:"mint"},{name:"config",writable:!0,pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]},{kind:"account",path:"mint"}]}},{name:"bridge_authority",pda:{seeds:[{kind:"account",path:"config"}]}},{name:"bridge_token",writable:!0,pda:{seeds:[{kind:"const",value:[116,111,107,101,110]},{kind:"account",path:"mint"}]}},{name:"system_program",address:"11111111111111111111111111111111"},{name:"token_program",address:"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"},{name:"rent",address:"SysvarRent111111111111111111111111111111111"}],args:[{name:"args",type:{defined:{name:"InitializeArgs"}}}]},{name:"receive_tokens",discriminator:[229,73,222,185,57,227,213,67],accounts:[{name:"payer",writable:!0,signer:!0},{name:"mint",writable:!0},{name:"config",writable:!0,pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]},{kind:"account",path:"mint"}]}},{name:"bridge_authority",pda:{seeds:[{kind:"account",path:"config"}]}},{name:"recipient",writable:!0},{name:"message_transmitter_program"},{name:"authority_pda"},{name:"message_transmitter_account"},{name:"used_nonce",writable:!0},{name:"token_messenger_minter_program"},{name:"message_transmitter_event_authority"},{name:"token_messenger"},{name:"remote_token_messenger"},{name:"token_minter"},{name:"local_token",writable:!0},{name:"token_pair"},{name:"fee_recipient_token_account",writable:!0},{name:"recipient_token_account",writable:!0,pda:{seeds:[{kind:"account",path:"recipient"},{kind:"const",value:[6,221,246,225,215,101,161,147,217,203,225,70,206,235,121,172,28,180,133,237,95,91,55,145,58,140,245,133,126,255,0,169]},{kind:"account",path:"mint"}],program:{kind:"const",value:[140,151,37,143,78,36,137,241,187,61,16,41,20,142,13,131,11,90,19,153,218,255,16,132,4,142,123,216,219,233,248,89]}}},{name:"custody_token_account",writable:!0},{name:"token_messenger_event_authority"},{name:"token_program",address:"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"},{name:"system_program",address:"11111111111111111111111111111111"}],args:[{name:"args",type:{defined:{name:"ReceiveTokensArgs"}}}]},{name:"register_chain_bridge",discriminator:[239,66,180,165,175,10,49,233],accounts:[{name:"admin",signer:!0},{name:"payer",writable:!0,signer:!0},{name:"config",pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]},{kind:"arg",path:"args.mint"}]}},{name:"chain_bridge",writable:!0},{name:"system_program",address:"11111111111111111111111111111111"}],args:[{name:"args",type:{defined:{name:"RegisterChainBridgeArgs"}}}]},{name:"set_admin",discriminator:[251,163,0,52,91,194,187,92],accounts:[{name:"admin",signer:!0},{name:"mint"},{name:"new_admin"},{name:"config",writable:!0,pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]},{kind:"account",path:"mint"}]}}],args:[]},{name:"set_admin_fee_share",discriminator:[34,2,1,74,101,120,39,19],accounts:[{name:"admin",signer:!0},{name:"mint"},{name:"config",writable:!0,pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]},{kind:"account",path:"mint"}]}}],args:[{name:"fee_share_bp",type:"u64"}]},{name:"set_gas_oracle_program_id",discriminator:[172,152,29,206,112,239,205,83],accounts:[{name:"admin",signer:!0},{name:"mint"},{name:"config",writable:!0,pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]},{kind:"account",path:"mint"}]}}],args:[{name:"new_program_id",type:"pubkey"}]},{name:"set_max_fee_share",discriminator:[120,202,93,18,32,173,77,155],accounts:[{name:"admin",signer:!0},{name:"mint"},{name:"config",writable:!0,pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]},{kind:"account",path:"mint"}]}}],args:[{name:"max_fee_share",type:"u64"}]},{name:"set_min_finality_threshold",discriminator:[143,83,132,23,202,153,26,103],accounts:[{name:"admin",signer:!0},{name:"mint"},{name:"config",writable:!0,pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]},{kind:"account",path:"mint"}]}}],args:[{name:"min_finality_threshold",type:"u32"}]},{name:"set_token_messenger_minter",discriminator:[136,50,92,91,209,211,206,234],accounts:[{name:"admin",signer:!0},{name:"mint"},{name:"config",writable:!0,pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]},{kind:"account",path:"mint"}]}}],args:[{name:"new_program_id",type:"pubkey"}]},{name:"update_chain_bridge",discriminator:[227,4,133,105,230,88,226,173],accounts:[{name:"admin",signer:!0},{name:"config",pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]},{kind:"arg",path:"args.mint"}]}},{name:"chain_bridge",writable:!0}],args:[{name:"args",type:{defined:{name:"UpdateChainBridgeArgs"}}}]},{name:"withdraw_admin_fee",discriminator:[176,135,230,197,163,130,60,252],accounts:[{name:"admin",signer:!0},{name:"mint"},{name:"config",writable:!0,pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]},{kind:"account",path:"mint"}]}},{name:"bridge_token",writable:!0,pda:{seeds:[{kind:"const",value:[116,111,107,101,110]},{kind:"account",path:"mint"}]}},{name:"admin_token",writable:!0},{name:"bridge_authority",pda:{seeds:[{kind:"account",path:"config"}]}},{name:"token_program",address:"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"},{name:"system_program",address:"11111111111111111111111111111111"}],args:[]},{name:"withdraw_gas_token",discriminator:[109,117,140,223,117,175,2,139],accounts:[{name:"admin",signer:!0},{name:"recipient",writable:!0},{name:"mint"},{name:"config",writable:!0,pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]},{kind:"account",path:"mint"}]}}],args:[{name:"amount",type:"u64"}]}],Nl=[{name:"ChainBridge",discriminator:[25,216,147,218,140,42,98,49]},{name:"Config",discriminator:[155,12,170,224,30,250,204,130]},{name:"Lock",discriminator:[8,255,36,202,210,22,57,137]},{name:"Price",discriminator:[50,107,127,61,83,36,39,75]}],Fl=[{code:6e3,name:"ValueTooHigh",msg:"Value is too high"}],Gl=[{name:"BridgeArgs",type:{kind:"struct",fields:[{name:"recipient",type:{array:["u8",32]}},{name:"destination_chain_id",type:"u8"},{name:"receive_token",type:{array:["u8",32]}},{name:"amount",type:"u64"}]}},{name:"ChainBridge",type:{kind:"struct",fields:[{name:"chain_id",type:"u8"},{name:"gas_usage",type:"u64"},{name:"domain",type:"u32"},{name:"other_bridge",type:"pubkey"}]}},{name:"Config",type:{kind:"struct",fields:[{name:"mint",type:"pubkey"},{name:"admin",type:"pubkey"},{name:"token_messenger_minter",type:"pubkey"},{name:"message_transmitter",type:"pubkey"},{name:"gas_oracle_program_id",type:"pubkey"},{name:"authority_bump_seed",type:"u8"},{name:"admin_fee_share_bp",type:"u64"},{name:"admin_fee_amount",type:"u64"},{name:"max_fee_share",type:"u64"},{name:"min_finality_threshold",type:"u32"}]}},{name:"InitializeArgs",type:{kind:"struct",fields:[{name:"gas_oracle_program_id",type:"pubkey"},{name:"token_messenger_minter",type:"pubkey"},{name:"message_transmitter",type:"pubkey"},{name:"admin_fee_share_bp",type:"u64"},{name:"max_fee_share",type:"u64"},{name:"min_finality_threshold",type:"u32"}]}},{name:"Lock",type:{kind:"struct",fields:[{name:"sender",type:"pubkey"},{name:"amount",type:"u64"},{name:"admin_fee",type:"u64"},{name:"relayer_fee",type:"u64"},{name:"recipient",type:{array:["u8",32]}},{name:"destination_chain_id",type:"u8"},{name:"slot",type:"u64"}]}},{name:"Price",type:{kind:"struct",fields:[{name:"chain_id",type:"u8"},{name:"price",type:"u64"},{name:"gas_price",type:"u64"}]}},{name:"ReceiveTokensArgs",type:{kind:"struct",fields:[{name:"message",type:"bytes"},{name:"attestation",type:"bytes"},{name:"extra_gas_amount",type:"u64"}]}},{name:"RegisterChainBridgeArgs",type:{kind:"struct",fields:[{name:"chain_id",type:"u8"},{name:"mint",type:"pubkey"},{name:"gas_usage",type:"u64"},{name:"domain",type:"u32"},{name:"other_bridge",type:"pubkey"}]}},{name:"UpdateChainBridgeArgs",type:{kind:"struct",fields:[{name:"chain_id",type:"u8"},{name:"mint",type:"pubkey"},{name:"gas_usage",type:"u64"},{name:"domain",type:"u32"},{name:"other_bridge",type:"pubkey"}]}}],Zl={address:Yl,metadata:wl,instructions:Wl,accounts:Nl,errors:Fl,types:Gl};var pd=require("@solana/spl-token"),md=Ft(require("big.js")),Ha=require("web3");async function On(i,n){return await(0,pd.getAccount)(n.connection,i)}async function Ui(i,n,a){let r=await n.account.pool.fetch(a),o=r.decimals,s=(0,md.default)(r.feeShareBp.toString()).div(1e4).toFixed(),d={aValue:r.a.toString(),dValue:r.d.toString(),totalLpAmount:r.totalLpAmount.toString(),tokenBalance:r.tokenBalance.toString(),vUsdBalance:r.vUsdBalance.toString(),accRewardPerShareP:r.accRewardPerShareP.toString()};if(Dt(i,o).lte(0))throw new Gt(`Swap amount ${P(i,o).toFixed()} is too small for the liquidity pool. Minimum required amount is 0.001.`);return St(i,{decimals:o,feeShare:s},d)}function Di(i){let n=i.amount,a="0x"+i.recipient.toString("hex"),r=i.sourceChainId,o=i.destinationChainId,s="0x"+i.receiveToken.toString("hex"),d="0x"+i.nonce.toString("hex"),c=1,g="0x"+i.chainBridge.toString("hex"),l=Ha.Web3.utils.encodePacked({t:"uint256",v:n},{t:"bytes32",v:a},{t:"uint256",v:r},{t:"bytes32",v:s},{t:"uint256",v:d},{t:"uint8",v:c});if(!l)throw new f("message cannot be undefined");let A=Ha.Web3.utils.keccak256(Buffer.from(l.replace("0x",""),"hex")),u=Buffer.from(A.replace("0x",""),"hex");u[0]=r,u[1]=o;let m=Ha.Web3.utils.encodePacked({t:"bytes32",v:"0x"+u.toString("hex")},{t:"bytes32",v:g});if(!m)throw new fn("messageWithSigner cannot be undefined");let y=Ha.Web3.utils.keccak256(Buffer.from(m.replace("0x",""),"hex")),v=Buffer.from(y.replace("0x",""),"hex");return v[0]=u[0],v[1]=u[1],v}var yo=require("@coral-xyz/anchor"),Ja=require("@solana/web3.js");async function bd(i,n,a){try{let r=await Bn(n,i),o=await Bn(a,i),s=Ja.TransactionMessage.decompile(n.message,{addressLookupTableAccounts:r}),d=Ja.TransactionMessage.decompile(a.message,{addressLookupTableAccounts:o});if(d.instructions.shift(),s.instructions.push(...d.instructions),r.push(...o),n.message=s.compileToV0Message(r),a.message.header.numRequiredSignatures===2&&n.signatures.length===1){let c=a.signatures[0];if(!c)throw new f("Signature is undefined");n.signatures.push(c)}return n}catch(r){throw r instanceof Error&&r.message?new Ge(`Some error occurred during creation final swap and bridge transaction. ${r.message}`):new Ge("Some error occurred during creation final swap and bridge transaction")}}async function mn(i,n,a){let r=await n.getAddressLookupTable(new Ja.PublicKey(a)).then(s=>s.value);if(!r)throw new f("Cannot find allbridgeLookupTableAccount");let o=new yo.web3.TransactionMessage({payerKey:i.feePayer,recentBlockhash:i.recentBlockhash,instructions:i.instructions}).compileToV0Message([r]);return new yo.web3.VersionedTransaction(o)}var Co=1e6,Qi=class{constructor(n,a,r){this.solanaRpcUrl=n;this.params=a;this.api=r}solanaRpcUrl;params;api;chainType="SOLANA";async buildRawTransactionSwap(n){let a=tt(this.chainType,n);return await this.buildSwapTransaction(a,n.sourceToken.poolAddress,n.destinationToken.poolAddress,n.txFeeParams)}async buildSwapTransaction(n,a,r,o){let{fromAccountAddress:s,amount:d,contractAddress:c,fromTokenAddress:g,toTokenAddress:l,toAccountAddress:A,minimumReceiveAmount:u}=n,m=s,y=c,v=g,C=l,T=r,Y=A,h=new te.PublicKey(m),F=It(this.solanaRpcUrl,h.toString()),G=new Re.Program({...pn,address:y},F),N=await un(G.programId),k=await lt(G.programId),H=new te.PublicKey(v),ae=await Kt(H,G.programId),re=new te.PublicKey(a),E=_e(h,H),_=new te.PublicKey(Y),$=new te.PublicKey(C),ye=await Kt($,G.programId),ue=new te.PublicKey(T),q=_e(_,$),le=[Re.web3.ComputeBudgetProgram.setComputeUnitLimit({units:Co})];try{await On(q,F)}catch{let Lg=(0,Ki.getAssociatedTokenAddressSync)($,_),xg=(0,Ki.createAssociatedTokenAccountInstruction)(h,Lg,_,$);le.push(xg)}let fe=await G.methods.swap(new Re.BN(d),new Re.BN(u||0)).accountsPartial({payer:h,config:k,bridgeAuthority:N,user:h,sendBridgeToken:ae,sendMint:H,sendPool:re,sendUserToken:E,receiveBridgeToken:ye,receiveMint:$,receivePool:ue,receiveUserToken:q}).preInstructions(le).transaction(),Fe=F.connection;return fe.recentBlockhash=(await Fe.getLatestBlockhash()).blockhash,fe.feePayer=h,await Jn(fe,o,this.solanaRpcUrl),await mn(fe,Fe,this.params.solanaLookUpTable)}async buildRawTransactionSend(n,a){let r,o;switch(n.messenger){case 1:{let s=await this.prepareSwapAndBridgeData(a);r=await this.buildSwapAndBridgeAllbridgeTransaction(s);break}case 2:{let s=await this.prepareSwapAndBridgeData(a),{transaction:d,messageAccount:c}=await this.buildSwapAndBridgeWormholeTransaction(s);r=d,o=c;break}case 3:{let s=await this.prepareSwapAndBridgeCctpData(a),{transaction:d,messageSentEventDataKeypair:c}=await this.buildSwapAndBridgeCctpTransaction(n.destinationToken.chainSymbol,s);r=d,o=c;break}case 4:{let s=await this.prepareSwapAndBridgeCctpV2Data(a),{transaction:d,messageSentEventDataKeypair:c}=await this.buildSwapAndBridgeCctpV2Transaction(n.destinationToken.chainSymbol,s);r=d,o=c;break}case 6:throw new f("Messenger xReserve is not supported yet.");case 5:throw new Ze("Messenger OFT is not supported yet.");default:return se(n.messenger,"Unhandled Messenger type")}return{tx:r,requiredMessageSigner:o}}getExtraGasInstruction(n,a,r){return Re.web3.SystemProgram.transfer({fromPubkey:a,toPubkey:r,lamports:+n})}async prepareSwapAndBridgeData(n){let{amount:a,contractAddress:r,fromChainId:o,fromAccountAddress:s,fromTokenAddress:d,toChainId:c,toAccountAddress:g,toTokenAddress:l,poolAddress:A,extraGas:u}=n,m=d,y=s,v=c,C=l,T=g,Y=r,h=o,F=It(this.solanaRpcUrl,y),G=new Re.Program({...pn,address:Y},F),N=Array.from(Vt()),k=new te.PublicKey(A),H=await Ui(a,G,k),ae=await ki(N,G.programId),re=await un(G.programId),E=_e(new te.PublicKey(y),new te.PublicKey(m)),_=await Kt(new te.PublicKey(m),G.programId),$=await Tn(v,G.programId),ye=await Pi(v,Buffer.from(C),G.programId),ue=await lt(G.programId),q=await G.account.config.fetch(ue),le=await Xt(v,q.gasOracleProgramId),fe=await Xt(h,q.gasOracleProgramId),Fe=Di({amount:H,recipient:Buffer.from(T),nonce:Buffer.from(N),receiveToken:Buffer.from(C),destinationChainId:v,sourceChainId:h,chainBridge:(await un(G.programId)).toBuffer()}),z={};return z.bridge=G,z.amount=new Re.BN(a),z.vusdAmount=new Re.BN(H),z.nonce=N,z.recipient=Array.from(T),z.receiveToken=Array.from(C),z.poolAccount=k,z.lockAccount=ae,z.bridgeAuthority=re,z.userToken=E,z.bridgeTokenAccount=_,z.chainBridgeAccount=$,z.otherBridgeTokenAccount=ye,z.userAccount=new te.PublicKey(y),z.destinationChainId=v,z.mint=new te.PublicKey(m),z.config=ue,z.configAccountInfo=q,z.gasPrice=le,z.thisGasPrice=fe,z.message=Fe,u&&(z.extraGasInstruction=this.getExtraGasInstruction(u,z.userAccount,ue)),z}async buildSwapAndBridgeAllbridgeTransaction(n){let{bridge:a,vusdAmount:r,nonce:o,recipient:s,receiveToken:d,poolAccount:c,lockAccount:g,bridgeAuthority:l,userToken:A,bridgeTokenAccount:u,chainBridgeAccount:m,otherBridgeTokenAccount:y,userAccount:v,destinationChainId:C,mint:T,config:Y,configAccountInfo:h,gasPrice:F,thisGasPrice:G,message:N,extraGasInstruction:k}=n,H=h.allbridgeMessengerProgramId,ae=await Hn(C,H),re=await lt(H),E=await Xi(N,H),_=[];k&&_.push(k);let $=await a.methods.swapAndBridge({vusdAmount:r,nonce:o,destinationChainId:C,recipient:s,receiveToken:d}).accountsPartial({payer:v,mint:T,user:v,config:Y,lock:g,pool:c,gasPrice:F,thisGasPrice:G,bridgeAuthority:l,userToken:A,bridgeToken:u,chainBridge:m,messenger:H,messengerGasUsage:ae,messengerConfig:re,sentMessageAccount:E,otherBridgeToken:y}).preInstructions([Re.web3.ComputeBudgetProgram.setComputeUnitLimit({units:Co})]).postInstructions(_).transaction(),ye=It(this.solanaRpcUrl,v.toString()).connection;return $.recentBlockhash=(await ye.getLatestBlockhash()).blockhash,$.feePayer=v,await mn($,ye,this.params.solanaLookUpTable)}async buildSwapAndBridgeWormholeTransaction(n){let{bridge:a,vusdAmount:r,nonce:o,recipient:s,receiveToken:d,poolAccount:c,lockAccount:g,bridgeAuthority:l,userToken:A,bridgeTokenAccount:u,chainBridgeAccount:m,otherBridgeTokenAccount:y,userAccount:v,destinationChainId:C,mint:T,config:Y,configAccountInfo:h,gasPrice:F,thisGasPrice:G,extraGasInstruction:N}=n,k=this.params.wormholeMessengerProgramId,[H]=te.PublicKey.findProgramAddressSync([Buffer.from("Bridge")],new te.PublicKey(k)),[ae]=te.PublicKey.findProgramAddressSync([Buffer.from("fee_collector")],new te.PublicKey(k)),[re]=te.PublicKey.findProgramAddressSync([Buffer.from("Sequence"),l.toBuffer()],new te.PublicKey(k)),E=await Hn(C,h.wormholeMessengerProgramId),_=await lt(h.wormholeMessengerProgramId),$=te.Keypair.generate(),ye=It(this.solanaRpcUrl,v.toString()),ue=await ye.connection.getAccountInfo(H);if(ue==null)throw new f("Cannot fetch wormhole bridge account info");let q=new Re.BN(ue.data.slice(16,24),"le").toString(),le=te.SystemProgram.transfer({fromPubkey:v,toPubkey:ae,lamports:+q}),fe=[];N&&fe.push(N);let Fe={payer:v,mint:T,user:v,config:Y,lock:g,pool:c,gasPrice:F,thisGasPrice:G,bridgeAuthority:l,userToken:A,bridgeToken:u,chainBridge:m,otherBridgeToken:y,messengerGasUsage:E,wormholeProgram:k,bridge:H,message:$.publicKey,wormholeMessenger:h.wormholeMessengerProgramId,sequence:re,feeCollector:ae,wormholeMessengerConfig:_,clock:Re.web3.SYSVAR_CLOCK_PUBKEY},z=await a.methods.swapAndBridgeWormhole({vusdAmount:r,nonce:o,destinationChainId:C,recipient:s,receiveToken:d}).accounts(Fe).preInstructions([Re.web3.ComputeBudgetProgram.setComputeUnitLimit({units:Co}),le]).postInstructions(fe).signers([$]).transaction();return z.recentBlockhash=(await ye.connection.getLatestBlockhash()).blockhash,z.feePayer=v,{transaction:await mn(z,ye.connection,this.params.solanaLookUpTable),messageAccount:$}}async prepareSwapAndBridgeCctpData(n){let{contractAddress:a,amount:r,fromAccountAddress:o,fromTokenAddress:s,toChainId:d,toAccountAddress:c,toTokenAddress:g,extraGas:l}=n,A=a;if(!A)throw new we("Such route does not support CCTP protocol");let u=4,m=o,y=g,v=c,C=It(this.solanaRpcUrl,m),T=new Re.Program({...mo,address:A},C),Y=new te.PublicKey(s),h=await ji(Y,T.programId),F=new te.PublicKey(m),G=await T.account.cctpBridge.fetch(h),N={};return N.cctpBridge=T,N.cctpBridgeAccount=h,N.cctpAddressAccount=new te.PublicKey(A),N.amount=new Re.BN(r),N.recipient=Array.from(v),N.receiveToken=Array.from(y),N.userToken=_e(F,Y),N.bridgeAuthority=await Vi(h,T.programId),N.bridgeTokenAccount=await od(Y,T.programId),N.chainBridgeAccount=await Tn(d,T.programId),N.userAccount=F,N.destinationChainId=d,N.mint=Y,N.gasPrice=await Xt(d,G.gasOracleProgramId),N.thisGasPrice=await Xt(u,G.gasOracleProgramId),N.provider=C,l&&(N.extraGasInstruction=this.getExtraGasInstruction(l,N.userAccount,h)),N}async buildSwapAndBridgeCctpTransaction(n,a){let{cctpBridge:r,cctpBridgeAccount:o,amount:s,recipient:d,receiveToken:c,bridgeAuthority:g,userToken:l,bridgeTokenAccount:A,chainBridgeAccount:u,userAccount:m,destinationChainId:y,mint:v,gasPrice:C,thisGasPrice:T,extraGasInstruction:Y,provider:h}=a,F=this.params.cctpParams.cctpDomains[n],G=this.params.cctpParams.cctpTransmitterProgramId,N=this.params.cctpParams.cctpTokenMessengerMinter;if(F==null||!G||!N)throw new f("CCTP is not configured");let k=new te.PublicKey(G),H=new te.PublicKey(N),{messageTransmitterAccount:ae,tokenMessenger:re,tokenMessengerEventAuthority:E,tokenMinter:_,localToken:$,remoteTokenMessengerKey:ye,authorityPda:ue}=ja(F,v,k,H),q=[];Y&&q.push(Y);let le=te.Keypair.generate(),fe=Li(r.programId,le.publicKey),Fe=await r.methods.bridge({amount:s,destinationChainId:y,recipient:d,receiveToken:c}).accountsPartial({mint:v,user:m,cctpBridge:o,payer:m,messageSentEventData:le.publicKey,lock:fe,cctpMessenger:H,messageTransmitterProgram:k,messageTransmitterAccount:ae,tokenMessenger:re,tokenMinter:_,localToken:$,remoteTokenMessengerKey:ye,authorityPda:ue,eventAuthority:E,bridgeToken:A,gasPrice:C,thisGasPrice:T,chainBridge:u,userToken:l,bridgeAuthority:g}).preInstructions([Re.web3.ComputeBudgetProgram.setComputeUnitLimit({units:2e6})]).postInstructions(q).transaction(),z=h.connection;return Fe.recentBlockhash=(await z.getLatestBlockhash()).blockhash,Fe.feePayer=m,{transaction:await mn(Fe,z,this.params.solanaLookUpTable),messageSentEventDataKeypair:le}}async prepareSwapAndBridgeCctpV2Data(n){let{contractAddress:a,amount:r,fromAccountAddress:o,fromTokenAddress:s,toChainId:d,toAccountAddress:c,toTokenAddress:g,extraGas:l}=n,A=a;if(!A)throw new we("The route does not support CCTPv2 protocol");let u=4,m=o,y=g,v=c,C=It(this.solanaRpcUrl,m),T=new Re.Program({...bo,address:A},C),Y=new te.PublicKey(s),h=Mi(Y,T.programId),F=new te.PublicKey(m),G=await T.account.config.fetch(h),N={};return N.cctpBridge=T,N.amount=new Re.BN(r),N.recipient=Array.from(v),N.receiveToken=Array.from(y),N.userToken=_e(F,Y),N.chainBridgeAccount=await Tn(d,T.programId),N.userAccount=F,N.destinationChainId=d,N.mint=Y,N.gasPrice=await Xt(d,G.gasOracleProgramId),N.thisGasPrice=await Xt(u,G.gasOracleProgramId),N.provider=C,l&&(N.extraGasInstruction=this.getExtraGasInstruction(l,N.userAccount,h)),N}async buildSwapAndBridgeCctpV2Transaction(n,a){let{amount:r,cctpBridge:o,chainBridgeAccount:s,destinationChainId:d,extraGasInstruction:c,gasPrice:g,mint:l,provider:A,receiveToken:u,recipient:m,thisGasPrice:y,userAccount:v,userToken:C}=a,T=this.params.cctpParams.cctpDomains[n],Y=this.params.cctpParams.cctpV2TransmitterProgramId,h=this.params.cctpParams.cctpV2TokenMessengerMinter;if(T==null||!Y||!h)throw new f("CCTPv2 is not configured");let F=new te.PublicKey(Y),G=new te.PublicKey(h),{messageTransmitterAccount:N,tokenMessenger:k,tokenMessengerEventAuthority:H,tokenMinter:ae,localToken:re,remoteTokenMessengerKey:E,authorityPda:_}=ja(T,l,F,G),$=[];c&&$.push(c);let ye=te.Keypair.generate(),ue=await o.methods.bridge({amount:r,destinationChainId:d,recipient:m,receiveToken:u}).accounts({mint:l,user:v,messageSentEventData:ye.publicKey,tokenMessengerMinterProgram:G,messageTransmitterProgram:F,messageTransmitterAccount:N,tokenMessenger:k,tokenMinter:ae,localToken:re,remoteTokenMessenger:E,authorityPda:_,eventAuthority:H,gasPrice:g,thisGasPrice:y,chainBridge:s,userToken:C}).preInstructions([Re.web3.ComputeBudgetProgram.setComputeUnitLimit({units:2e6})]).postInstructions($).transaction(),q=A.connection;return ue.recentBlockhash=(await q.getLatestBlockhash()).blockhash,ue.feePayer=v,{transaction:await mn(ue,q,this.params.solanaLookUpTable),messageSentEventDataKeypair:ye}}};var yd=require("@solana/spl-token"),Cd=require("@solana/web3.js"),zn=Ft(require("axios")),$e=require("big.js");var Sl=1.1,kl=1.01,Ei=class{constructor(n,a){this.api=n;this.jupiterUrl=a.jupiterUrl.replace(/\/$/,""),this.apiKeyHeader=a.jupiterApiKeyHeader,this.maxAccounts=a.jupiterMaxAccounts}api;jupiterUrl;apiKeyHeader;maxAccounts;async buildJupAndUpdateTxSendParams(n,a){let r=po(n.txFeeParams?.solana);try{let{tx:o,solTxSendUpdatedParams:s}=await this.processJup(a,n,r,!0);return{jupTx:o,solTxSendParams:{...a,...s}}}catch(o){if(o instanceof Gt)throw o;try{let{tx:s,solTxSendUpdatedParams:d}=await this.processJup(a,n,r,!1);return{jupTx:s,solTxSendParams:{...a,...d}}}catch(s){throw s instanceof Ce?s:s instanceof Error&&s.message?new Ge(`Some error occurred during creation Jupiter swap transaction. ${s.message}`):new Ge("Some error occurred during creation Jupiter swap transaction")}}}async processJup(n,a,r,o){let{fee:s,extraGas:d,gasFeePaymentMethod:c,sourceNativeTokenPrice:g}=await this.convertStableCoinFeeAndExtraGasToNativeCurrency(a.sourceToken,n),l=o?(0,$e.Big)(s):(0,$e.Big)(n.fee);if(d&&(o?l=l.plus(d):n.extraGas&&(l=l.plus(n.extraGas))),r?.payTxFeeWithStablecoinSwap)if(o)l=l.plus(3526760);else{if(!g)throw new f("sourceNativeTokenPrice is undefined.");let T=(0,$e.Big)(3526760).mul(g).div((0,$e.Big)(10).pow(x.getChainDecimalsByType("SOLANA")-a.sourceToken.decimals)).toFixed(0);l=l.plus(T)}o||(l=l.mul(Sl));let{tx:A,amountIn:u}=await this.getJupiterSwapTx(a.fromAccountAddress,a.sourceToken.tokenAddress,l.toFixed(0),o),m;if(o){if(!u)throw new Ge("Cannot get inAmount");m=(0,$e.Big)(n.amount).minus((0,$e.Big)(u).mul(kl).toFixed(0,$e.Big.roundUp)).toFixed(0)}else m=(0,$e.Big)(n.amount).minus(l).toFixed(0);if((0,$e.Big)(m).lte(0))throw new Gt(`Amount not enough to pay fee, ${P((0,$e.Big)(m).minus(1).neg(),a.sourceToken.decimals).toFixed()} ${a.sourceToken.symbol} is missing`);return{tx:A,solTxSendUpdatedParams:{amount:m,fee:s,extraGas:d,gasFeePaymentMethod:c}}}async convertStableCoinFeeAndExtraGasToNativeCurrency(n,a){if(a.gasFeePaymentMethod=="stablecoin"){let r=(await this.api.getReceiveTransactionCost({sourceChainId:a.fromChainId,destinationChainId:a.toChainId,messenger:a.messenger,sourceToken:n.tokenAddress})).sourceNativeTokenPrice,o=(0,$e.Big)(a.fee).div(r).mul((0,$e.Big)(10).pow(x.getChainDecimalsByType("SOLANA")-n.decimals)).toFixed(0),s;return a.extraGas&&(s=(0,$e.Big)(a.extraGas).div(r).mul((0,$e.Big)(10).pow(x.getChainDecimalsByType("SOLANA")-n.decimals)).toFixed(0)),{fee:o,extraGas:s,gasFeePaymentMethod:"native",sourceNativeTokenPrice:r}}return{fee:a.fee,extraGas:a.extraGas,gasFeePaymentMethod:"native"}}async getJupiterSwapTx(n,a,r,o){let s;try{let u=o?"ExactOut":"ExactIn",m=`${this.jupiterUrl}/quote?inputMint=${a}&outputMint=${yd.NATIVE_MINT.toString()}&amount=${r}&swapMode=${u}&slippageBps=100&onlyDirectRoutes=true`;this.maxAccounts&&(m+=`&maxAccounts=${this.maxAccounts}`),s=await zn.default.get(m,{headers:this.apiKeyHeader?{"x-api-key":this.apiKeyHeader}:void 0})}catch(u){throw u instanceof zn.AxiosError&&u.response&&u.response.data&&u.response.data.error?new Ge(u.response.data.error):new Ge("Cannot get route")}let d;if(o&&s?.data?.inAmount)d=s.data.inAmount;else if(o)throw new Ge("Cannot get inAmount");let c;try{c=await zn.default.post(`${this.jupiterUrl}/swap`,{quoteResponse:s.data,userPublicKey:n,wrapAndUnwrapSol:!0},{headers:this.apiKeyHeader?{"x-api-key":this.apiKeyHeader}:void 0})}catch(u){throw u instanceof zn.AxiosError&&u.response&&u.response.data&&u.response.data.error?new Ge(u.response.data.error):new Ge("Cannot get swap transaction")}let g;if(c?.data?.swapTransaction)g=c.data.swapTransaction;else throw new Ge("Cannot get swap transaction");let l=Buffer.from(g,"base64"),A=Cd.VersionedTransaction.deserialize(l);return o?{tx:A,amountIn:d}:{tx:A}}};var ht=require("@coral-xyz/anchor"),je=require("@solana/web3.js");var Io={};va(Io,{accounts:()=>jl,address:()=>Vl,default:()=>Hl,errors:()=>Ll,events:()=>Ml,instructions:()=>Xl,metadata:()=>Pl,types:()=>xl});var Vl="DfB5pJSykRUuUT2ViG8V382R6RB5CQ3GTMVFajoyxXn1",Pl={name:"payer_with_token",version:"0.1.0",spec:"0.1.0",description:"Created with Anchor"},Xl=[{name:"add_fee_token",discriminator:[171,6,150,97,69,55,13,136],accounts:[{name:"initializer",writable:!0,signer:!0},{name:"admin",signer:!0},{name:"fee_token_mint"},{name:"config",pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]}]}},{name:"fee_token_config",writable:!0,pda:{seeds:[{kind:"const",value:[102,101,101,95,116,111,107,101,110]},{kind:"account",path:"fee_token_mint"}]}},{name:"contract_fee_token_account",writable:!0,pda:{seeds:[{kind:"const",value:[116,111,107,101,110]},{kind:"account",path:"fee_token_mint"}]}},{name:"system_program",address:"11111111111111111111111111111111"},{name:"token_program",address:"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"},{name:"rent",address:"SysvarRent111111111111111111111111111111111"}],args:[{name:"args",type:{defined:{name:"AddFeeTokenArgs"}}}]},{name:"bridge_cctp",discriminator:[35,114,66,117,122,78,225,186],accounts:[{name:"user",writable:!0,signer:!0},{name:"mint",writable:!0},{name:"fee_token_mint"},{name:"config",writable:!0,pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]}]}},{name:"fee_token_config",writable:!0,pda:{seeds:[{kind:"const",value:[102,101,101,95,116,111,107,101,110]},{kind:"account",path:"fee_token_mint"}]}},{name:"user_fee_token_account",writable:!0},{name:"contract_fee_token_account",writable:!0,pda:{seeds:[{kind:"const",value:[116,111,107,101,110]},{kind:"account",path:"fee_token_mint"}]}},{name:"payer_authority",writable:!0,pda:{seeds:[{kind:"account",path:"config"}]}},{name:"cctp_bridge"},{name:"bridge_token",writable:!0},{name:"cctp_messenger"},{name:"message_transmitter_program"},{name:"message_transmitter_account",writable:!0},{name:"token_messenger"},{name:"token_minter"},{name:"local_token",writable:!0},{name:"remote_token_messenger_key"},{name:"authority_pda"},{name:"event_authority"},{name:"message_sent_event_data",writable:!0,signer:!0},{name:"lock",writable:!0},{name:"cctp_bridge_config",writable:!0},{name:"gas_price"},{name:"this_gas_price"},{name:"chain_bridge"},{name:"bridge_authority"},{name:"user_token_account",writable:!0},{name:"token_program",address:"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"},{name:"system_program",address:"11111111111111111111111111111111"}],args:[{name:"args",type:{defined:{name:"PayerCctpBridgeArgs"}}}]},{name:"bridge_cctp_v2",discriminator:[237,74,221,146,95,161,136,197],accounts:[{name:"user",writable:!0,signer:!0},{name:"mint",writable:!0},{name:"fee_token_mint"},{name:"config",writable:!0,pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]}]}},{name:"fee_token_config",writable:!0,pda:{seeds:[{kind:"const",value:[102,101,101,95,116,111,107,101,110]},{kind:"account",path:"fee_token_mint"}]}},{name:"user_fee_token_account",writable:!0},{name:"contract_fee_token_account",writable:!0,pda:{seeds:[{kind:"const",value:[116,111,107,101,110]},{kind:"account",path:"fee_token_mint"}]}},{name:"payer_authority",writable:!0,pda:{seeds:[{kind:"account",path:"config"}]}},{name:"cctp_bridge"},{name:"bridge_token",writable:!0},{name:"token_messenger_minter_program"},{name:"message_transmitter_program"},{name:"message_transmitter_account",writable:!0},{name:"token_messenger"},{name:"token_minter"},{name:"local_token",writable:!0},{name:"remote_token_messenger"},{name:"authority_pda"},{name:"denylist_account",pda:{seeds:[{kind:"const",value:[100,101,110,121,108,105,115,116,95,97,99,99,111,117,110,116]},{kind:"account",path:"user"}],program:{kind:"account",path:"token_messenger_minter_program"}}},{name:"event_authority"},{name:"message_sent_event_data",writable:!0,signer:!0},{name:"lock",writable:!0},{name:"cctp_bridge_config",writable:!0},{name:"gas_price"},{name:"this_gas_price"},{name:"chain_bridge"},{name:"bridge_authority"},{name:"user_token_account",writable:!0},{name:"token_program",address:"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"},{name:"system_program",address:"11111111111111111111111111111111"}],args:[{name:"args",type:{defined:{name:"PayerCctpV2BridgeArgs"}}}]},{name:"initialize",discriminator:[175,175,109,31,13,152,155,237],accounts:[{name:"initializer",writable:!0,signer:!0},{name:"admin",writable:!0,signer:!0},{name:"config",writable:!0,pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]}]}},{name:"payer_authority",writable:!0,pda:{seeds:[{kind:"account",path:"config"}]}},{name:"system_program",address:"11111111111111111111111111111111"},{name:"token_program",address:"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"},{name:"rent",address:"SysvarRent111111111111111111111111111111111"}],args:[{name:"args",type:{defined:{name:"InitializeArgs"}}}]},{name:"remove_fee_token",discriminator:[46,96,240,63,28,173,62,131],accounts:[{name:"admin",writable:!0,signer:!0},{name:"fee_token_mint"},{name:"config",pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]}]}},{name:"fee_token_config",writable:!0,pda:{seeds:[{kind:"const",value:[102,101,101,95,116,111,107,101,110]},{kind:"account",path:"fee_token_mint"}]}},{name:"contract_fee_token_account",writable:!0,pda:{seeds:[{kind:"const",value:[116,111,107,101,110]},{kind:"account",path:"fee_token_mint"}]}},{name:"token_program",address:"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"}],args:[]},{name:"set_admin",discriminator:[251,163,0,52,91,194,187,92],accounts:[{name:"admin",writable:!0,signer:!0},{name:"new_admin"},{name:"config",writable:!0,pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]}]}}],args:[]},{name:"set_bridge_program_id",discriminator:[59,191,249,155,146,73,202,139],accounts:[{name:"admin",writable:!0,signer:!0},{name:"config",writable:!0,pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]}]}}],args:[{name:"new_program_id",type:"pubkey"}]},{name:"set_cctp_bridge_program_id",discriminator:[164,36,75,241,35,30,47,159],accounts:[{name:"admin",writable:!0,signer:!0},{name:"config",writable:!0,pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]}]}}],args:[{name:"new_program_id",type:"pubkey"}]},{name:"set_cctp_v2_bridge_program_id",discriminator:[98,190,8,24,135,12,117,249],accounts:[{name:"admin",writable:!0,signer:!0},{name:"config",writable:!0,pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]}]}}],args:[{name:"new_program_id",type:"pubkey"}]},{name:"set_fee_token_price",discriminator:[116,201,189,21,190,10,242,241],accounts:[{name:"price_authority",signer:!0},{name:"config",writable:!0,pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]}]}},{name:"fee_token_mint"},{name:"fee_token_config",writable:!0,pda:{seeds:[{kind:"const",value:[102,101,101,95,116,111,107,101,110]},{kind:"account",path:"fee_token_mint"}]}}],args:[{name:"new_price",type:"u64"}]},{name:"set_price_authority",discriminator:[51,241,68,137,206,207,244,107],accounts:[{name:"admin",writable:!0,signer:!0},{name:"config",writable:!0,pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]}]}}],args:[{name:"new_address",type:"pubkey"}]},{name:"swap_and_bridge",discriminator:[204,63,169,171,186,125,86,159],accounts:[{name:"user",writable:!0,signer:!0},{name:"mint"},{name:"fee_token_mint"},{name:"config",writable:!0,pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]}]}},{name:"fee_token_config",writable:!0,pda:{seeds:[{kind:"const",value:[102,101,101,95,116,111,107,101,110]},{kind:"account",path:"fee_token_mint"}]}},{name:"user_fee_token_account",writable:!0},{name:"contract_fee_token_account",writable:!0,pda:{seeds:[{kind:"const",value:[116,111,107,101,110]},{kind:"account",path:"fee_token_mint"}]}},{name:"payer_authority",writable:!0,pda:{seeds:[{kind:"account",path:"config"}]}},{name:"bridge"},{name:"bridge_token",writable:!0},{name:"messenger"},{name:"messenger_config",writable:!0},{name:"sent_message_account",writable:!0},{name:"messenger_gas_usage"},{name:"lock",writable:!0},{name:"bridge_config",writable:!0},{name:"other_bridge_token",writable:!0},{name:"pool",writable:!0},{name:"gas_price"},{name:"this_gas_price"},{name:"chain_bridge"},{name:"bridge_authority"},{name:"user_token_account",writable:!0},{name:"token_program",address:"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"},{name:"system_program",address:"11111111111111111111111111111111"}],args:[{name:"args",type:{defined:{name:"PayerSwapAndBridgeArgs"}}}]},{name:"swap_and_bridge_wormhole",discriminator:[41,91,201,180,150,117,154,65],accounts:[{name:"user",writable:!0,signer:!0},{name:"mint"},{name:"fee_token_mint"},{name:"config",writable:!0,pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]}]}},{name:"fee_token_config",writable:!0,pda:{seeds:[{kind:"const",value:[102,101,101,95,116,111,107,101,110]},{kind:"account",path:"fee_token_mint"}]}},{name:"user_fee_token_account",writable:!0},{name:"contract_fee_token_account",writable:!0,pda:{seeds:[{kind:"const",value:[116,111,107,101,110]},{kind:"account",path:"fee_token_mint"}]}},{name:"payer_authority",writable:!0,pda:{seeds:[{kind:"account",path:"config"}]}},{name:"bridge"},{name:"bridge_token",writable:!0},{name:"lock",writable:!0},{name:"bridge_config",writable:!0},{name:"other_bridge_token",writable:!0},{name:"pool",writable:!0},{name:"gas_price"},{name:"this_gas_price"},{name:"chain_bridge"},{name:"user_token_account",writable:!0},{name:"bridge_authority"},{name:"wormhole_messenger"},{name:"wormhole_messenger_config",writable:!0},{name:"wormhole_program"},{name:"wormhole_bridge",writable:!0},{name:"message",writable:!0,signer:!0},{name:"sequence",writable:!0},{name:"fee_collector",writable:!0},{name:"messenger_gas_usage"},{name:"clock",address:"SysvarC1ock11111111111111111111111111111111"},{name:"rent",address:"SysvarRent111111111111111111111111111111111"},{name:"token_program",address:"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"},{name:"system_program",address:"11111111111111111111111111111111"}],args:[{name:"args",type:{defined:{name:"PayerSwapAndBridgeArgs"}}}]},{name:"upgrade_config",discriminator:[129,185,25,221,96,63,251,97],accounts:[{name:"payer",writable:!0,signer:!0},{name:"admin",writable:!0,signer:!0},{name:"config",writable:!0,pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]}]}},{name:"system_program",address:"11111111111111111111111111111111"}],args:[]},{name:"withdraw_fee_token",discriminator:[131,103,89,216,53,78,255,118],accounts:[{name:"admin",signer:!0},{name:"config",writable:!0,pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]}]}},{name:"fee_token_mint"},{name:"fee_token_config",writable:!0,pda:{seeds:[{kind:"const",value:[102,101,101,95,116,111,107,101,110]},{kind:"account",path:"fee_token_mint"}]}},{name:"contract_fee_token_account",writable:!0,pda:{seeds:[{kind:"const",value:[116,111,107,101,110]},{kind:"account",path:"fee_token_mint"}]}},{name:"admin_fee_token_account",writable:!0},{name:"token_program",address:"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"},{name:"system_program",address:"11111111111111111111111111111111"}],args:[{name:"amount",type:"u64"}]},{name:"withdraw_gas_token",discriminator:[109,117,140,223,117,175,2,139],accounts:[{name:"admin",signer:!0},{name:"recipient",writable:!0},{name:"payer_authority",writable:!0,pda:{seeds:[{kind:"account",path:"config"}]}},{name:"config",pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]}]}},{name:"system_program",address:"11111111111111111111111111111111"}],args:[{name:"amount",type:"u64"}]}],jl=[{name:"ChainBridge",discriminator:[25,216,147,218,140,42,98,49]},{name:"Config",discriminator:[155,12,170,224,30,250,204,130]},{name:"FeeTokenConfig",discriminator:[226,113,31,124,53,31,222,222]}],Ml=[{name:"ExtraGasSentEvent",discriminator:[111,21,139,73,113,95,104,52]}],Ll=[{code:6e3,name:"PayerFeeSlippage",msg:"Payer fee slippage"},{code:6001,name:"InvalidData",msg:"Invalid data"}],xl=[{name:"AddFeeTokenArgs",type:{kind:"struct",fields:[{name:"price",type:"u64"}]}},{name:"ChainBridge",type:{kind:"struct",fields:[{name:"address",type:{array:["u8",32]}},{name:"chain_id",type:"u8"},{name:"gas_usage",type:"u64"}]}},{name:"Config",type:{kind:"struct",fields:[{name:"admin",type:"pubkey"},{name:"authority_bump_seed",type:"u8"},{name:"bridge_program_id",type:"pubkey"},{name:"cctp_bridge_program_id",type:"pubkey"},{name:"price_authority",type:"pubkey"},{name:"cctp_v2_bridge_program_id",type:"pubkey"}]}},{name:"ExtraGasSentEvent",type:{kind:"struct",fields:[{name:"fee_token_mint",type:"pubkey"},{name:"extra_gas_amount_in_fee_token",type:"u64"},{name:"extra_gas_amount_in_sol",type:"u64"},{name:"extra_gas_amount_in_usd",type:"u64"}]}},{name:"FeeTokenConfig",type:{kind:"struct",fields:[{name:"mint",type:"pubkey"},{name:"decimals",type:"u8"},{name:"price",type:"u64"},{name:"bump",type:"u8"}]}},{name:"InitializeArgs",type:{kind:"struct",fields:[{name:"bridge_program_id",type:"pubkey"},{name:"cctp_bridge_program_id",type:"pubkey"},{name:"cctp_v2_bridge_program_id",type:"pubkey"}]}},{name:"PayerCctpBridgeArgs",type:{kind:"struct",fields:[{name:"max_fee_amount",type:"u64"},{name:"extra_gas_amount_in_fee_token",type:"u64"},{name:"recipient",type:{array:["u8",32]}},{name:"destination_chain_id",type:"u8"},{name:"receive_token",type:{array:["u8",32]}},{name:"amount",type:"u64"}]}},{name:"PayerCctpV2BridgeArgs",type:{kind:"struct",fields:[{name:"max_fee_amount",type:"u64"},{name:"extra_gas_amount_in_fee_token",type:"u64"},{name:"recipient",type:{array:["u8",32]}},{name:"destination_chain_id",type:"u8"},{name:"receive_token",type:{array:["u8",32]}},{name:"amount",type:"u64"}]}},{name:"PayerSwapAndBridgeArgs",type:{kind:"struct",fields:[{name:"max_fee_amount",type:"u64"},{name:"extra_gas_amount_in_fee_token",type:"u64"},{name:"destination_chain_id",type:"u8"},{name:"recipient",type:{array:["u8",32]}},{name:"recipient_token",type:{array:["u8",32]}},{name:"vusd_amount",type:"u64"},{name:"nonce",type:{array:["u8",32]}}]}}],Hl={address:Vl,metadata:Pl,instructions:Xl,accounts:jl,events:Ml,errors:Ll,types:xl};var Jl=1e6,_i=class{constructor(n,a,r){this.solanaRpcUrl=n;this.params=a;this.api=r}solanaRpcUrl;params;api;chainType="SOLANA";async buildRawTransactionSend(n,a){switch(n.messenger){case 1:{let r=await this.prepareSwapAndBridgeAllbridgeData(n,a);return{tx:await this.buildSwapAndBridgeTx(r)}}case 2:{let r=await this.prepareSwapAndBridgeWormholeData(n,a);return await this.buildSwapAndBridgeWormholeTx(r)}case 3:{let r=await this.prepareBridgeCctpData(n,a);return this.buildBridgeCctpTx(r)}case 4:{let r=await this.prepareBridgeCctpData(n,a);return this.buildBridgeCctpV2Tx(r)}case 6:throw new f("Messenger xReserve is not supported yet.");case 5:throw new Ze("Messenger OFT is not supported yet.");default:return se(n.messenger,"Unhandled Messenger type")}}async prepareSwapAndBridgeBaseData(n,a){let{fromChainId:r,fromAccountAddress:o,fromTokenAddress:s,poolAddress:d,toAccountAddress:c,toTokenAddress:g,toChainId:l,fee:A,extraGas:u="0"}=a,m=new je.PublicKey(o),y=Array.from(c),v=Array.from(g),C=new ht.BN(A),T=new ht.BN(u),Y=It(this.solanaRpcUrl,o),h=this.getPayerProgram(n,Y),F=new ht.Program({...pn,address:n.sourceToken.bridgeAddress},Y),G=new je.PublicKey(d),N=await lt(F.programId),k=await F.account.config.fetch(N),H=new je.PublicKey(s),ae=new je.PublicKey(this.getAbrFeeTokenMintAddress(n)),re=_e(m,H),E=_e(m,ae),_=await Xt(l,k.gasOracleProgramId),$=await Xt(r,k.gasOracleProgramId);return{provider:Y,payerProgram:h,bridgeProgram:F,userAccount:m,recipient:y,recipientToken:v,recipientChain:l,maxFeeAmount:C,extraGasAmountInFeeToken:T,mintAccount:H,feeTokenMintAccount:ae,userTokenAccount:re,userFeeTokenAccount:E,gasPriceAccount:_,thisGasPriceAccount:$,poolAccount:G,bridgeConfigAccount:N,bridgeConfigInfo:k}}getComputeUnitLimitInstruction(){return ht.web3.ComputeBudgetProgram.setComputeUnitLimit({units:Jl})}getPayerProgram(n,a){let r=n.sourceToken.abrPayer?.payerAddress;if(!r)throw new Ut("Payer with token not supported yet for ABR tokens");return new ht.Program({...Io,address:r},a)}getAbrFeeTokenMintAddress(n){let a=n.sourceToken.abrPayer?.abrToken.tokenAddress;if(!a)throw new Ut("Payer with token not supported yet for ABR tokens");return a}async prepareSwapAndBridgeCommonData(n,a){let{amount:r,toChainId:o,toTokenAddress:s}=a,{bridgeProgram:d,poolAccount:c,mintAccount:g}=n,l=await Ui(r,d,c),A=Array.from(Vt()),u=await ki(A,d.programId),m=d.programId,y=await Tn(o,m),v=await un(m),C=await Kt(g,m),T=await Pi(o,Buffer.from(s),m);return{...n,vusdAmount:new ht.BN(l),nonce:A,lockAccount:u,chainBridgeAccount:y,bridgeProgramId:m,bridgeAuthorityAccount:v,bridgeTokenAccount:C,otherBridgeTokenAccount:T}}getWormholeProgramAddresses(n,a){let r=new je.PublicKey(n),[o]=je.PublicKey.findProgramAddressSync([Buffer.from("Bridge")],r),[s]=je.PublicKey.findProgramAddressSync([Buffer.from("Sequence"),a.toBuffer()],r),[d]=je.PublicKey.findProgramAddressSync([Buffer.from("fee_collector")],r);return{wormholeBridgeAccount:o,wormholeSequenceAccount:s,wormholeFeeCollectorAccount:d}}async getWormholeFeeInstruction(n,a,r,o){let s=await n.connection.getAccountInfo(a);if(s==null)throw new f("Cannot fetch wormhole bridge account info");let d=new ht.BN(s.data.slice(16,24),"le").toString();return je.SystemProgram.transfer({fromPubkey:r,toPubkey:o,lamports:+d})}async prepareSwapAndBridgeAllbridgeData(n,a){let r=await this.prepareSwapAndBridgeBaseData(n,a),o=await this.prepareSwapAndBridgeCommonData(r,a),{recipient:s,recipientToken:d,recipientChain:c,bridgeConfigInfo:g}=r,{vusdAmount:l,nonce:A,bridgeAuthorityAccount:u}=o,{fromChainId:m,toChainId:y}=a,v=Di({amount:l.toString(),recipient:Buffer.from(s),nonce:Buffer.from(A),receiveToken:Buffer.from(d),destinationChainId:c,sourceChainId:m,chainBridge:u.toBuffer()}),C=g.allbridgeMessengerProgramId,T=await Xi(v,C),Y=await lt(C),h=await Hn(y,C);return{...o,sentMessageAccount:T,messengerProgramId:C,messengerConfigAccount:Y,messengerGasUsageAccount:h}}async prepareSwapAndBridgeWormholeData(n,a){let r=await this.prepareSwapAndBridgeBaseData(n,a),o=await this.prepareSwapAndBridgeCommonData(r,a),{provider:s,userAccount:d,bridgeConfigInfo:c}=r,{bridgeAuthorityAccount:g}=o,{toChainId:l}=a,A=c.wormholeMessengerProgramId,u=await lt(A),m=await Hn(l,A),y=this.params.wormholeMessengerProgramId,{wormholeBridgeAccount:v,wormholeSequenceAccount:C,wormholeFeeCollectorAccount:T}=this.getWormholeProgramAddresses(y,g),Y=je.Keypair.generate(),h=await this.getWormholeFeeInstruction(s,v,d,T);return{...o,wormholeMessengerAccount:A,wormholeMessengerConfigAccount:u,wormholeProgramId:y,sequenceAccount:C,feeCollectorAccount:T,messengerGasUsageAccount:m,messageAccount:Y,wormholeBridgeAccount:v,feeInstruction:h}}async prepareBridgeCctpData(n,a){let r=await this.prepareSwapAndBridgeBaseData(n,a),{mintAccount:o}=r,{amount:s,toChainId:d}=a,c=n.destinationToken.chainSymbol,g=this.params.cctpParams.cctpDomains[c],l,A,u,m;if(n.messenger===3?(l=1,A=n.sourceToken.cctpAddress,u=this.params.cctpParams.cctpTransmitterProgramId,m=this.params.cctpParams.cctpTokenMessengerMinter):n.messenger===4&&(l=2,A=n.sourceToken.cctpV2Address,u=this.params.cctpParams.cctpV2TransmitterProgramId,m=this.params.cctpParams.cctpV2TokenMessengerMinter),g==null||!u||!m)throw new f(`CCTP ${l} is not configured`);if(!A)throw new we(`Such route does not support CCTP ${l} protocol`);let y=new je.PublicKey(A),v=l===1?await ji(o,y):Mi(o,y),C=await Tn(d,y),T=await Vi(v,y),Y=await Kt(o,y),h=new je.PublicKey(u),F=new je.PublicKey(m),{messageTransmitterAccount:G,tokenMessenger:N,tokenMessengerEventAuthority:k,tokenMinter:H,localToken:ae,remoteTokenMessengerKey:re,authorityPda:E}=ja(g,o,h,F),_=je.Keypair.generate(),$=Li(y,_.publicKey);return{...r,lockAccount:$,messageSentEventDataKeypair:_,amount:new ht.BN(s),chainBridgeAccount:C,cctpBridgeProgramId:y,cctpBridgeAuthorityAccount:T,cctpBridgeConfigAccount:v,cctpBridgeTokenAccount:Y,cctpTokenMessengerMinter:F,cctpTransmitterProgramId:h,messageTransmitterAccount:G,tokenMessenger:N,tokenMessengerEventAuthority:k,tokenMinter:H,localToken:ae,remoteTokenMessengerKey:re,authorityPda:E}}async buildSwapAndBridgeTx(n){let{provider:a,payerProgram:r,userAccount:o,vusdAmount:s,recipient:d,recipientChain:c,recipientToken:g,maxFeeAmount:l,extraGasAmountInFeeToken:A,nonce:u,lockAccount:m,chainBridgeAccount:y,bridgeProgramId:v,bridgeAuthorityAccount:C,bridgeTokenAccount:T,mintAccount:Y,feeTokenMintAccount:h,userTokenAccount:F,userFeeTokenAccount:G,gasPriceAccount:N,thisGasPriceAccount:k,sentMessageAccount:H,messengerProgramId:ae,messengerConfigAccount:re,messengerGasUsageAccount:E,bridgeConfigAccount:_,otherBridgeTokenAccount:$,poolAccount:ye}=n,ue=await r.methods.swapAndBridge({vusdAmount:s,recipient:d,recipientToken:g,maxFeeAmount:l,extraGasAmountInFeeToken:A,nonce:u,destinationChainId:c}).accountsPartial({lock:m,chainBridge:y,bridge:v,bridgeAuthority:C,bridgeToken:T,mint:Y,feeTokenMint:h,userTokenAccount:F,userFeeTokenAccount:G,gasPrice:N,thisGasPrice:k,sentMessageAccount:H,messenger:ae,messengerConfig:re,messengerGasUsage:E,bridgeConfig:_,otherBridgeToken:$,pool:ye}).preInstructions([this.getComputeUnitLimitInstruction()]).transaction();return await this.finalizeTransaction(ue,a,o)}async buildSwapAndBridgeWormholeTx(n){let{provider:a,payerProgram:r,userAccount:o,vusdAmount:s,recipient:d,recipientChain:c,recipientToken:g,maxFeeAmount:l,extraGasAmountInFeeToken:A,nonce:u,lockAccount:m,chainBridgeAccount:y,bridgeProgramId:v,bridgeAuthorityAccount:C,bridgeTokenAccount:T,mintAccount:Y,feeTokenMintAccount:h,userTokenAccount:F,userFeeTokenAccount:G,gasPriceAccount:N,thisGasPriceAccount:k,messengerGasUsageAccount:H,bridgeConfigAccount:ae,otherBridgeTokenAccount:re,poolAccount:E,wormholeMessengerAccount:_,wormholeMessengerConfigAccount:$,wormholeProgramId:ye,sequenceAccount:ue,feeCollectorAccount:q,messageAccount:le,wormholeBridgeAccount:fe,feeInstruction:Fe}=n,z=await r.methods.swapAndBridgeWormhole({vusdAmount:s,recipient:d,recipientToken:g,maxFeeAmount:l,extraGasAmountInFeeToken:A,nonce:u,destinationChainId:c}).accounts({lock:m,chainBridge:y,bridge:v,bridgeAuthority:C,bridgeToken:T,mint:Y,feeTokenMint:h,userTokenAccount:F,userFeeTokenAccount:G,gasPrice:N,thisGasPrice:k,messengerGasUsage:H,bridgeConfig:ae,otherBridgeToken:re,pool:E,wormholeMessenger:_,wormholeMessengerConfig:$,wormholeProgram:ye,sequence:ue,feeCollector:q,message:le.publicKey,wormholeBridge:fe}).preInstructions([this.getComputeUnitLimitInstruction(),Fe]).signers([le]).transaction();return{tx:await this.finalizeTransaction(z,a,o),requiredMessageSigner:le}}async buildBridgeCctpTx(n){let{provider:a,payerProgram:r,amount:o,recipient:s,recipientToken:d,userAccount:c,recipientChain:g,maxFeeAmount:l,extraGasAmountInFeeToken:A,lockAccount:u,mintAccount:m,feeTokenMintAccount:y,userTokenAccount:v,userFeeTokenAccount:C,gasPriceAccount:T,thisGasPriceAccount:Y,chainBridgeAccount:h,cctpBridgeProgramId:F,cctpBridgeAuthorityAccount:G,cctpBridgeConfigAccount:N,cctpBridgeTokenAccount:k,cctpTokenMessengerMinter:H,cctpTransmitterProgramId:ae,messageTransmitterAccount:re,tokenMessenger:E,tokenMessengerEventAuthority:_,tokenMinter:$,localToken:ye,remoteTokenMessengerKey:ue,authorityPda:q,messageSentEventDataKeypair:le}=n,fe=await r.methods.bridgeCctp({amount:o,recipient:s,receiveToken:d,destinationChainId:g,maxFeeAmount:l,extraGasAmountInFeeToken:A}).accounts({lock:u,messageSentEventData:le.publicKey,mint:m,feeTokenMint:y,userFeeTokenAccount:C,bridgeToken:k,cctpBridge:F,cctpBridgeConfig:N,cctpMessenger:H,messageTransmitterProgram:ae,messageTransmitterAccount:re,tokenMessenger:E,tokenMinter:$,localToken:ye,remoteTokenMessengerKey:ue,authorityPda:q,eventAuthority:_,gasPrice:T,thisGasPrice:Y,chainBridge:h,bridgeAuthority:G,userTokenAccount:v}).preInstructions([this.getComputeUnitLimitInstruction()]).transaction();return{tx:await this.finalizeTransaction(fe,a,c),requiredMessageSigner:le}}async buildBridgeCctpV2Tx(n){let{provider:a,payerProgram:r,amount:o,recipient:s,recipientToken:d,userAccount:c,recipientChain:g,maxFeeAmount:l,extraGasAmountInFeeToken:A,lockAccount:u,mintAccount:m,feeTokenMintAccount:y,userTokenAccount:v,userFeeTokenAccount:C,gasPriceAccount:T,thisGasPriceAccount:Y,chainBridgeAccount:h,cctpBridgeProgramId:F,cctpBridgeAuthorityAccount:G,cctpBridgeConfigAccount:N,cctpBridgeTokenAccount:k,cctpTokenMessengerMinter:H,cctpTransmitterProgramId:ae,messageTransmitterAccount:re,tokenMessenger:E,tokenMessengerEventAuthority:_,tokenMinter:$,localToken:ye,remoteTokenMessengerKey:ue,authorityPda:q,messageSentEventDataKeypair:le}=n,fe=await r.methods.bridgeCctpV2({amount:o,recipient:s,receiveToken:d,destinationChainId:g,maxFeeAmount:l,extraGasAmountInFeeToken:A}).accounts({mint:m,feeTokenMint:y,userFeeTokenAccount:C,bridgeToken:k,cctpBridge:F,tokenMessengerMinterProgram:H,messageTransmitterProgram:ae,messageTransmitterAccount:re,tokenMessenger:E,tokenMinter:$,localToken:ye,remoteTokenMessenger:ue,authorityPda:q,eventAuthority:_,messageSentEventData:le.publicKey,lock:u,cctpBridgeConfig:N,gasPrice:T,thisGasPrice:Y,chainBridge:h,bridgeAuthority:G,userTokenAccount:v}).preInstructions([this.getComputeUnitLimitInstruction()]).transaction();return{tx:await this.finalizeTransaction(fe,a,c),requiredMessageSigner:le}}async finalizeTransaction(n,a,r){let o=a.connection;return n.recentBlockhash=(await o.getLatestBlockhash()).blockhash,n.feePayer=r,await mn(n,o,this.params.solanaLookUpTable)}};var $i=class extends ke{constructor(a,r,o){super();this.solanaRpcUrl=a;this.params=r;this.api=o;this.connection=new Id.Connection(a),this.jupiterService=new Ei(o,r.jupiterParams),this.bridgeTxService=new Qi(a,r,o),this.payerWithTokenService=new _i(a,r,o)}solanaRpcUrl;params;api;chainType="SOLANA";connection;jupiterService;bridgeTxService;payerWithTokenService;async buildRawTransactionSwap(a){return this.bridgeTxService.buildRawTransactionSwap(a)}async buildRawTransactionSend(a){let r=await Ee(this.chainType,a,this.api),o=this.addPoolAddress(a,r),s=a.gasFeePaymentMethod??"native",d,c;switch(s){case"native":{let g=await this.buildTxWithNativePayment(a,o);d=g.tx,c=g.requiredMessageSigner;break}case"stablecoin":{let g=await this.buildTxWithStablePayment(a,o);d=g.tx,c=g.requiredMessageSigner;break}case"abr":{let g=await this.buildTxWithAbrPayment(a,o);d=g.tx,c=g.requiredMessageSigner;break}default:return se(s,"Unhandled FeePaymentMethod")}return await Ad(d,a.txFeeParams,this.solanaRpcUrl),c&&d.sign([c]),d}async buildTxWithNativePayment(a,r){return await this.bridgeTxService.buildRawTransactionSend(a,r)}async buildTxWithStablePayment(a,r){let{jupTx:o,solTxSendParams:s}=await this.jupiterService.buildJupAndUpdateTxSendParams(a,r),{tx:d,requiredMessageSigner:c}=await this.bridgeTxService.buildRawTransactionSend(a,s);if(!o)throw new Ge("Swap tx is absent");return{tx:await bd(this.connection,o,d),requiredMessageSigner:c}}async buildTxWithAbrPayment(a,r){return this.payerWithTokenService.buildRawTransactionSend(a,r)}send(a){throw new J}addPoolAddress(a,r){return{...r,poolAddress:a.sourceToken.poolAddress}}};var qi=require("@stellar/stellar-sdk"),hd=require("big.js");var t=require("@stellar/stellar-sdk"),Ol=t.contract.Spec,zl=t.contract.Client;var Oa=class extends zl{constructor(a){super(new Ol(["AAAAAAAAAAAAAAAKaW5pdGlhbGl6ZQAAAAAABAAAAAAAAAAFYWRtaW4AAAAAAAATAAAAAAAAAAltZXNzZW5nZXIAAAAAAAATAAAAAAAAAApnYXNfb3JhY2xlAAAAAAATAAAAAAAAAAxuYXRpdmVfdG9rZW4AAAATAAAAAQAAA+kAAAPtAAAAAAAAAAM=","AAAAAAAAAAAAAAAPc3dhcF9hbmRfYnJpZGdlAAAAAAkAAAAAAAAABnNlbmRlcgAAAAAAEwAAAAAAAAAFdG9rZW4AAAAAAAATAAAAAAAAAAZhbW91bnQAAAAAAAoAAAAAAAAACXJlY2lwaWVudAAAAAAAA+4AAAAgAAAAAAAAABRkZXN0aW5hdGlvbl9jaGFpbl9pZAAAAAQAAAAAAAAADXJlY2VpdmVfdG9rZW4AAAAAAAPuAAAAIAAAAAAAAAAFbm9uY2UAAAAAAAAMAAAAAAAAAApnYXNfYW1vdW50AAAAAAAKAAAAAAAAABBmZWVfdG9rZW5fYW1vdW50AAAACgAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAOcmVjZWl2ZV90b2tlbnMAAAAAAAgAAAAAAAAABnNlbmRlcgAAAAAAEwAAAAAAAAAGYW1vdW50AAAAAAAKAAAAAAAAAAlyZWNpcGllbnQAAAAAAAATAAAAAAAAAA9zb3VyY2VfY2hhaW5faWQAAAAABAAAAAAAAAANcmVjZWl2ZV90b2tlbgAAAAAAA+4AAAAgAAAAAAAAAAVub25jZQAAAAAAAAwAAAAAAAAAEnJlY2VpdmVfYW1vdW50X21pbgAAAAAACgAAAAAAAAAJZXh0cmFfZ2FzAAAAAAAD6AAAAAoAAAABAAAD6QAAA+0AAAAAAAAAAw==","AAAAAAAAAAAAAAAEc3dhcAAAAAYAAAAAAAAABnNlbmRlcgAAAAAAEwAAAAAAAAAGYW1vdW50AAAAAAAKAAAAAAAAAAV0b2tlbgAAAAAAA+4AAAAgAAAAAAAAAA1yZWNlaXZlX3Rva2VuAAAAAAAD7gAAACAAAAAAAAAACXJlY2lwaWVudAAAAAAAABMAAAAAAAAAEnJlY2VpdmVfYW1vdW50X21pbgAAAAAACgAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAJc3RvcF9zd2FwAAAAAAAAAAAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAKc3RhcnRfc3dhcAAAAAAAAAAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAOc2V0X2dhc19vcmFjbGUAAAAAAAEAAAAAAAAAC25ld19hZGRyZXNzAAAAABMAAAABAAAD6QAAA+0AAAAAAAAAAw==","AAAAAAAAAAAAAAASc2V0X3N0b3BfYXV0aG9yaXR5AAAAAAABAAAAAAAAAA5zdG9wX2F1dGhvcml0eQAAAAAAEwAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAOc2V0X3JlYmFsYW5jZXIAAAAAAAEAAAAAAAAACnJlYmFsYW5jZXIAAAAAABMAAAABAAAD6QAAA+0AAAAAAAAAAw==","AAAAAAAAAAAAAAANc2V0X21lc3NlbmdlcgAAAAAAAAEAAAAAAAAACW1lc3NlbmdlcgAAAAAAABMAAAABAAAD6QAAA+0AAAAAAAAAAw==","AAAAAAAAAAAAAAANc2V0X2dhc191c2FnZQAAAAAAAAIAAAAAAAAACGNoYWluX2lkAAAABAAAAAAAAAAJZ2FzX3VzYWdlAAAAAAAACgAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAPcmVnaXN0ZXJfYnJpZGdlAAAAAAIAAAAAAAAACGNoYWluX2lkAAAABAAAAAAAAAAOYnJpZGdlX2FkZHJlc3MAAAAAA+4AAAAgAAAAAQAAA+kAAAPtAAAAAAAAAAM=","AAAAAAAAAAAAAAAQYWRkX2JyaWRnZV90b2tlbgAAAAIAAAAAAAAACGNoYWluX2lkAAAABAAAAAAAAAANdG9rZW5fYWRkcmVzcwAAAAAAA+4AAAAgAAAAAQAAA+kAAAPtAAAAAAAAAAM=","AAAAAAAAAAAAAAATcmVtb3ZlX2JyaWRnZV90b2tlbgAAAAACAAAAAAAAAAhjaGFpbl9pZAAAAAQAAAAAAAAADXRva2VuX2FkZHJlc3MAAAAAAAPuAAAAIAAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAIYWRkX3Bvb2wAAAACAAAAAAAAAARwb29sAAAAEwAAAAAAAAAFdG9rZW4AAAAAAAATAAAAAQAAA+kAAAPtAAAAAAAAAAM=","AAAAAAAAAAAAAAATd2l0aGRyYXdfZ2FzX3Rva2VucwAAAAACAAAAAAAAAAZzZW5kZXIAAAAAABMAAAAAAAAABmFtb3VudAAAAAAACgAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAfd2l0aGRyYXdfYnJpZGdpbmdfZmVlX2luX3Rva2VucwAAAAACAAAAAAAAAAZzZW5kZXIAAAAAABMAAAAAAAAADXRva2VuX2FkZHJlc3MAAAAAAAATAAAAAQAAA+kAAAPtAAAAAAAAAAM=","AAAAAAAAAAAAAAAVaGFzX3Byb2Nlc3NlZF9tZXNzYWdlAAAAAAAAAQAAAAAAAAAHbWVzc2FnZQAAAAPuAAAAIAAAAAEAAAPpAAAAAQAAAAM=","AAAAAAAAAAAAAAAUaGFzX3JlY2VpdmVkX21lc3NhZ2UAAAABAAAAAAAAAAdtZXNzYWdlAAAAA+4AAAAgAAAAAQAAA+kAAAABAAAAAw==","AAAAAAAAAAAAAAAQZ2V0X3Bvb2xfYWRkcmVzcwAAAAEAAAAAAAAADXRva2VuX2FkZHJlc3MAAAAAAAPuAAAAIAAAAAEAAAPpAAAAEwAAAAM=","AAAAAAAAAAAAAAAKZ2V0X2NvbmZpZwAAAAAAAAAAAAEAAAPpAAAH0AAAAAZCcmlkZ2UAAAAAAAM=","AAAAAAAAAAAAAAASZ2V0X3N0b3BfYXV0aG9yaXR5AAAAAAAAAAAAAQAAA+kAAAATAAAAAw==","AAAAAAAAAAAAAAAUZ2V0X3RyYW5zYWN0aW9uX2Nvc3QAAAABAAAAAAAAAAhjaGFpbl9pZAAAAAQAAAABAAAD6QAAAAoAAAAD","AAAAAAAAAAAAAAANZ2V0X2dhc191c2FnZQAAAAAAAAEAAAAAAAAACGNoYWluX2lkAAAABAAAAAEAAAPpAAAACgAAAAM=","AAAAAAAAAAAAAAAJZ2V0X2FkbWluAAAAAAAAAAAAAAEAAAPpAAAAEwAAAAM=","AAAAAAAAAAAAAAAOZ2V0X2dhc19vcmFjbGUAAAAAAAAAAAABAAAD6QAAABMAAAAD","AAAAAAAAAAAAAAASZ2V0X2Fub3RoZXJfYnJpZGdlAAAAAAABAAAAAAAAAAhjaGFpbl9pZAAAAAQAAAABAAAD6QAAB9AAAAANQW5vdGhlckJyaWRnZQAAAAAAAAM=","AAAAAAAAAAAAAAAJc2V0X2FkbWluAAAAAAAAAQAAAAAAAAAJbmV3X2FkbWluAAAAAAAAEwAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAHdXBncmFkZQAAAAABAAAAAAAAAA1uZXdfd2FzbV9oYXNoAAAAAAAD7gAAACAAAAABAAAD6QAAA+0AAAAAAAAAAw==","AAAAAQAAAAAAAAAAAAAAB1N3YXBwZWQAAAAABgAAAAAAAAAOcmVjZWl2ZV9hbW91bnQAAAAAAAoAAAAAAAAADXJlY2VpdmVfdG9rZW4AAAAAAAPuAAAAIAAAAAAAAAAJcmVjaXBpZW50AAAAAAAAEwAAAAAAAAALc2VuZF9hbW91bnQAAAAACgAAAAAAAAAKc2VuZF90b2tlbgAAAAAD7gAAACAAAAAAAAAABnNlbmRlcgAAAAAAEw==","AAAAAQAAAAAAAAAAAAAAClRva2Vuc1NlbnQAAAAAAAUAAAAAAAAABmFtb3VudAAAAAAACgAAAAAAAAAUZGVzdGluYXRpb25fY2hhaW5faWQAAAAEAAAAAAAAAAVub25jZQAAAAAAAAwAAAAAAAAADXJlY2VpdmVfdG9rZW4AAAAAAAPuAAAAIAAAAAAAAAAJcmVjaXBpZW50AAAAAAAD7gAAACA=","AAAAAQAAAAAAAAAAAAAADlRva2Vuc1JlY2VpdmVkAAAAAAAEAAAAAAAAAAZhbW91bnQAAAAAAAoAAAAAAAAAB21lc3NhZ2UAAAAD7gAAACAAAAAAAAAABW5vbmNlAAAAAAAADAAAAAAAAAAJcmVjaXBpZW50AAAAAAAD7gAAACA=","AAAAAQAAAAAAAAAAAAAAClJlY2VpdmVGZWUAAAAAAAMAAAAAAAAAF2JyaWRnZV90cmFuc2FjdGlvbl9jb3N0AAAAAAoAAAAAAAAACWV4dHJhX2dhcwAAAAAAAAoAAAAAAAAAGG1lc3NhZ2VfdHJhbnNhY3Rpb25fY29zdAAAAAo=","AAAAAQAAAAAAAAAAAAAAFUJyaWRnaW5nRmVlRnJvbVRva2VucwAAAAAAAAIAAAAAAAAAEGZlZV90b2tlbl9hbW91bnQAAAAKAAAAAAAAAANnYXMAAAAACg==","AAAAAQAAAAAAAAAAAAAADUFub3RoZXJCcmlkZ2UAAAAAAAACAAAAAAAAAAdhZGRyZXNzAAAAA+4AAAAgAAAAAAAAAAZ0b2tlbnMAAAAAA+wAAAPuAAAAIAAAAAE=","AAAAAQAAAAAAAAAAAAAABkJyaWRnZQAAAAAABgAAAGBwcmVjb21wdXRlZCB2YWx1ZXMgb2YgdGhlIHNjYWxpbmcgZmFjdG9yIHJlcXVpcmVkIGZvciBwYXlpbmcgdGhlIGJyaWRnaW5nIGZlZSB3aXRoIHN0YWJsZSB0b2tlbnMAAAAeYnJpZGdpbmdfZmVlX2NvbnZlcnNpb25fZmFjdG9yAAAAAAPsAAAAEwAAAAoAAAAAAAAACGNhbl9zd2FwAAAAAQAAAGxwcmVjb21wdXRlZCB2YWx1ZXMgdG8gZGl2aWRlIGJ5IHRvIGNoYW5nZSB0aGUgcHJlY2lzaW9uIGZyb20gdGhlIEdhcyBPcmFjbGUgcHJlY2lzaW9uIHRvIHRoZSB0b2tlbiBwcmVjaXNpb24AAAAWZnJvbV9nYXNfb3JhY2xlX2ZhY3RvcgAAAAAD7AAAABMAAAAKAAAAAAAAAAltZXNzZW5nZXIAAAAAAAATAAAAAAAAAAVwb29scwAAAAAAA+wAAAPuAAAAIAAAABMAAAAAAAAACnJlYmFsYW5jZXIAAAAAABM=","AAAAAgAAAAAAAAAAAAAAB0RhdGFLZXkAAAAAAwAAAAEAAAAAAAAAC090aGVyQnJpZGdlAAAAAAEAAAAEAAAAAQAAAAAAAAALU2VudE1lc3NhZ2UAAAAAAQAAA+4AAAAgAAAAAQAAAAAAAAAPUmVjZWl2ZWRNZXNzYWdlAAAAAAEAAAPuAAAAIA==","AAAAAQAAAAAAAAAAAAAABUFkbWluAAAAAAAAAQAAAAAAAAABMAAAAAAAABM=","AAAAAQAAAAAAAAAAAAAAEEdhc09yYWNsZUFkZHJlc3MAAAABAAAAAAAAAAEwAAAAAAAAEw==","AAAAAQAAAAAAAAAAAAAACEdhc1VzYWdlAAAAAQAAAAAAAAABMAAAAAAAA+wAAAAEAAAACg==","AAAAAQAAAAAAAAAAAAAAC05hdGl2ZVRva2VuAAAAAAEAAAAAAAAAATAAAAAAAAAT","AAAAAQAAAAAAAAAAAAAADVN0b3BBdXRob3JpdHkAAAAAAAABAAAAAAAAAAEwAAAAAAAAEw==","AAAABAAAAAAAAAAAAAAABUVycm9yAAAAAAAAKAAAAAAAAAANVW5pbXBsZW1lbnRlZAAAAAAAAAAAAAAAAAAAC0luaXRpYWxpemVkAAAAAAEAAAAAAAAADVVuaW5pdGlhbGl6ZWQAAAAAAAACAAAAAAAAAAxVbmF1dGhvcml6ZWQAAAADAAAAAAAAAApJbnZhbGlkQXJnAAAAAAAEAAAAAAAAAA5JbnZhbGlkQ2hhaW5JZAAAAAAABQAAAAAAAAATSW52YWxpZE90aGVyQ2hhaW5JZAAAAAAGAAAAAAAAAA5HYXNVc2FnZU5vdFNldAAAAAAABwAAAAAAAAANQnJva2VuQWRkcmVzcwAAAAAAAAgAAAAAAAAACE5vdEZvdW5kAAAACQAAAAAAAAAYVG9rZW5JbnN1ZmZpY2llbnRCYWxhbmNlAAAACgAAAAAAAAAKQ2FzdEZhaWxlZAAAAAAACwAAAAAAAAAMVTI1Nk92ZXJmbG93AAAADAAAAAAAAAAKWmVyb0Ftb3VudAAAAAAAZwAAAAAAAAAMUG9vbE92ZXJmbG93AAAAaAAAAAAAAAALWmVyb0NoYW5nZXMAAAAAaQAAAAAAAAARUmVzZXJ2ZXNFeGhhdXN0ZWQAAAAAAABqAAAAAAAAABpJbnN1ZmZpY2llbnRSZWNlaXZlZEFtb3VudAAAAAAAawAAAAAAAAAUQmFsYW5jZVJhdGlvRXhjZWVkZWQAAABsAAAAAAAAAAlGb3JiaWRkZW4AAAAAAABtAAAAAAAAABlVbmF1dGhvcml6ZWRTdG9wQXV0aG9yaXR5AAAAAAAAywAAAAAAAAAOU3dhcFByb2hpYml0ZWQAAAAAAMwAAAAAAAAAEkFtb3VudFRvb0xvd0ZvckZlZQAAAAAAzQAAAAAAAAAWQnJpZGdlVG9UaGVaZXJvQWRkcmVzcwAAAAAAzgAAAAAAAAAORW1wdHlSZWNpcGllbnQAAAAAAM8AAAAAAAAAE1NvdXJjZU5vdFJlZ2lzdGVyZWQAAAAA0AAAAAAAAAAVV3JvbmdEZXN0aW5hdGlvbkNoYWluAAAAAAAA0QAAAAAAAAATVW5rbm93bkFub3RoZXJDaGFpbgAAAADSAAAAAAAAABFUb2tlbnNBbHJlYWR5U2VudAAAAAAAANMAAAAAAAAAEE1lc3NhZ2VQcm9jZXNzZWQAAADUAAAAAAAAAAxOb3RFbm91Z2hGZWUAAADWAAAAAAAAAAlOb01lc3NhZ2UAAAAAAADXAAAAAAAAAA1Ob1JlY2VpdmVQb29sAAAAAAAA2AAAAAAAAAAGTm9Qb29sAAAAAADZAAAAAAAAABNVbmtub3duQW5vdGhlclRva2VuAAAAANoAAAAAAAAAD1dyb25nQnl0ZUxlbmd0aAAAAAEsAAAAAAAAAApIYXNNZXNzYWdlAAAAAAEtAAAAAAAAABdJbnZhbGlkUHJpbWFyeVNpZ25hdHVyZQAAAAEuAAAAAAAAABlJbnZhbGlkU2Vjb25kYXJ5U2lnbmF0dXJlAAAAAAABLwAAAAAAAAARTm9HYXNEYXRhRm9yQ2hhaW4AAAAAAAGQ"]),a);this.options=a}options;fromJSON={initialize:this.txFromJSON,swap_and_bridge:this.txFromJSON,receive_tokens:this.txFromJSON,swap:this.txFromJSON,stop_swap:this.txFromJSON,start_swap:this.txFromJSON,set_gas_oracle:this.txFromJSON,set_stop_authority:this.txFromJSON,set_rebalancer:this.txFromJSON,set_messenger:this.txFromJSON,set_gas_usage:this.txFromJSON,register_bridge:this.txFromJSON,add_bridge_token:this.txFromJSON,remove_bridge_token:this.txFromJSON,add_pool:this.txFromJSON,withdraw_gas_tokens:this.txFromJSON,withdraw_bridging_fee_in_tokens:this.txFromJSON,has_processed_message:this.txFromJSON,has_received_message:this.txFromJSON,get_pool_address:this.txFromJSON,get_config:this.txFromJSON,get_stop_authority:this.txFromJSON,get_transaction_cost:this.txFromJSON,get_gas_usage:this.txFromJSON,get_admin:this.txFromJSON,get_gas_oracle:this.txFromJSON,get_another_bridge:this.txFromJSON,set_admin:this.txFromJSON,upgrade:this.txFromJSON}};var er=class extends ke{constructor(a,r,o){super();this.nodeRpcUrlsConfig=a;this.params=r;this.api=o}nodeRpcUrlsConfig;params;api;chainType="SRB";async buildRawTransactionSend(a){let r=await Ee(this.chainType,a,this.api);return await this.buildRawTransactionSendFromParams(r)}async buildRawTransactionSendFromParams(a){let{amount:r,contractAddress:o,fromAccountAddress:s,fromTokenAddress:d,toChainId:c,toAccountAddress:g,toTokenAddress:l,fee:A,gasFeePaymentMethod:u,extraGas:m}=a,y=A;m&&(y=(0,hd.Big)(y).plus(m).toFixed());let v=this.getContract(Oa,o,s),C;switch(u){case"native":C=await v.swap_and_bridge({sender:s,token:qi.Address.contract(Buffer.from(d)).toString(),amount:BigInt(r),recipient:Buffer.from(g),destination_chain_id:+c,receive_token:Buffer.from(l),nonce:Pt(),gas_amount:BigInt(y),fee_token_amount:BigInt(0)});break;case"stablecoin":C=await v.swap_and_bridge({sender:s,token:qi.Address.contract(Buffer.from(d)).toString(),amount:BigInt(r),recipient:Buffer.from(g),destination_chain_id:+c,receive_token:Buffer.from(l),nonce:Pt(),gas_amount:BigInt(0),fee_token_amount:BigInt(y)});break;case"abr":throw new f("SRB bridge does not support ABR payment method");default:return se(u,"Unhandled FeePaymentMethod")}return C.toXDR()}async buildRawTransactionSwap(a){let r=tt(this.chainType,a);return await this.buildRawTransactionSwapFromParams(r)}async buildRawTransactionSwapFromParams(a){let{amount:r,contractAddress:o,fromAccountAddress:s,fromTokenAddress:d,toAccountAddress:c,toTokenAddress:g,minimumReceiveAmount:l}=a;return(await this.getContract(Oa,o,s).swap({sender:s,amount:BigInt(r),token:qi.Address.contract(Buffer.from(d)).toBuffer(),receive_token:Buffer.from(g),recipient:c,receive_amount_min:BigInt(l)})).toXDR()}send(a){throw new J}getContract(a,r,o){let s={publicKey:o,contractId:r,networkPassphrase:this.params.sorobanNetworkPassphrase,rpcUrl:this.nodeRpcUrlsConfig.getNodeRpcUrl("SRB")};return new a(s)}};var Un=require("@clarigen/core"),fd=require("@stacks/network"),nt=require("@stacks/transactions");var At={bridge:{functions:{assertCanSwap:{name:"assert-can-swap",access:"private",args:[],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},assertGasOracle:{name:"assert-gas-oracle",access:"private",args:[{name:"gas-oracle-ref",type:"trait_reference"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},assertMessenger:{name:"assert-messenger",access:"private",args:[{name:"messenger-ref",type:"trait_reference"},{name:"messenger-id",type:"uint128"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},convertBridgingFeeInTokensToNative:{name:"convert-bridging-fee-in-tokens-to-native",access:"private",args:[{name:"ft-ref",type:"trait_reference"},{name:"gas-oracle-ref",type:"trait_reference"},{name:"fee-token-amount",type:"uint128"}],outputs:{type:{response:{ok:"uint128",error:"uint128"}}}},onlyOwner:{name:"only-owner",access:"private",args:[],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},onlyStopAuthority:{name:"only-stop-authority",access:"private",args:[],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},receiveAndSwapFromVusd:{name:"receive-and-swap-from-vusd",access:"private",args:[{name:"pool-ref",type:"trait_reference"},{name:"ft-ref",type:"trait_reference"},{name:"recipient",type:"principal"},{name:"vusd-amount",type:"uint128"},{name:"receive-amount-min",type:"uint128"}],outputs:{type:{response:{ok:"uint128",error:"uint128"}}}},sendAndSwapToVusd:{name:"send-and-swap-to-vusd",access:"private",args:[{name:"pool-ref",type:"trait_reference"},{name:"ft-ref",type:"trait_reference"},{name:"user",type:"principal"},{name:"amount",type:"uint128"}],outputs:{type:{response:{ok:"uint128",error:"uint128"}}}},sendTokens:{name:"send-tokens",access:"private",args:[{name:"messenger-ref",type:"trait_reference"},{name:"gas-oracle-ref",type:"trait_reference"},{name:"amount",type:"uint128"},{name:"recipient",type:{buffer:{length:32}}},{name:"destination-chain-id",type:"uint128"},{name:"receive-token",type:{buffer:{length:32}}},{name:"nonce",type:{buffer:{length:32}}},{name:"messenger-id",type:"uint128"},{name:"bridging-fee",type:"uint128"}],outputs:{type:{response:{ok:{tuple:[{name:"bridge-tx-cost",type:"uint128"},{name:"message-tx-cost",type:"uint128"}]},error:"uint128"}}}},addBridgeToken:{name:"add-bridge-token",access:"public",args:[{name:"chain-id_",type:"uint128"},{name:"token-address",type:{buffer:{length:32}}}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},addPool:{name:"add-pool",access:"public",args:[{name:"pool-ref",type:"trait_reference"},{name:"ft-ref",type:"trait_reference"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},getTransactionCost:{name:"get-transaction-cost",access:"public",args:[{name:"gas-oracle-ref",type:"trait_reference"},{name:"chain-id_",type:"uint128"}],outputs:{type:{response:{ok:"uint128",error:"uint128"}}}},init:{name:"init",access:"public",args:[{name:"this-chain-id_",type:"uint128"},{name:"gas-oracle",type:"principal"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},receiveTokens:{name:"receive-tokens",access:"public",args:[{name:"messenger-ref",type:"trait_reference"},{name:"amount",type:"uint128"},{name:"recipient",type:"principal"},{name:"source-chain-id",type:"uint128"},{name:"pool-ref",type:"trait_reference"},{name:"ft-ref",type:"trait_reference"},{name:"nonce",type:{buffer:{length:32}}},{name:"messenger-id",type:"uint128"},{name:"receive-amount-min",type:"uint128"},{name:"extra-gas",type:"uint128"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},registerBridge:{name:"register-bridge",access:"public",args:[{name:"chain-id_",type:"uint128"},{name:"bridge-address",type:{buffer:{length:32}}}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},removeBridge:{name:"remove-bridge",access:"public",args:[{name:"chain-id_",type:"uint128"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},removeBridgeToken:{name:"remove-bridge-token",access:"public",args:[{name:"chain-id_",type:"uint128"},{name:"token-address",type:{buffer:{length:32}}}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},removeMessenger:{name:"remove-messenger",access:"public",args:[{name:"messenger-id",type:"uint128"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},setGasUsage:{name:"set-gas-usage",access:"public",args:[{name:"chain-id_",type:"uint128"},{name:"gas",type:"uint128"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},setMessenger:{name:"set-messenger",access:"public",args:[{name:"messenger-id",type:"uint128"},{name:"new-messenger",type:"principal"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},setOwner:{name:"set-owner",access:"public",args:[{name:"new-owner",type:"principal"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},setRebalancer:{name:"set-rebalancer",access:"public",args:[{name:"new-rebalancer",type:"principal"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},setStopAuthority:{name:"set-stop-authority",access:"public",args:[{name:"new-authority",type:"principal"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},startSwap:{name:"start-swap",access:"public",args:[],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},stopSwap:{name:"stop-swap",access:"public",args:[],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},swap:{name:"swap",access:"public",args:[{name:"amount",type:"uint128"},{name:"send-pool-ref",type:"trait_reference"},{name:"send-ft-ref",type:"trait_reference"},{name:"receive-pool-ref",type:"trait_reference"},{name:"receive-ft-ref",type:"trait_reference"},{name:"recipient",type:"principal"},{name:"receive-amount-min",type:"uint128"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},swapAndBridge:{name:"swap-and-bridge",access:"public",args:[{name:"pool-ref",type:"trait_reference"},{name:"ft-ref",type:"trait_reference"},{name:"messenger-ref",type:"trait_reference"},{name:"gas-oracle-ref",type:"trait_reference"},{name:"amount",type:"uint128"},{name:"recipient",type:{buffer:{length:32}}},{name:"destination-chain-id",type:"uint128"},{name:"receive-token",type:{buffer:{length:32}}},{name:"nonce",type:{buffer:{length:32}}},{name:"messenger-id",type:"uint128"},{name:"fee-native-amount",type:"uint128"},{name:"fee-token-amount",type:"uint128"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},withdrawBridgingFeeInTokens:{name:"withdraw-bridging-fee-in-tokens",access:"public",args:[{name:"ft-ref",type:"trait_reference"},{name:"amount",type:"uint128"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},withdrawGasTokens:{name:"withdraw-gas-tokens",access:"public",args:[{name:"amount",type:"uint128"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},getGasOracleAddress:{name:"get-gas-oracle-address",access:"read_only",args:[],outputs:{type:"principal"}},getGasUsage:{name:"get-gas-usage",access:"read_only",args:[{name:"chain-id_",type:"uint128"}],outputs:{type:{response:{ok:"uint128",error:"uint128"}}}},getMessenger:{name:"get-messenger",access:"read_only",args:[{name:"messenger-id",type:"uint128"}],outputs:{type:{response:{ok:"principal",error:"uint128"}}}},getOtherBridge:{name:"get-other-bridge",access:"read_only",args:[{name:"chain-id_",type:"uint128"}],outputs:{type:{response:{ok:{buffer:{length:32}},error:"uint128"}}}},getOwner:{name:"get-owner",access:"read_only",args:[],outputs:{type:"principal"}},getProcessedMessageStatus:{name:"get-processed-message-status",access:"read_only",args:[{name:"message-hash",type:{buffer:{length:32}}}],outputs:{type:{response:{ok:"bool",error:"none"}}}},getRebalancer:{name:"get-rebalancer",access:"read_only",args:[],outputs:{type:"principal"}},getSentMessageStatus:{name:"get-sent-message-status",access:"read_only",args:[{name:"message-hash",type:{buffer:{length:32}}}],outputs:{type:{response:{ok:"bool",error:"none"}}}},getStopAuthority:{name:"get-stop-authority",access:"read_only",args:[],outputs:{type:"principal"}},getThisChainId:{name:"get-this-chain-id",access:"read_only",args:[],outputs:{type:"uint128"}},getTokenInfo:{name:"get-token-info",access:"read_only",args:[{name:"token-principal-hash",type:{buffer:{length:32}}}],outputs:{type:{response:{ok:{tuple:[{name:"bridging-fee-conversion-scaling-factor",type:"uint128"},{name:"from-gas-oracle-scaling-factor",type:"uint128"},{name:"pool",type:"principal"},{name:"token",type:"principal"}]},error:"uint128"}}}},isBridgeTokenSupported:{name:"is-bridge-token-supported",access:"read_only",args:[{name:"chain-id_",type:"uint128"},{name:"token-address",type:{buffer:{length:32}}}],outputs:{type:{response:{ok:"bool",error:"none"}}}},isSwapEnabled:{name:"is-swap-enabled",access:"read_only",args:[],outputs:{type:"bool"}}},maps:{gasUsageMap:{name:"gas-usage-map",key:"uint128",value:"uint128"},messengers:{name:"messengers",key:"uint128",value:"principal"},otherBridgeTokens:{name:"other-bridge-tokens",key:{tuple:[{name:"chain-id",type:"uint128"},{name:"token-address",type:{buffer:{length:32}}}]},value:"bool"},otherBridges:{name:"other-bridges",key:"uint128",value:{buffer:{length:32}}},processedMessages:{name:"processed-messages",key:{buffer:{length:32}},value:"bool"},sentMessages:{name:"sent-messages",key:{buffer:{length:32}},value:"bool"},tokenInfos:{name:"token-infos",key:{buffer:{length:32}},value:{tuple:[{name:"bridging-fee-conversion-scaling-factor",type:"uint128"},{name:"from-gas-oracle-scaling-factor",type:"uint128"},{name:"pool",type:"principal"},{name:"token",type:"principal"}]}}},variables:{chainPrecision:{name:"chain-precision",type:"uint128",access:"constant"},errAlreadyInitialized:{name:"err-already-initialized",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errAlreadyProcessed:{name:"err-already-processed",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errAlreadySent:{name:"err-already-sent",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errBridgeSourceNotRegistered:{name:"err-bridge-source-not-registered",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errDepositAmountTooSmall:{name:"err-deposit-amount-too-small",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errGasUsageNotSet:{name:"err-gas-usage-not-set",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errMessengerNotRegistered:{name:"err-messenger-not-registered",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errNoMessage:{name:"err-no-message",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errNotEnoughFee:{name:"err-not-enough-fee",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errNotInitialized:{name:"err-not-initialized",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errSwapProhibited:{name:"err-swap-prohibited",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errTokenNotSupported:{name:"err-token-not-supported",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errUnauthorized:{name:"err-unauthorized",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errWrongGasOracle:{name:"err-wrong-gas-oracle",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errWrongMessenger:{name:"err-wrong-messenger",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errWrongTokenForPool:{name:"err-wrong-token-for-pool",type:{response:{ok:"none",error:"uint128"}},access:"constant"},oraclePrecision:{name:"oracle-precision",type:"uint128",access:"constant"},canSwap:{name:"can-swap",type:"bool",access:"variable"},gasOraclePrincipal:{name:"gas-oracle-principal",type:{optional:"principal"},access:"variable"},owner:{name:"owner",type:"principal",access:"variable"},rebalancer:{name:"rebalancer",type:"principal",access:"variable"},stopAuthority:{name:"stop-authority",type:"principal",access:"variable"},thisChainId:{name:"this-chain-id",type:{optional:"uint128"},access:"variable"}},constants:{canSwap:!1,chainPrecision:6n,errAlreadyInitialized:{isOk:!1,value:1004n},errAlreadyProcessed:{isOk:!1,value:1010n},errAlreadySent:{isOk:!1,value:1005n},errBridgeSourceNotRegistered:{isOk:!1,value:1009n},errDepositAmountTooSmall:{isOk:!1,value:1001n},errGasUsageNotSet:{isOk:!1,value:1008n},errMessengerNotRegistered:{isOk:!1,value:1014n},errNoMessage:{isOk:!1,value:1011n},errNotEnoughFee:{isOk:!1,value:1007n},errNotInitialized:{isOk:!1,value:1006n},errSwapProhibited:{isOk:!1,value:1012n},errTokenNotSupported:{isOk:!1,value:1002n},errUnauthorized:{isOk:!1,value:1000n},errWrongGasOracle:{isOk:!1,value:1013n},errWrongMessenger:{isOk:!1,value:1015n},errWrongTokenForPool:{isOk:!1,value:1003n},gasOraclePrincipal:null,oraclePrecision:18n,owner:"ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM",rebalancer:"ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM",stopAuthority:"ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM",thisChainId:null},non_fungible_tokens:[],fungible_tokens:[],epoch:"Epoch31",clarity_version:"Clarity3",contractName:"bridge"},ftToken:{functions:{getTokenUri:{name:"get-token-uri",access:"public",args:[],outputs:{type:{response:{ok:{optional:{"string-utf8":{length:19}}},error:"none"}}}},mint:{name:"mint",access:"public",args:[{name:"amount",type:"uint128"},{name:"recipient",type:"principal"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},transfer:{name:"transfer",access:"public",args:[{name:"amount",type:"uint128"},{name:"sender",type:"principal"},{name:"recipient",type:"principal"},{name:"memo",type:{optional:{buffer:{length:34}}}}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},getBalance:{name:"get-balance",access:"read_only",args:[{name:"owner",type:"principal"}],outputs:{type:{response:{ok:"uint128",error:"none"}}}},getDecimals:{name:"get-decimals",access:"read_only",args:[],outputs:{type:{response:{ok:"uint128",error:"none"}}}},getName:{name:"get-name",access:"read_only",args:[],outputs:{type:{response:{ok:{"string-ascii":{length:13}},error:"none"}}}},getSymbol:{name:"get-symbol",access:"read_only",args:[],outputs:{type:{response:{ok:{"string-ascii":{length:7}},error:"none"}}}},getTotalSupply:{name:"get-total-supply",access:"read_only",args:[],outputs:{type:{response:{ok:"uint128",error:"none"}}}}},maps:{},variables:{},constants:{},non_fungible_tokens:[],fungible_tokens:[{name:"example-token"}],epoch:"Epoch31",clarity_version:"Clarity3",contractName:"ft-token"},gasOracle:{functions:{setChainData:{name:"set-chain-data",access:"public",args:[{name:"chain-id_",type:"uint128"},{name:"new-price",type:"uint128"},{name:"new-gas-price",type:"uint128"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},setGasPrice:{name:"set-gas-price",access:"public",args:[{name:"chain-id_",type:"uint128"},{name:"new-gas-price",type:"uint128"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},setPrice:{name:"set-price",access:"public",args:[{name:"chain-id_",type:"uint128"},{name:"new-price",type:"uint128"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},crossRate:{name:"cross-rate",access:"read_only",args:[{name:"other-chain-id",type:"uint128"}],outputs:{type:{response:{ok:"uint128",error:"uint128"}}}},getChainData:{name:"get-chain-data",access:"read_only",args:[{name:"chain-id_",type:"uint128"}],outputs:{type:{response:{ok:{tuple:[{name:"gas-price",type:"uint128"},{name:"price",type:"uint128"}]},error:"uint128"}}}},getGasPrice:{name:"get-gas-price",access:"read_only",args:[{name:"chain-id_",type:"uint128"}],outputs:{type:{response:{ok:"uint128",error:"uint128"}}}},getPrice:{name:"get-price",access:"read_only",args:[{name:"chain-id_",type:"uint128"}],outputs:{type:{response:{ok:"uint128",error:"uint128"}}}},getTransactionGasCostInNativeToken:{name:"get-transaction-gas-cost-in-native-token",access:"read_only",args:[{name:"other-chain-id",type:"uint128"},{name:"gas-amount",type:"uint128"}],outputs:{type:{response:{ok:"uint128",error:"uint128"}}}},getTransactionGasCostInUsd:{name:"get-transaction-gas-cost-in-usd",access:"read_only",args:[{name:"other-chain-id",type:"uint128"},{name:"gas-amount",type:"uint128"}],outputs:{type:{response:{ok:"uint128",error:"uint128"}}}}},maps:{chainData:{name:"chain-data",key:"uint128",value:{tuple:[{name:"gas-price",type:"uint128"},{name:"price",type:"uint128"}]}}},variables:{errNotFound:{name:"err-not-found",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errUnauthorized:{name:"err-unauthorized",type:{response:{ok:"none",error:"uint128"}},access:"constant"},oracleScalingFactor:{name:"oracle-scaling-factor",type:"uint128",access:"constant"},contractOwner:{name:"contract-owner",type:"principal",access:"variable"},fromOracleToChainScalingFactor:{name:"from-oracle-to-chain-scaling-factor",type:"uint128",access:"variable"},thisChainId:{name:"this-chain-id",type:"uint128",access:"variable"}},constants:{contractOwner:"ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM",errNotFound:{isOk:!1,value:4001n},errUnauthorized:{isOk:!1,value:4000n},fromOracleToChainScalingFactor:1000000000000n,oracleScalingFactor:1000000000000000000n,thisChainId:16n},non_fungible_tokens:[],fungible_tokens:[],epoch:"Epoch31",clarity_version:"Clarity3",contractName:"gas-oracle"},gasOracleTrait:{functions:{},maps:{},variables:{},constants:{},non_fungible_tokens:[],fungible_tokens:[],epoch:"Epoch31",clarity_version:"Clarity3",contractName:"gas-oracle-trait"},messenger:{functions:{assertGasOracle:{name:"assert-gas-oracle",access:"private",args:[{name:"gas-oracle-ref",type:"trait_reference"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},onlyOwner:{name:"only-owner",access:"private",args:[],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},addSecondaryValidator:{name:"add-secondary-validator",access:"public",args:[{name:"val",type:{buffer:{length:33}}}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},getTransactionCost:{name:"get-transaction-cost",access:"public",args:[{name:"gas-oracle-ref",type:"trait_reference"},{name:"chain-id_",type:"uint128"}],outputs:{type:{response:{ok:"uint128",error:"uint128"}}}},init:{name:"init",access:"public",args:[{name:"this-chain-id_",type:"uint128"},{name:"gas-oracle",type:"principal"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},receiveMessage:{name:"receive-message",access:"public",args:[{name:"message",type:{buffer:{length:32}}},{name:"signature1",type:{buffer:{length:65}}},{name:"signature2",type:{buffer:{length:65}}}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},removeSecondaryValidator:{name:"remove-secondary-validator",access:"public",args:[{name:"val",type:{buffer:{length:33}}}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},sendMessage:{name:"send-message",access:"public",args:[{name:"gas-oracle-ref",type:"trait_reference"},{name:"message",type:{buffer:{length:32}}}],outputs:{type:{response:{ok:"uint128",error:"uint128"}}}},setGasUsage:{name:"set-gas-usage",access:"public",args:[{name:"chain-id_",type:"uint128"},{name:"gas",type:"uint128"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},setOtherChainIds:{name:"set-other-chain-ids",access:"public",args:[{name:"value",type:{buffer:{length:32}}}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},setPrimaryValidator:{name:"set-primary-validator",access:"public",args:[{name:"val",type:{buffer:{length:33}}}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},withdrawGasTokens:{name:"withdraw-gas-tokens",access:"public",args:[{name:"amount",type:"uint128"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},getGasOracle:{name:"get-gas-oracle",access:"read_only",args:[],outputs:{type:{response:{ok:"principal",error:"uint128"}}}},getGasUsage:{name:"get-gas-usage",access:"read_only",args:[{name:"chain-id_",type:"uint128"}],outputs:{type:{response:{ok:"uint128",error:"uint128"}}}},getOtherChainIds:{name:"get-other-chain-ids",access:"read_only",args:[],outputs:{type:{response:{ok:{buffer:{length:32}},error:"none"}}}},getSentMessageBlock:{name:"get-sent-message-block",access:"read_only",args:[{name:"message",type:{buffer:{length:32}}}],outputs:{type:{response:{ok:"uint128",error:"uint128"}}}},getThisChainId:{name:"get-this-chain-id",access:"read_only",args:[],outputs:{type:{response:{ok:"uint128",error:"uint128"}}}},isMessageReceived:{name:"is-message-received",access:"read_only",args:[{name:"message",type:{buffer:{length:32}}}],outputs:{type:{response:{ok:"bool",error:"none"}}}}},maps:{gasUsageMap:{name:"gas-usage-map",key:"uint128",value:"uint128"},receivedMessages:{name:"received-messages",key:{buffer:{length:32}},value:"bool"},secondaryValidators:{name:"secondary-validators",key:{buffer:{length:33}},value:"bool"},sentMessagesBlock:{name:"sent-messages-block",key:{buffer:{length:32}},value:"uint128"}},variables:{errAlreadyInitialized:{name:"err-already-initialized",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errAlreadySent:{name:"err-already-sent",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errGasUsageNotSet:{name:"err-gas-usage-not-set",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errInvalidChainId:{name:"err-invalid-chain-id",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errInvalidDestination:{name:"err-invalid-destination",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errInvalidPrimary:{name:"err-invalid-primary",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errInvalidSecondary:{name:"err-invalid-secondary",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errMessageNotFound:{name:"err-message-not-found",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errNotInitialized:{name:"err-not-initialized",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errUnauthorized:{name:"err-unauthorized",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errWrongBufferLength:{name:"err-wrong-buffer-length",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errWrongGasOracle:{name:"err-wrong-gas-oracle",type:{response:{ok:"none",error:"uint128"}},access:"constant"},gasOraclePrincipal:{name:"gas-oracle-principal",type:{optional:"principal"},access:"variable"},otherChainIds:{name:"other-chain-ids",type:{buffer:{length:32}},access:"variable"},owner:{name:"owner",type:"principal",access:"variable"},primaryValidator:{name:"primary-validator",type:{buffer:{length:33}},access:"variable"},thisChainId:{name:"this-chain-id",type:{optional:"uint128"},access:"variable"}},constants:{errAlreadyInitialized:{isOk:!1,value:3008n},errAlreadySent:{isOk:!1,value:3003n},errGasUsageNotSet:{isOk:!1,value:3010n},errInvalidChainId:{isOk:!1,value:3002n},errInvalidDestination:{isOk:!1,value:3004n},errInvalidPrimary:{isOk:!1,value:3005n},errInvalidSecondary:{isOk:!1,value:3006n},errMessageNotFound:{isOk:!1,value:3001n},errNotInitialized:{isOk:!1,value:3011n},errUnauthorized:{isOk:!1,value:3000n},errWrongBufferLength:{isOk:!1,value:3009n},errWrongGasOracle:{isOk:!1,value:3007n},gasOraclePrincipal:null,otherChainIds:Uint8Array.from([0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]),owner:"ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM",primaryValidator:Uint8Array.from([0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]),thisChainId:null},non_fungible_tokens:[],fungible_tokens:[],epoch:"Epoch31",clarity_version:"Clarity3",contractName:"messenger"},messengerTrait:{functions:{},maps:{},variables:{},constants:{},non_fungible_tokens:[],fungible_tokens:[],epoch:"Epoch31",clarity_version:"Clarity3",contractName:"messenger-trait"},pool:{functions:{addRewards:{name:"add-rewards",access:"private",args:[{name:"amount",type:"uint128"}],outputs:{type:{response:{ok:"bool",error:"none"}}}},assertBalanceReatio:{name:"assert-balance-reatio",access:"private",args:[],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},assertCanDeposit:{name:"assert-can-deposit",access:"private",args:[],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},assertCanSwap:{name:"assert-can-swap",access:"private",args:[],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},assertCanWithdraw:{name:"assert-can-withdraw",access:"private",args:[],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},assertToken:{name:"assert-token",access:"private",args:[{name:"ft-ref",type:"trait_reference"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},depositLp:{name:"deposit-lp",access:"private",args:[{name:"ft-ref",type:"trait_reference"},{name:"to",type:"principal"},{name:"lp-amount",type:"uint128"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},leCube_q:{name:"le-cube?",access:"private",args:[{name:"x",type:"uint128"},{name:"n",type:"uint128"}],outputs:{type:"bool"}},newtonStep:{name:"newton-step",access:"private",args:[{name:"n",type:"uint128"},{name:"x",type:"uint128"}],outputs:{type:"uint128"}},onlyBridge:{name:"only-bridge",access:"private",args:[],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},onlyOwner:{name:"only-owner",access:"private",args:[],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},onlyStopAuthority:{name:"only-stop-authority",access:"private",args:[],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},refine:{name:"refine",access:"private",args:[{name:"n",type:"uint128"},{name:"x",type:"uint128"}],outputs:{type:"uint128"}},withdrawLp:{name:"withdraw-lp",access:"private",args:[{name:"ft-ref",type:"trait_reference"},{name:"from",type:"principal"},{name:"lp-amount",type:"uint128"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},adjustTotalLpAmount:{name:"adjust-total-lp-amount",access:"public",args:[{name:"ft-ref",type:"trait_reference"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},claimAdminFee:{name:"claim-admin-fee",access:"public",args:[{name:"ft-ref",type:"trait_reference"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},claimRewards:{name:"claim-rewards",access:"public",args:[{name:"ft-ref",type:"trait_reference"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},deposit:{name:"deposit",access:"public",args:[{name:"amount",type:"uint128"},{name:"ft-ref",type:"trait_reference"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},init:{name:"init",access:"public",args:[{name:"token",type:"trait_reference"},{name:"bridge-address",type:"principal"},{name:"fee-share-bp-arg",type:"uint128"},{name:"balance-ratio-min-bp-arg",type:"uint128"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},serBalanceRetioMinBp:{name:"ser-balance-retio-min-bp",access:"public",args:[{name:"new-balance-ratio-min-bp",type:"uint128"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},setAdminFeeSahreBp:{name:"set-admin-fee-sahre-bp",access:"public",args:[{name:"new-admin-fee-share-bp",type:"uint128"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},setBridge:{name:"set-bridge",access:"public",args:[{name:"new-bridge",type:"principal"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},setFeeShare:{name:"set-fee-share",access:"public",args:[{name:"fee-share-bp_",type:"uint128"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},setOwner:{name:"set-owner",access:"public",args:[{name:"new-owner",type:"principal"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},setStopAuthority:{name:"set-stop-authority",access:"public",args:[{name:"new-stop-authority",type:"principal"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},startDeposit:{name:"start-deposit",access:"public",args:[],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},startSwap:{name:"start-swap",access:"public",args:[],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},startWithdraw:{name:"start-withdraw",access:"public",args:[],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},stopDeposit:{name:"stop-deposit",access:"public",args:[],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},stopSwap:{name:"stop-swap",access:"public",args:[],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},stopWithdraw:{name:"stop-withdraw",access:"public",args:[],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},swapFromVusd:{name:"swap-from-vusd",access:"public",args:[{name:"ft-ref",type:"trait_reference"},{name:"user",type:"principal"},{name:"amount",type:"uint128"},{name:"receive-amount-min",type:"uint128"},{name:"zero-fee",type:"bool"}],outputs:{type:{response:{ok:"uint128",error:"uint128"}}}},swapToVusd:{name:"swap-to-vusd",access:"public",args:[{name:"ft-ref",type:"trait_reference"},{name:"user",type:"principal"},{name:"amount",type:"uint128"},{name:"zero-fee",type:"bool"}],outputs:{type:{response:{ok:"uint128",error:"uint128"}}}},withdraw:{name:"withdraw",access:"public",args:[{name:"amount-lp",type:"uint128"},{name:"ft-ref",type:"trait_reference"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},calcD:{name:"calc-d",access:"read_only",args:[{name:"x",type:"uint128"},{name:"y",type:"uint128"}],outputs:{type:"uint128"}},calcY:{name:"calc-y",access:"read_only",args:[{name:"x",type:"uint128"},{name:"d_",type:"uint128"}],outputs:{type:"uint128"}},cbrt:{name:"cbrt",access:"read_only",args:[{name:"n",type:"uint128"}],outputs:{type:"uint128"}},fromSystemPrecision:{name:"from-system-precision",access:"read_only",args:[{name:"amount",type:"uint128"}],outputs:{type:"uint128"}},getAccRewardPerShareP:{name:"get-acc-reward-per-share-p",access:"read_only",args:[],outputs:{type:"uint128"}},getAdminFeeAmount:{name:"get-admin-fee-amount",access:"read_only",args:[],outputs:{type:"uint128"}},getAdminFeeShareBp:{name:"get-admin-fee-share-bp",access:"read_only",args:[],outputs:{type:"uint128"}},getBalanceRatioMinBp:{name:"get-balance-ratio-min-bp",access:"read_only",args:[],outputs:{type:"uint128"}},getBridge:{name:"get-bridge",access:"read_only",args:[],outputs:{type:{optional:"principal"}}},getCanDeposit:{name:"get-can-deposit",access:"read_only",args:[],outputs:{type:"bool"}},getCanSwap:{name:"get-can-swap",access:"read_only",args:[],outputs:{type:"bool"}},getCanWithdraw:{name:"get-can-withdraw",access:"read_only",args:[],outputs:{type:"bool"}},getD:{name:"get-d",access:"read_only",args:[],outputs:{type:"uint128"}},getFeeShareBp:{name:"get-fee-share-bp",access:"read_only",args:[],outputs:{type:"uint128"}},getLpBalance:{name:"get-lp-balance",access:"read_only",args:[{name:"user",type:"principal"}],outputs:{type:"uint128"}},getLpTotalSupply:{name:"get-lp-total-supply",access:"read_only",args:[],outputs:{type:"uint128"}},getOwner:{name:"get-owner",access:"read_only",args:[],outputs:{type:"principal"}},getReserves:{name:"get-reserves",access:"read_only",args:[],outputs:{type:"uint128"}},getStopAuthority:{name:"get-stop-authority",access:"read_only",args:[],outputs:{type:"principal"}},getTokenAddress:{name:"get-token-address",access:"read_only",args:[],outputs:{type:{response:{ok:"principal",error:"uint128"}}}},getTokenBalance:{name:"get-token-balance",access:"read_only",args:[],outputs:{type:"uint128"}},getUserRewardDebt:{name:"get-user-reward-debt",access:"read_only",args:[{name:"user",type:"principal"}],outputs:{type:"uint128"}},getVusdBalance:{name:"get-vusd-balance",access:"read_only",args:[],outputs:{type:"uint128"}},pendingRewards:{name:"pending-rewards",access:"read_only",args:[{name:"user",type:"principal"}],outputs:{type:{response:{ok:"uint128",error:"none"}}}},toSystemPrecision:{name:"to-system-precision",access:"read_only",args:[{name:"amount",type:"uint128"}],outputs:{type:"uint128"}}},maps:{lpBalances:{name:"lp-balances",key:"principal",value:"uint128"},userRewardDebt:{name:"user-reward-debt",key:"principal",value:"uint128"}},variables:{BP:{name:"BP",type:"uint128",access:"constant"},P:{name:"P",type:"uint128",access:"constant"},a:{name:"a",type:"uint128",access:"constant"},errAlreadyInitialized:{name:"err-already-initialized",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errDepositAmountTooSmall:{name:"err-deposit-amount-too-small",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errDepositProhibited:{name:"err-deposit-prohibited",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errLowTokenBalance:{name:"err-low-token-balance",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errLowVusdBalance:{name:"err-low-vusd-balance",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errNotEnoughLp:{name:"err-not-enough-lp",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errNotEnoughReserves:{name:"err-not-enough-reserves",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errNotInitialized:{name:"err-not-initialized",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errPoolBalanceTooBig:{name:"err-pool-balance-too-big",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errSlippage:{name:"err-slippage",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errSwapProhibited:{name:"err-swap-prohibited",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errTooLarge:{name:"err-too-large",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errUnauthorized:{name:"err-unauthorized",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errWithdrawProhibited:{name:"err-withdraw-prohibited",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errWrongToken:{name:"err-wrong-token",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errZeroChanges:{name:"err-zero-changes",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errZeroDChanges:{name:"err-zero-d-changes",type:{response:{ok:"none",error:"uint128"}},access:"constant"},maxTokenBalance:{name:"max-token-balance",type:"uint128",access:"constant"},systemPrecision:{name:"system-precision",type:"uint128",access:"constant"},accRewardPerShareP:{name:"acc-reward-per-share-p",type:"uint128",access:"variable"},adminFeeAmount:{name:"admin-fee-amount",type:"uint128",access:"variable"},adminFeeShareBp:{name:"admin-fee-share-bp",type:"uint128",access:"variable"},balanceRatioMinBp:{name:"balance-ratio-min-bp",type:"uint128",access:"variable"},bridge:{name:"bridge",type:{optional:"principal"},access:"variable"},canDeposit:{name:"can-deposit",type:"bool",access:"variable"},canSwap:{name:"can-swap",type:"bool",access:"variable"},canWithdraw:{name:"can-withdraw",type:"bool",access:"variable"},d:{name:"d",type:"uint128",access:"variable"},feeShareBp:{name:"fee-share-bp",type:"uint128",access:"variable"},lpTotalSupply:{name:"lp-total-supply",type:"uint128",access:"variable"},owner:{name:"owner",type:"principal",access:"variable"},reserves:{name:"reserves",type:"uint128",access:"variable"},stopAuthority:{name:"stop-authority",type:"principal",access:"variable"},tokenAmountIncrease:{name:"token-amount-increase",type:"uint128",access:"variable"},tokenAmountReduce:{name:"token-amount-reduce",type:"uint128",access:"variable"},tokenBalance:{name:"token-balance",type:"uint128",access:"variable"},tokenPrincipal:{name:"token-principal",type:{optional:"principal"},access:"variable"},vusdBalance:{name:"vusd-balance",type:"uint128",access:"variable"}},constants:{BP:10000n,P:48n,a:20n,accRewardPerShareP:0n,adminFeeAmount:0n,adminFeeShareBp:0n,balanceRatioMinBp:0n,bridge:null,canDeposit:!0,canSwap:!0,canWithdraw:!0,d:0n,errAlreadyInitialized:{isOk:!1,value:2007n},errDepositAmountTooSmall:{isOk:!1,value:2001n},errDepositProhibited:{isOk:!1,value:2013n},errLowTokenBalance:{isOk:!1,value:2012n},errLowVusdBalance:{isOk:!1,value:2011n},errNotEnoughLp:{isOk:!1,value:2010n},errNotEnoughReserves:{isOk:!1,value:2005n},errNotInitialized:{isOk:!1,value:2006n},errPoolBalanceTooBig:{isOk:!1,value:2002n},errSlippage:{isOk:!1,value:2009n},errSwapProhibited:{isOk:!1,value:2015n},errTooLarge:{isOk:!1,value:2016n},errUnauthorized:{isOk:!1,value:2000n},errWithdrawProhibited:{isOk:!1,value:2014n},errWrongToken:{isOk:!1,value:2008n},errZeroChanges:{isOk:!1,value:2003n},errZeroDChanges:{isOk:!1,value:2004n},feeShareBp:0n,lpTotalSupply:0n,maxTokenBalance:1000000000000n,owner:"ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM",reserves:0n,stopAuthority:"ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM",systemPrecision:3n,tokenAmountIncrease:0n,tokenAmountReduce:0n,tokenBalance:0n,tokenPrincipal:null,vusdBalance:0n},non_fungible_tokens:[],fungible_tokens:[],epoch:"Epoch31",clarity_version:"Clarity3",contractName:"pool"},poolTrait:{functions:{},maps:{},variables:{},constants:{},non_fungible_tokens:[],fungible_tokens:[],epoch:"Epoch31",clarity_version:"Clarity3",contractName:"pool-trait"},sip010TraitFtStandard:{functions:{},maps:{},variables:{},constants:{},non_fungible_tokens:[],fungible_tokens:[],epoch:"Epoch21",clarity_version:"Clarity1",contractName:"sip-010-trait-ft-standard"},utils:{functions:{assertNotEmptyBuff32:{name:"assert-not-empty-buff-32",access:"read_only",args:[{name:"b",type:{buffer:{length:32}}}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},bufferByte:{name:"buffer-byte",access:"read_only",args:[{name:"b",type:{buffer:{length:32}}},{name:"i",type:"uint128"}],outputs:{type:{response:{ok:{buffer:{length:1}},error:"uint128"}}}},bufferByteUint:{name:"buffer-byte-uint",access:"read_only",args:[{name:"b",type:{buffer:{length:32}}},{name:"i",type:"uint128"}],outputs:{type:{response:{ok:"uint128",error:"uint128"}}}},hashMessage:{name:"hash-message",access:"read_only",args:[{name:"amount",type:"uint128"},{name:"recipient",type:{buffer:{length:32}}},{name:"source-chain-id",type:"uint128"},{name:"destination-chain-id",type:"uint128"},{name:"receive-token",type:{buffer:{length:32}}},{name:"nonce",type:{buffer:{length:32}}},{name:"messenger-id",type:"uint128"}],outputs:{type:{response:{ok:{buffer:{length:32}},error:"uint128"}}}},hashWithSenderAddress:{name:"hash-with-sender-address",access:"read_only",args:[{name:"message",type:{buffer:{length:32}}},{name:"sender",type:{buffer:{length:32}}}],outputs:{type:{response:{ok:{buffer:{length:32}},error:"uint128"}}}},principalHash:{name:"principal-hash",access:"read_only",args:[{name:"value",type:"principal"}],outputs:{type:{buffer:{length:32}}}},principalToBuff32:{name:"principal-to-buff32",access:"read_only",args:[{name:"value",type:"principal"}],outputs:{type:{buffer:{length:32}}}},stringToBuff:{name:"string-to-buff",access:"read_only",args:[{name:"str",type:{"string-ascii":{length:40}}}],outputs:{type:{buffer:{length:45}}}},uintToBuff1:{name:"uint-to-buff-1",access:"read_only",args:[{name:"value",type:"uint128"}],outputs:{type:{buffer:{length:17}}}},uintToBuff32:{name:"uint-to-buff-32",access:"read_only",args:[{name:"value",type:"uint128"}],outputs:{type:{buffer:{length:33}}}}},maps:{},variables:{errEmptyBuffer:{name:"err-empty-buffer",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errWrongBufferLength:{name:"err-wrong-buffer-length",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errWrongMsgLength:{name:"err-wrong-msg-length",type:{response:{ok:"none",error:"uint128"}},access:"constant"},thisChainId:{name:"this-chain-id",type:"uint128",access:"constant"},zeroBytes12:{name:"zero-bytes-12",type:{buffer:{length:12}},access:"constant"},zeroBytes16:{name:"zero-bytes-16",type:{buffer:{length:16}},access:"constant"},zeroBytes32:{name:"zero-bytes-32",type:{buffer:{length:32}},access:"constant"}},constants:{errEmptyBuffer:{isOk:!1,value:5002n},errWrongBufferLength:{isOk:!1,value:5000n},errWrongMsgLength:{isOk:!1,value:5001n},thisChainId:16n,zeroBytes12:Uint8Array.from([0,0,0,0,0,0,0,0,0,0,0,0]),zeroBytes16:Uint8Array.from([0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]),zeroBytes32:Uint8Array.from([0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0])},non_fungible_tokens:[],fungible_tokens:[],epoch:"Epoch31",clarity_version:"Clarity3",contractName:"utils"},xReserveBridge:{functions:{assertBurn:{name:"assert-burn",access:"private",args:[{name:"burn-ref",type:"trait_reference"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},assertToken:{name:"assert-token",access:"private",args:[{name:"token-ref",type:"trait_reference"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},onlyOwner:{name:"only-owner",access:"private",args:[],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},bridge:{name:"bridge",access:"public",args:[{name:"token-ref",type:"trait_reference"},{name:"burn-ref",type:"trait_reference"},{name:"amount",type:"uint128"},{name:"recipient",type:{buffer:{length:32}}},{name:"destination-chain-id",type:"uint128"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},removeChainDomain:{name:"remove-chain-domain",access:"public",args:[{name:"chain-id-in",type:"uint128"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},setAdminFee:{name:"set-admin-fee",access:"public",args:[{name:"new-fee-bp",type:"uint128"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},setBurnPrincipal:{name:"set-burn-principal",access:"public",args:[{name:"new-burn-principal",type:"principal"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},setChainDomain:{name:"set-chain-domain",access:"public",args:[{name:"new-chain-id",type:"uint128"},{name:"domain",type:"uint128"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},setOwner:{name:"set-owner",access:"public",args:[{name:"new-owner",type:"principal"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},setTokenPrincipal:{name:"set-token-principal",access:"public",args:[{name:"new-token-principal",type:"principal"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},withdrawFees:{name:"withdraw-fees",access:"public",args:[{name:"token-ref",type:"trait_reference"},{name:"recipient",type:"principal"}],outputs:{type:{response:{ok:"uint128",error:"uint128"}}}}},maps:{chainIdToDomain:{name:"chain-id-to-domain",key:"uint128",value:"uint128"}},variables:{BP:{name:"BP",type:"uint128",access:"constant"},errInsufficientAmount:{name:"err-insufficient-amount",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errInvalidAmount:{name:"err-invalid-amount",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errNotFound:{name:"err-not-found",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errNotInitialized:{name:"err-not-initialized",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errUnauthorized:{name:"err-unauthorized",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errWrongBurn:{name:"err-wrong-burn",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errWrongToken:{name:"err-wrong-token",type:{response:{ok:"none",error:"uint128"}},access:"constant"},adminFeeBp:{name:"admin-fee-bp",type:"uint128",access:"variable"},burnPrincipal:{name:"burn-principal",type:{optional:"principal"},access:"variable"},owner:{name:"owner",type:"principal",access:"variable"},tokenPrincipal:{name:"token-principal",type:{optional:"principal"},access:"variable"}},constants:{BP:10000n,adminFeeBp:0n,burnPrincipal:null,errInsufficientAmount:{isOk:!1,value:1001n},errInvalidAmount:{isOk:!1,value:1002n},errNotFound:{isOk:!1,value:1003n},errNotInitialized:{isOk:!1,value:1004n},errUnauthorized:{isOk:!1,value:1000n},errWrongBurn:{isOk:!1,value:1006n},errWrongToken:{isOk:!1,value:1005n},owner:"ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM",tokenPrincipal:null},non_fungible_tokens:[],fungible_tokens:[],epoch:"Epoch31",clarity_version:"Clarity3",contractName:"x-reserve-bridge"}};function Et(i){if(!i.originTokenAddress)throw new f("STX token must contain 'originTokenAddress'");let[n,a]=i.originTokenAddress.split("::");if(!a)throw new f("STX token must contain 'originTokenAddress' ends with '::<tokenName>'");return a}var vd=require("@stacks/transactions");function jt(i,n,a,r,o){let[s,d]=(0,vd.parseContractId)(r);if(!s||!d)throw new Error(`Unable to parse stx token ${r}`);return{type:"ft-postcondition",address:a,condition:n,asset:`${s}.${d}::${o}`,amount:i}}function ho(i,n,a){return{type:"stx-postcondition",address:a,condition:n,amount:i}}var tr=class extends ke{constructor(a,r,o){super();this.nodeRpcUrl=a;this.params=r;this.api=o;let s=(0,fd.createNetwork)({network:this.params.stxIsTestnet?"testnet":"mainnet",client:{baseUrl:this.nodeRpcUrl},apiKey:this.params.stxHeroApiKey});this.client=new Un.ClarigenClient(s,this.params.stxHeroApiKey)}nodeRpcUrl;params;api;chainType="STX";client;send(a){throw new J}async buildRawTransactionSend(a){let r=await Ee(this.chainType,a,this.api),{contractAddress:o,messenger:s,toChainId:d,toAccountAddress:c,toTokenAddress:g}=r,l=BigInt(r.amount),A=Et(a.sourceToken),u=jt(l,"lte",a.fromAccountAddress,a.sourceToken.tokenAddress,A),m=ho(0,"gte",o),y=[u,m];if(s===6){let _=jt(l,"lte",o,a.sourceToken.tokenAddress,A);y.push(_)}let v=BigInt(r.fee);r.extraGas&&(v=v+BigInt(r.extraGas));let C,T;switch(r.gasFeePaymentMethod){case"native":{C=0n,T=v;let _=ho(v,"lte",a.fromAccountAddress);y.push(_);break}case"stablecoin":{C=v,T=0n;break}case"abr":throw new f("STX bridge does not support ABR payment method");default:return se(r.gasFeePaymentMethod,"Unhandled FeePaymentMethod")}let[Y]=(0,nt.parseContractId)(o),h=s===6?(0,Un.contractFactory)(At.xReserveBridge,o).bridge({tokenRef:a.sourceToken.tokenAddress,burnRef:a.sourceToken.xReserve?.protocolAddress??a.sourceToken.tokenAddress,amount:l,recipient:Uint8Array.from(c),destinationChainId:d}):(0,Un.contractFactory)(At.bridge,o).swapAndBridge({ftRef:a.sourceToken.tokenAddress,poolRef:a.sourceToken.poolAddress,messengerRef:`${Y}.messenger`,gasOracleRef:`${Y}.gas-oracle`,amount:l,recipient:Uint8Array.from(c),destinationChainId:d,receiveToken:Uint8Array.from(g),nonce:Uint8Array.from(Vt()),messengerId:s,feeNativeAmount:T,feeTokenAmount:C}),{contractAddress:F,contractName:G,functionName:N,functionArgs:k}=h,H=(0,nt.makeRandomPrivKey)(),ae=(0,nt.privateKeyToPublic)(H),re={contractAddress:F,contractName:G,functionName:N,functionArgs:k,publicKey:ae,validateWithAbi:!0,network:this.client.network,postConditions:y,postConditionMode:nt.PostConditionMode.Deny};return(await(0,nt.makeUnsignedContractCall)(re)).serialize()}async buildRawTransactionSwap(a){let r=tt(this.chainType,a),o=BigInt(r.amount),s=BigInt(r.minimumReceiveAmount),d=a.sourceToken.bridgeAddress,c=(0,Un.contractFactory)(At.bridge,d),{contractAddress:g,contractName:l,functionName:A,functionArgs:u}=c.swap({amount:o,sendPoolRef:a.sourceToken.poolAddress,sendFtRef:a.sourceToken.tokenAddress,receivePoolRef:a.destinationToken.poolAddress,receiveFtRef:a.destinationToken.tokenAddress,recipient:a.toAccountAddress,receiveAmountMin:s}),m=(0,nt.makeRandomPrivKey)(),y=(0,nt.privateKeyToPublic)(m),v=jt(o,"lte",a.fromAccountAddress,a.sourceToken.tokenAddress,Et(a.sourceToken)),C=jt(s,"gte",a.destinationToken.poolAddress,a.destinationToken.tokenAddress,Et(a.destinationToken)),T={contractAddress:g,contractName:l,functionName:A,functionArgs:u,publicKey:y,validateWithAbi:!0,network:this.client.network,postConditions:[v,C],postConditionMode:nt.PostConditionMode.Deny};return(await(0,nt.makeUnsignedContractCall)(T)).serialize()}};var Ul={"-32700":"ParseError","-32701":"OversizedRequest","-32702":"OversizedResponse","-32600":"InvalidRequest","-32601":"MethodNotFound","-32602":"InvalidParams","-32603":"InternalError","-32604":"ServerBusy","-32000":"CallExecutionFailed","-32001":"UnknownError","-32003":"SubscriptionClosed","-32004":"SubscriptionClosedWithError","-32005":"BatchesNotSupported","-32006":"TooManySubscriptions","-32050":"TransientError","-32002":"TransactionExecutionClientError"},Rd=class extends Error{},Td=class extends Rd{constructor(i,n){super(i),this.code=n,this.type=Ul[n]??"ServerError"}},Bd=class extends Rd{constructor(i,n,a){super(i),this.status=n,this.statusText=a}};var nr="2.19.0";var Yd=class{#t=0;#n;constructor(i){this.#n=i}fetch(i,n){let a=this.#n.fetch??fetch;if(!a)throw new Error("The current environment does not support fetch, you can provide a fetch implementation in the options for SuiHTTPTransport.");return a(i,n)}async request(i){this.#t+=1;let n=await this.fetch(this.#n.rpc?.url??this.#n.url,{method:"POST",signal:i.signal,headers:{"Content-Type":"application/json","Client-Sdk-Type":"typescript","Client-Sdk-Version":nr,"Client-Request-Method":i.method,...this.#n.rpc?.headers},body:JSON.stringify({jsonrpc:"2.0",id:this.#t,method:i.method,params:i.params})});if(!n.ok)throw new Bd(`Unexpected status code: ${n.status}`,n.status,n.statusText);let a=await n.json();if("error"in a&&a.error!=null)throw new Td(a.error.message,a.error.code);return a.result}};var wd=/^(?!.*(^(?!@)|[-.@])($|[-.@]))(?:[a-z0-9-]{0,63}(?:\.[a-z0-9-]{0,63})*)?@[a-z0-9-]{0,63}$/i,Wd=/^(?!.*(^|[-.])($|[-.]))(?:[a-z0-9-]{0,63}\.)+sui$/i;function Nd(i){return i.length>235?!1:i.includes("@")?wd.test(i):Wd.test(i)}function Fd(i,n="at"){let a=i.toLowerCase(),r;if(a.includes("@")){if(!wd.test(a))throw new Error(`Invalid SuiNS name ${i}`);let[o,s]=a.split("@");r=[...o?o.split("."):[],s]}else{if(!Wd.test(a))throw new Error(`Invalid SuiNS name ${i}`);r=a.split(".").slice(0,-1)}return n==="dot"?`${r.join(".")}.sui`:`${r.slice(0,-1).join(".")}@${r[r.length-1]}`}var ar=require("@mysten/bcs"),Dl=32;function vo(i){try{return(0,ar.fromBase58)(i).length===Dl}catch{return!1}}var Dn=32;function Oe(i){return _l(i)&&$l(i)===Dn}function za(i){return Oe(i)}var Ql=/^[a-zA-Z][a-zA-Z0-9_]*$/;function Gd(i){return Ql.test(i)}var Kl=["bool","u8","u16","u32","u64","u128","u256","address","signer"],El=/^vector<(.+)>$/;function Zd(i){if(Kl.includes(i))return!0;let n=i.match(El);return n?Zd(n[1]):i.includes("::")?fo(i):!1}function Sd(i){return!Oe(i.address)&&!Me(i.address)||!Gd(i.module)||!Gd(i.name)?!1:i.typeParams.every(n=>typeof n=="string"?Zd(n):Sd(n))}function fo(i){try{return Sd(Mt(i))}catch{return!1}}function kd(i){if(i.startsWith("vector<")){if(!i.endsWith(">"))throw new Error(`Invalid type tag: ${i}`);let n=i.slice(7,-1);if(!n)throw new Error(`Invalid type tag: ${i}`);let a=kd(n);return typeof a=="string"?`vector<${a}>`:`vector<${oe(a)}>`}return i.includes("::")?Mt(i):i}function Mt(i){let n=i.split("::");if(n.length<3)throw new Error(`Invalid struct tag: ${i}`);let[a,r]=n;if(!a||!r)throw new Error(`Invalid struct tag: ${i}`);let o=Me(a),s=i.slice(a.length+r.length+4),d=s.includes("<")?s.slice(0,s.indexOf("<")):s;if(!d||s.includes("<")&&!s.endsWith(">"))throw new Error(`Invalid struct tag: ${i}`);let c=s.includes("<")?(0,ar.splitGenericParameters)(s.slice(s.indexOf("<")+1,s.lastIndexOf(">"))).map(g=>kd(g.trim())):[];return{address:o?a:V(a),module:r,name:d,typeParams:c}}function oe(i){if(typeof i=="string"&&i.startsWith("vector<"))throw new Error("normalizeStructTag does not support vector types. Use normalizeTypeTag instead.");let{address:n,module:a,name:r,typeParams:o}=typeof i=="string"?Mt(i):i;return`${n}::${a}::${r}${o?.length>0?`<${o.map(s=>typeof s=="string"?s:oe(s)).join(",")}>`:""}`}function V(i,n=!1){let a=i.toLowerCase();return!n&&a.startsWith("0x")&&(a=a.slice(2)),`0x${a.padStart(Dn*2,"0")}`}function Lt(i,n=!1){return V(i,n)}function _l(i){return/^(0x|0X)?[a-fA-F0-9]+$/.test(i)&&i.length%2===0}function $l(i){return/^(0x|0X)/.test(i)?(i.length-2)/2:i.length/2}var ql=/^([a-z0-9]+(?:-[a-z0-9]+)*)$/,eA=/^\d+$/,tA=64,Vd="/",Me=i=>{let n=i.split(Vd);if(n.length<2||n.length>3)return!1;let[a,r,o]=n;return o!==void 0&&!eA.test(o)||!Nd(a)?!1:ql.test(r)&&r.length<tA},Pd=i=>{let n=i.split(/::|<|>|,/);for(let a of n)if(a.includes(Vd)&&!Me(a))return!1;return fo(i)};var Xd=class jd{#t;#n;constructor({prefix:n,cache:a}={}){this.#t=n??[],this.#n=a??new Map}read(n,a){let r=[this.#t,...n].join(":");if(this.#n.has(r))return this.#n.get(r);let o=a();return this.#n.set(r,o),typeof o=="object"&&o!==null&&"then"in o?Promise.resolve(o).then(s=>(this.#n.set(r,s),s)).catch(s=>{throw this.#n.delete(r),s}):o}readSync(n,a){let r=[this.#t,...n].join(":");if(this.#n.has(r))return this.#n.get(r);let o=a();return this.#n.set(r,o),o}clear(n){let a=[...this.#t,...n??[]].join(":");if(!a){this.#n.clear();return}for(let r of this.#n.keys())r.startsWith(a)&&this.#n.delete(r)}scope(n){return new jd({prefix:[...this.#t,...Array.isArray(n)?n:[n]],cache:this.#n})}};var ir=class{constructor({network:i,base:n,cache:a=n?.cache??new Xd}){this.network=i,this.base=n??this,this.cache=a}$extend(...i){let n=Object.fromEntries(i.map(r=>[r.name,r.register(this)])),a=new Map;return new Proxy(this,{get(r,o,s){if(typeof o=="string"&&o in n)return n[o];let d=Reflect.get(r,o,s);return typeof d=="function"?o==="$extend"?d.bind(s):(a.has(o)||a.set(o,d.bind(r)),a.get(o)):d}})}};var Qn=require("@mysten/utils"),nA="/",aA={"Mvr-Source":`@mysten/sui@${nr}`},Ld=class{#t;#n;#o;#a;constructor({cache:i,url:n,pageSize:a=50,overrides:r}){this.#t=i,this.#n=n,this.#o=a,this.#a={packages:r?.packages,types:r?.types},iA(this.#a)}get#i(){return this.#t.readSync(["#mvrPackageDataLoader",this.#n??""],()=>{let i=new Qn.DataLoader(async a=>{if(!this.#n)throw new Error(`MVR Api URL is not set for the current client (resolving ${a.join(", ")})`);let r=await this.#s(a);return a.map(o=>r[o]??new Error(`Failed to resolve package: ${o}`))}),n=this.#a?.packages;if(n)for(let[a,r]of Object.entries(n))i.prime(a,r);return i})}get#r(){return this.#t.readSync(["#mvrTypeDataLoader",this.#n??""],()=>{let i=new Qn.DataLoader(async a=>{if(!this.#n)throw new Error(`MVR Api URL is not set for the current client (resolving ${a.join(", ")})`);let r=await this.#d(a);return a.map(o=>r[o]??new Error(`Failed to resolve type: ${o}`))}),n=this.#a?.types;if(n)for(let[a,r]of Object.entries(n))i.prime(a,r);return i})}async#s(i){if(i.length===0)return{};let n=(0,Qn.chunk)(i,this.#o),a={};return await Promise.all(n.map(async r=>{let o=await this.#e("/v1/resolution/bulk",{names:r});if(o?.resolution)for(let s of Object.keys(o?.resolution)){let d=o.resolution[s]?.package_id;d&&(a[s]=d)}})),a}async#d(i){if(i.length===0)return{};let n=(0,Qn.chunk)(i,this.#o),a={};return await Promise.all(n.map(async r=>{let o=await this.#e("/v1/struct-definition/bulk",{types:r});if(o?.resolution)for(let s of Object.keys(o?.resolution)){let d=o.resolution[s]?.type_tag;d&&(a[s]=d)}})),a}async#e(i,n){if(!this.#n)throw new Error("MVR Api URL is not set for the current client");let a=await fetch(`${this.#n}${i}`,{method:"POST",headers:{"Content-Type":"application/json",...aA},body:JSON.stringify(n)});if(!a.ok){let r=await a.json().catch(()=>({}));throw new Error(`Failed to resolve types: ${r?.message}`)}return a.json()}async resolvePackage({package:i}){return Le(i)?{package:await this.#i.load(i)}:{package:i}}async resolveType({type:i}){if(!Le(i))return{type:i};let n=[...rr(i)],a=await this.#r.loadMany(n),r={};for(let o=0;o<n.length;o++){let s=a[o];if(s instanceof Error)throw s;r[n[o]]=s}return{type:or(i,r)}}async resolve({types:i=[],packages:n=[]}){let a=new Set;for(let l of i??[])rr(l,a);let r=[...a],[o,s]=await Promise.all([r.length>0?this.#r.loadMany(r):[],n.length>0?this.#i.loadMany(n):[]]),d={...this.#a?.types};for(let[l,A]of r.entries()){let u=o[l];if(u instanceof Error)throw u;d[A]=u}let c={};for(let l of i??[])c[l]={type:or(l,d)};let g={};for(let[l,A]of(n??[]).entries()){let u=this.#a?.packages?.[A]??s[l];if(u instanceof Error)throw u;g[A]={package:u}}return{types:c,packages:g}}};function iA(i){if(i?.packages)for(let[n,a]of Object.entries(i.packages)){if(!Me(n))throw new Error(`Invalid package name: ${n}`);if(!Oe(V(a)))throw new Error(`Invalid package ID: ${a}`)}if(i?.types)for(let[n,a]of Object.entries(i.types)){if(Mt(n).typeParams.length>0)throw new Error("Type overrides must be first-level only. If you want to supply generic types, just pass each type individually.");if(!Oe(Mt(a).address))throw new Error(`Invalid type: ${a}`)}}function rr(i,n=new Set){if(typeof i=="string"&&!Le(i))return n;if(typeof i=="string"&&i.startsWith("vector<")&&i.endsWith(">"))return rr(i.slice(7,-1),n);let a=xd(i)?i:Mt(i);Le(a.address)&&n.add(`${a.address}::${a.module}::${a.name}`);for(let r of a.typeParams)rr(r,n);return n}function or(i,n){if(typeof i=="string"&&!i.includes("::"))return i;if(typeof i=="string"&&i.startsWith("vector<")&&i.endsWith(">"))return`vector<${or(i.slice(7,-1),n)}>`;let a=xd(i)?i:Mt(i),r=n[`${a.address}::${a.module}::${a.name}`];return oe({...a,address:r?r.split("::")[0]:a.address,typeParams:a.typeParams.map(o=>or(o,n))})}function Le(i){return i.includes(nA)||i.includes("@")||i.includes(".sui")}function xd(i){return typeof i=="object"&&"address"in i&&"module"in i&&"name"in i&&"typeParams"in i}function Hd(i){let n=new Set,a=new Set;for(let r of i.commands)switch(r.$kind){case"MakeMoveVec":r.MakeMoveVec.type&&Md([r.MakeMoveVec.type]).forEach(d=>{a.add(d)});break;case"MoveCall":let o=r.MoveCall,s=o.package.split("::")[0];if(Le(s)){if(!Me(s))throw new Error(`Invalid package name: ${s}`);n.add(s)}Md(o.typeArguments??[]).forEach(d=>{a.add(d)});break;default:break}return{packages:[...n],types:[...a]}}function Jd(i,n){for(let a of i.commands){if(a.MakeMoveVec?.type){if(!Le(a.MakeMoveVec.type))continue;if(!n.types[a.MakeMoveVec.type])throw new Error(`No resolution found for type: ${a.MakeMoveVec.type}`);a.MakeMoveVec.type=n.types[a.MakeMoveVec.type].type}let r=a.MoveCall;if(!r)continue;let o=r.package.split("::"),s=o[0];if(Le(s)&&!n.packages[s])throw new Error(`No address found for package: ${s}`);Le(s)&&(o[0]=n.packages[s].package,r.package=o.join("::"));let d=r.typeArguments;if(d){for(let c=0;c<d.length;c++)if(Le(d[c])){if(!n.types[d[c]])throw new Error(`No resolution found for type: ${d[c]}`);d[c]=n.types[d[c]].type}r.typeArguments=d}}}function Md(i){let n=new Set;for(let a of i)if(Le(a)){if(!Pd(a))throw new Error(`Invalid type with names: ${a}`);n.add(a)}return n}var Od=require("@mysten/bcs"),rA=/^vector<(.+)>$/,oA=/^([^:]+)::([^:]+)::([^<]+)(<(.+)>)?/,st=class Kn{static parseFromStr(n,a=!1){if(n==="address")return{address:null};if(n==="bool")return{bool:null};if(n==="u8")return{u8:null};if(n==="u16")return{u16:null};if(n==="u32")return{u32:null};if(n==="u64")return{u64:null};if(n==="u128")return{u128:null};if(n==="u256")return{u256:null};if(n==="signer")return{signer:null};let r=n.match(rA);if(r)return{vector:Kn.parseFromStr(r[1],a)};let o=n.match(oA);if(o)return{struct:{address:a?V(o[1]):o[1],module:o[2],name:o[3],typeParams:o[5]===void 0?[]:Kn.parseStructTypeArgs(o[5],a)}};throw new Error(`Encountered unexpected token when parsing type args for ${n}`)}static parseStructTypeArgs(n,a=!1){return(0,Od.splitGenericParameters)(n).map(r=>Kn.parseFromStr(r,a))}static tagToString(n){if("bool"in n)return"bool";if("u8"in n)return"u8";if("u16"in n)return"u16";if("u32"in n)return"u32";if("u64"in n)return"u64";if("u128"in n)return"u128";if("u256"in n)return"u256";if("address"in n)return"address";if("signer"in n)return"signer";if("vector"in n)return`vector<${Kn.tagToString(n.vector)}>`;if("struct"in n){let a=n.struct,r=a.typeParams.map(Kn.tagToString).join(", ");return`${a.address}::${a.module}::${a.name}${r?`<${r}>`:""}`}throw new Error("Invalid TypeTag")}};var I=require("@mysten/bcs");function sA(i){return I.bcs.u64({name:"unsafe_u64",...i}).transform({input:n=>n,output:n=>Number(n)})}function dA(i){return I.bcs.enum("Option",{None:null,Some:i})}var ne=I.bcs.bytes(Dn).transform({validate:i=>{let n=typeof i=="string"?i:(0,I.toHex)(i);if(!n||!Oe(V(n)))throw new Error(`Invalid Sui address ${n}`)},input:i=>typeof i=="string"?(0,I.fromHex)(V(i)):i,output:i=>V((0,I.toHex)(i))}),ze=I.bcs.byteVector().transform({name:"ObjectDigest",input:i=>(0,I.fromBase58)(i),output:i=>(0,I.toBase58)(new Uint8Array(i)),validate:i=>{if((0,I.fromBase58)(i).length!==32)throw new Error("ObjectDigest must be 32 bytes")}}),at=I.bcs.struct("SuiObjectRef",{objectId:ne,version:I.bcs.u64(),digest:ze}),Ro=I.bcs.struct("SharedObjectRef",{objectId:ne,initialSharedVersion:I.bcs.u64(),mutable:I.bcs.bool()}),To=I.bcs.enum("ObjectArg",{ImmOrOwnedObject:at,SharedObject:Ro,Receiving:at}),xt=I.bcs.enum("Owner",{AddressOwner:ne,ObjectOwner:ne,Shared:I.bcs.struct("Shared",{initialSharedVersion:I.bcs.u64()}),Immutable:null,ConsensusAddressOwner:I.bcs.struct("ConsensusAddressOwner",{startVersion:I.bcs.u64(),owner:ne})}),cA=I.bcs.enum("Reservation",{MaxAmountU64:I.bcs.u64()}),gA=I.bcs.enum("WithdrawalType",{Balance:I.bcs.lazy(()=>yn)}),lA=I.bcs.enum("WithdrawFrom",{Sender:null,Sponsor:null}),AA=I.bcs.struct("FundsWithdrawal",{reservation:cA,typeArg:gA,withdrawFrom:lA}),Bo=I.bcs.enum("CallArg",{Pure:I.bcs.struct("Pure",{bytes:I.bcs.byteVector().transform({input:i=>typeof i=="string"?(0,I.fromBase64)(i):i,output:i=>(0,I.toBase64)(new Uint8Array(i))})}),Object:To,FundsWithdrawal:AA}),Yo=I.bcs.enum("TypeTag",{bool:null,u8:null,u64:null,u128:null,address:null,signer:null,vector:I.bcs.lazy(()=>Yo),struct:I.bcs.lazy(()=>sr),u16:null,u32:null,u256:null}),yn=Yo.transform({input:i=>typeof i=="string"?st.parseFromStr(i,!0):i,output:i=>st.tagToString(i)}),vt=I.bcs.enum("Argument",{GasCoin:null,Input:I.bcs.u16(),Result:I.bcs.u16(),NestedResult:I.bcs.tuple([I.bcs.u16(),I.bcs.u16()])}),wo=I.bcs.struct("ProgrammableMoveCall",{package:ne,module:I.bcs.string(),function:I.bcs.string(),typeArguments:I.bcs.vector(yn),arguments:I.bcs.vector(vt)}),Wo=I.bcs.enum("Command",{MoveCall:wo,TransferObjects:I.bcs.struct("TransferObjects",{objects:I.bcs.vector(vt),address:vt}),SplitCoins:I.bcs.struct("SplitCoins",{coin:vt,amounts:I.bcs.vector(vt)}),MergeCoins:I.bcs.struct("MergeCoins",{destination:vt,sources:I.bcs.vector(vt)}),Publish:I.bcs.struct("Publish",{modules:I.bcs.vector(I.bcs.byteVector().transform({input:i=>typeof i=="string"?(0,I.fromBase64)(i):i,output:i=>(0,I.toBase64)(new Uint8Array(i))})),dependencies:I.bcs.vector(ne)}),MakeMoveVec:I.bcs.struct("MakeMoveVec",{type:dA(yn).transform({input:i=>i===null?{None:!0}:{Some:i},output:i=>i.Some??null}),elements:I.bcs.vector(vt)}),Upgrade:I.bcs.struct("Upgrade",{modules:I.bcs.vector(I.bcs.byteVector().transform({input:i=>typeof i=="string"?(0,I.fromBase64)(i):i,output:i=>(0,I.toBase64)(new Uint8Array(i))})),dependencies:I.bcs.vector(ne),package:ne,ticket:vt})}),No=I.bcs.struct("ProgrammableTransaction",{inputs:I.bcs.vector(Bo),commands:I.bcs.vector(Wo)}),Fo=I.bcs.enum("TransactionKind",{ProgrammableTransaction:No,ChangeEpoch:null,Genesis:null,ConsensusCommitPrologue:null}),uA=I.bcs.struct("ValidDuring",{minEpoch:I.bcs.option(I.bcs.u64()),maxEpoch:I.bcs.option(I.bcs.u64()),minTimestamp:I.bcs.option(I.bcs.u64()),maxTimestamp:I.bcs.option(I.bcs.u64()),chain:ze,nonce:I.bcs.u32()}),Go=I.bcs.enum("TransactionExpiration",{None:null,Epoch:sA(),ValidDuring:uA}),sr=I.bcs.struct("StructTag",{address:ne,module:I.bcs.string(),name:I.bcs.string(),typeParams:I.bcs.vector(Yo)}),Zo=I.bcs.struct("GasData",{payment:I.bcs.vector(at),owner:ne,price:I.bcs.u64(),budget:I.bcs.u64()}),So=I.bcs.struct("TransactionDataV1",{kind:Fo,sender:ne,gasData:Zo,expiration:Go}),ko=I.bcs.enum("TransactionData",{V1:So}),Vo=I.bcs.enum("IntentScope",{TransactionData:null,TransactionEffects:null,CheckpointSummary:null,PersonalMessage:null}),Po=I.bcs.enum("IntentVersion",{V0:null}),Xo=I.bcs.enum("AppId",{Sui:null}),jo=I.bcs.struct("Intent",{scope:Vo,version:Po,appId:Xo});function Mo(i){return I.bcs.struct(`IntentMessage<${i.name}>`,{intent:jo,value:i})}var Lo=I.bcs.enum("CompressedSignature",{ED25519:I.bcs.bytes(64),Secp256k1:I.bcs.bytes(64),Secp256r1:I.bcs.bytes(64),ZkLogin:I.bcs.byteVector(),Passkey:I.bcs.byteVector()}),xo=I.bcs.enum("PublicKey",{ED25519:I.bcs.bytes(32),Secp256k1:I.bcs.bytes(33),Secp256r1:I.bcs.bytes(33),ZkLogin:I.bcs.byteVector(),Passkey:I.bcs.bytes(33)}),Ho=I.bcs.struct("MultiSigPkMap",{pubKey:xo,weight:I.bcs.u8()}),Jo=I.bcs.struct("MultiSigPublicKey",{pk_map:I.bcs.vector(Ho),threshold:I.bcs.u16()}),zd=I.bcs.struct("MultiSig",{sigs:I.bcs.vector(Lo),bitmap:I.bcs.u16(),multisig_pk:Jo}),pA=I.bcs.byteVector().transform({input:i=>typeof i=="string"?(0,I.fromBase64)(i):i,output:i=>(0,I.toBase64)(new Uint8Array(i))}),Oo=I.bcs.struct("SenderSignedTransaction",{intentMessage:Mo(ko),txSignatures:I.bcs.vector(pA)}),Ud=I.bcs.vector(Oo,{name:"SenderSignedData"}),Dd=I.bcs.struct("PasskeyAuthenticator",{authenticatorData:I.bcs.byteVector(),clientDataJson:I.bcs.string(),userSignature:I.bcs.byteVector()}),zo=I.bcs.enum("MoveObjectType",{Other:sr,GasCoin:null,StakedSui:null,Coin:yn,AccumulatorBalanceWrapper:null}),Uo=I.bcs.struct("TypeOrigin",{moduleName:I.bcs.string(),datatypeName:I.bcs.string(),package:ne}),Do=I.bcs.struct("UpgradeInfo",{upgradedId:ne,upgradedVersion:I.bcs.u64()}),Qo=I.bcs.struct("MovePackage",{id:ne,version:I.bcs.u64(),moduleMap:I.bcs.map(I.bcs.string(),I.bcs.byteVector()),typeOriginTable:I.bcs.vector(Uo),linkageTable:I.bcs.map(ne,Do)}),Ko=I.bcs.struct("MoveObject",{type:zo,hasPublicTransfer:I.bcs.bool(),version:I.bcs.u64(),contents:I.bcs.byteVector()}),Eo=I.bcs.enum("Data",{Move:Ko,Package:Qo}),Qd=I.bcs.struct("ObjectInner",{data:Eo,owner:xt,previousTransaction:ze,storageRebate:I.bcs.u64()});var R=require("@mysten/bcs"),mA=R.bcs.enum("PackageUpgradeError",{UnableToFetchPackage:R.bcs.struct("UnableToFetchPackage",{packageId:ne}),NotAPackage:R.bcs.struct("NotAPackage",{objectId:ne}),IncompatibleUpgrade:null,DigestDoesNotMatch:R.bcs.struct("DigestDoesNotMatch",{digest:R.bcs.byteVector()}),UnknownUpgradePolicy:R.bcs.struct("UnknownUpgradePolicy",{policy:R.bcs.u8()}),PackageIDDoesNotMatch:R.bcs.struct("PackageIDDoesNotMatch",{packageId:ne,ticketId:ne})}),bA=R.bcs.struct("ModuleId",{address:ne,name:R.bcs.string()}),Kd=R.bcs.struct("MoveLocation",{module:bA,function:R.bcs.u16(),instruction:R.bcs.u16(),functionName:R.bcs.option(R.bcs.string())}),yA=R.bcs.enum("CommandArgumentError",{TypeMismatch:null,InvalidBCSBytes:null,InvalidUsageOfPureArg:null,InvalidArgumentToPrivateEntryFunction:null,IndexOutOfBounds:R.bcs.struct("IndexOutOfBounds",{idx:R.bcs.u16()}),SecondaryIndexOutOfBounds:R.bcs.struct("SecondaryIndexOutOfBounds",{resultIdx:R.bcs.u16(),secondaryIdx:R.bcs.u16()}),InvalidResultArity:R.bcs.struct("InvalidResultArity",{resultIdx:R.bcs.u16()}),InvalidGasCoinUsage:null,InvalidValueUsage:null,InvalidObjectByValue:null,InvalidObjectByMutRef:null,SharedObjectOperationNotAllowed:null,InvalidArgumentArity:null,InvalidTransferObject:null,InvalidMakeMoveVecNonObjectArgument:null,ArgumentWithoutValue:null,CannotMoveBorrowedValue:null,CannotWriteToExtendedReference:null,InvalidReferenceArgument:null}),CA=R.bcs.enum("TypeArgumentError",{TypeNotFound:null,ConstraintNotSatisfied:null}),IA=R.bcs.enum("ExecutionFailureStatus",{InsufficientGas:null,InvalidGasObject:null,InvariantViolation:null,FeatureNotYetSupported:null,MoveObjectTooBig:R.bcs.struct("MoveObjectTooBig",{objectSize:R.bcs.u64(),maxObjectSize:R.bcs.u64()}),MovePackageTooBig:R.bcs.struct("MovePackageTooBig",{objectSize:R.bcs.u64(),maxObjectSize:R.bcs.u64()}),CircularObjectOwnership:R.bcs.struct("CircularObjectOwnership",{object:ne}),InsufficientCoinBalance:null,CoinBalanceOverflow:null,PublishErrorNonZeroAddress:null,SuiMoveVerificationError:null,MovePrimitiveRuntimeError:R.bcs.option(Kd),MoveAbort:R.bcs.tuple([Kd,R.bcs.u64()]),VMVerificationOrDeserializationError:null,VMInvariantViolation:null,FunctionNotFound:null,ArityMismatch:null,TypeArityMismatch:null,NonEntryFunctionInvoked:null,CommandArgumentError:R.bcs.struct("CommandArgumentError",{argIdx:R.bcs.u16(),kind:yA}),TypeArgumentError:R.bcs.struct("TypeArgumentError",{argumentIdx:R.bcs.u16(),kind:CA}),UnusedValueWithoutDrop:R.bcs.struct("UnusedValueWithoutDrop",{resultIdx:R.bcs.u16(),secondaryIdx:R.bcs.u16()}),InvalidPublicFunctionReturnType:R.bcs.struct("InvalidPublicFunctionReturnType",{idx:R.bcs.u16()}),InvalidTransferObject:null,EffectsTooLarge:R.bcs.struct("EffectsTooLarge",{currentSize:R.bcs.u64(),maxSize:R.bcs.u64()}),PublishUpgradeMissingDependency:null,PublishUpgradeDependencyDowngrade:null,PackageUpgradeError:R.bcs.struct("PackageUpgradeError",{upgradeError:mA}),WrittenObjectsTooLarge:R.bcs.struct("WrittenObjectsTooLarge",{currentSize:R.bcs.u64(),maxSize:R.bcs.u64()}),CertificateDenied:null,SuiMoveVerificationTimedout:null,SharedObjectOperationNotAllowed:null,InputObjectDeleted:null,ExecutionCancelledDueToSharedObjectCongestion:R.bcs.struct("ExecutionCancelledDueToSharedObjectCongestion",{congested_objects:R.bcs.vector(ne)}),AddressDeniedForCoin:R.bcs.struct("AddressDeniedForCoin",{address:ne,coinType:R.bcs.string()}),CoinTypeGlobalPause:R.bcs.struct("CoinTypeGlobalPause",{coinType:R.bcs.string()}),ExecutionCancelledDueToRandomnessUnavailable:null,MoveVectorElemTooBig:R.bcs.struct("MoveVectorElemTooBig",{valueSize:R.bcs.u64(),maxScaledSize:R.bcs.u64()}),MoveRawValueTooBig:R.bcs.struct("MoveRawValueTooBig",{valueSize:R.bcs.u64(),maxScaledSize:R.bcs.u64()}),InvalidLinkage:null,InsufficientBalanceForWithdraw:null,NonExclusiveWriteInputObjectModified:R.bcs.struct("NonExclusiveWriteInputObjectModified",{id:ne})}),dr=R.bcs.enum("ExecutionStatus",{Success:null,Failure:R.bcs.struct("Failure",{error:IA,command:R.bcs.option(R.bcs.u64())})}),Ed=R.bcs.struct("GasCostSummary",{computationCost:R.bcs.u64(),storageCost:R.bcs.u64(),storageRebate:R.bcs.u64(),nonRefundableStorageFee:R.bcs.u64()}),hA=R.bcs.struct("TransactionEffectsV1",{status:dr,executedEpoch:R.bcs.u64(),gasUsed:Ed,modifiedAtVersions:R.bcs.vector(R.bcs.tuple([ne,R.bcs.u64()])),sharedObjects:R.bcs.vector(at),transactionDigest:ze,created:R.bcs.vector(R.bcs.tuple([at,xt])),mutated:R.bcs.vector(R.bcs.tuple([at,xt])),unwrapped:R.bcs.vector(R.bcs.tuple([at,xt])),deleted:R.bcs.vector(at),unwrappedThenDeleted:R.bcs.vector(at),wrapped:R.bcs.vector(at),gasObject:R.bcs.tuple([at,xt]),eventsDigest:R.bcs.option(ze),dependencies:R.bcs.vector(ze)}),_o=R.bcs.tuple([R.bcs.u64(),ze]),vA=R.bcs.enum("ObjectIn",{NotExist:null,Exist:R.bcs.tuple([_o,xt])}),fA=R.bcs.struct("AccumulatorAddress",{address:ne,ty:yn}),RA=R.bcs.enum("AccumulatorOperation",{Merge:null,Split:null}),TA=R.bcs.enum("AccumulatorValue",{Integer:R.bcs.u64(),IntegerTuple:R.bcs.tuple([R.bcs.u64(),R.bcs.u64()]),EventDigest:R.bcs.vector(R.bcs.tuple([R.bcs.u64(),ze]))}),BA=R.bcs.struct("AccumulatorWriteV1",{address:fA,operation:RA,value:TA}),YA=R.bcs.enum("ObjectOut",{NotExist:null,ObjectWrite:R.bcs.tuple([ze,xt]),PackageWrite:_o,AccumulatorWriteV1:BA}),wA=R.bcs.enum("IDOperation",{None:null,Created:null,Deleted:null}),WA=R.bcs.struct("EffectsObjectChange",{inputState:vA,outputState:YA,idOperation:wA}),NA=R.bcs.enum("UnchangedConsensusKind",{ReadOnlyRoot:_o,MutateConsensusStreamEnded:R.bcs.u64(),ReadConsensusStreamEnded:R.bcs.u64(),Cancelled:R.bcs.u64(),PerEpochConfig:null}),FA=R.bcs.struct("TransactionEffectsV2",{status:dr,executedEpoch:R.bcs.u64(),gasUsed:Ed,transactionDigest:ze,gasObjectIndex:R.bcs.option(R.bcs.u32()),eventsDigest:R.bcs.option(ze),dependencies:R.bcs.vector(ze),lamportVersion:R.bcs.u64(),changedObjects:R.bcs.vector(R.bcs.tuple([ne,WA])),unchangedConsensusObjects:R.bcs.vector(R.bcs.tuple([ne,NA])),auxDataDigest:R.bcs.option(ze)}),_d=R.bcs.enum("TransactionEffects",{V1:hA,V2:FA});var ft=require("@mysten/bcs");function En(i){switch(i){case"u8":return ft.bcs.u8();case"u16":return ft.bcs.u16();case"u32":return ft.bcs.u32();case"u64":return ft.bcs.u64();case"u128":return ft.bcs.u128();case"u256":return ft.bcs.u256();case"bool":return ft.bcs.bool();case"string":return ft.bcs.string();case"id":case"address":return ne}let n=i.match(/^(vector|option)<(.+)>$/);if(n){let[a,r]=n.slice(1);return a==="vector"?ft.bcs.vector(En(r)):ft.bcs.option(En(r))}throw new Error(`Invalid Pure type name: ${i}`)}var Ue=require("@mysten/bcs"),B={...Ue.bcs,U8:Ue.bcs.u8(),U16:Ue.bcs.u16(),U32:Ue.bcs.u32(),U64:Ue.bcs.u64(),U128:Ue.bcs.u128(),U256:Ue.bcs.u256(),ULEB128:Ue.bcs.uleb128(),Bool:Ue.bcs.bool(),String:Ue.bcs.string(),Address:ne,AppId:Xo,Argument:vt,CallArg:Bo,Command:Wo,CompressedSignature:Lo,Data:Eo,GasData:Zo,Intent:jo,IntentMessage:Mo,IntentScope:Vo,IntentVersion:Po,MoveObject:Ko,MoveObjectType:zo,MovePackage:Qo,MultiSig:zd,MultiSigPkMap:Ho,MultiSigPublicKey:Jo,Object:Qd,ObjectArg:To,ObjectDigest:ze,Owner:xt,PasskeyAuthenticator:Dd,ProgrammableMoveCall:wo,ProgrammableTransaction:No,PublicKey:xo,SenderSignedData:Ud,SenderSignedTransaction:Oo,SharedObjectRef:Ro,StructTag:sr,SuiObjectRef:at,TransactionData:ko,TransactionDataV1:So,TransactionEffects:_d,TransactionExpiration:Go,TransactionKind:Fo,TypeOrigin:Uo,TypeTag:yn,UpgradeInfo:Do};var $d=require("@mysten/bcs"),qd=require("@noble/hashes/blake2.js");function _n(i,n,a){let r=B.Address.serialize(i).toBytes(),o=B.TypeTag.serialize(n).toBytes(),s=B.u64().serialize(a.length).toBytes(),d=qd.blake2b.create({dkLen:32});return d.update(new Uint8Array([240])),d.update(r),d.update(s),d.update(a),d.update(o),`0x${(0,$d.toHex)(d.digest().slice(0,32))}`}var p=require("valibot");function Tt(i){return(0,p.union)(Object.keys(i).map(n=>Ua(n,(0,p.object)({[n]:i[n]}))))}function Ua(i,n){return(0,p.pipe)((0,p.object)({...n.entries,$kind:(0,p.optional)((0,p.literal)(i))}),(0,p.transform)(a=>({...a,$kind:i})))}var Nn=(0,p.pipe)((0,p.string)(),(0,p.transform)(i=>V(i)),(0,p.check)(Oe)),qe=Nn,Cn=(0,p.string)(),Te=(0,p.pipe)((0,p.union)([(0,p.string)(),(0,p.pipe)((0,p.number)(),(0,p.integer)())]),(0,p.check)(i=>{try{return BigInt(i),BigInt(i)>=0&&BigInt(i)<=18446744073709551615n}catch{return!1}},"Invalid u64")),GA=(0,p.pipe)((0,p.number)(),(0,p.integer)(),(0,p.check)(i=>i>=0&&i<2**32,"Invalid u32")),Rt=(0,p.object)({objectId:Nn,version:Te,digest:(0,p.string)()}),ge=(0,p.union)([Ua("GasCoin",(0,p.object)({GasCoin:(0,p.literal)(!0)})),Ua("Input",(0,p.object)({Input:(0,p.pipe)((0,p.number)(),(0,p.integer)()),type:(0,p.optional)((0,p.union)([(0,p.literal)("pure"),(0,p.literal)("object"),(0,p.literal)("withdrawal")]))})),Ua("Result",(0,p.object)({Result:(0,p.pipe)((0,p.number)(),(0,p.integer)())})),Ua("NestedResult",(0,p.object)({NestedResult:(0,p.tuple)([(0,p.pipe)((0,p.number)(),(0,p.integer)()),(0,p.pipe)((0,p.number)(),(0,p.integer)())])}))]),ZA=(0,p.object)({budget:(0,p.nullable)(Te),price:(0,p.nullable)(Te),owner:(0,p.nullable)(Nn),payment:(0,p.nullable)((0,p.array)(Rt))}),zI=(0,p.object)({address:(0,p.string)(),module:(0,p.string)(),name:(0,p.string)(),typeParams:(0,p.array)((0,p.string)())}),$o=(0,p.union)([(0,p.object)({$kind:(0,p.literal)("address")}),(0,p.object)({$kind:(0,p.literal)("bool")}),(0,p.object)({$kind:(0,p.literal)("u8")}),(0,p.object)({$kind:(0,p.literal)("u16")}),(0,p.object)({$kind:(0,p.literal)("u32")}),(0,p.object)({$kind:(0,p.literal)("u64")}),(0,p.object)({$kind:(0,p.literal)("u128")}),(0,p.object)({$kind:(0,p.literal)("u256")}),(0,p.object)({$kind:(0,p.literal)("unknown")}),(0,p.object)({$kind:(0,p.literal)("vector"),vector:(0,p.lazy)(()=>$o)}),(0,p.object)({$kind:(0,p.literal)("datatype"),datatype:(0,p.object)({typeName:(0,p.string)(),typeParameters:(0,p.array)((0,p.lazy)(()=>$o))})}),(0,p.object)({$kind:(0,p.literal)("typeParameter"),index:(0,p.pipe)((0,p.number)(),(0,p.integer)())})]),SA=(0,p.object)({reference:(0,p.nullable)((0,p.union)([(0,p.literal)("mutable"),(0,p.literal)("immutable"),(0,p.literal)("unknown")])),body:$o}),kA=(0,p.object)({package:qe,module:(0,p.string)(),function:(0,p.string)(),typeArguments:(0,p.array)((0,p.string)()),arguments:(0,p.array)(ge),_argumentTypes:(0,p.optional)((0,p.nullable)((0,p.array)(SA)))}),VA=(0,p.object)({name:(0,p.string)(),inputs:(0,p.record)((0,p.string)(),(0,p.union)([ge,(0,p.array)(ge)])),data:(0,p.record)((0,p.string)(),(0,p.unknown)())}),PA=Tt({MoveCall:kA,TransferObjects:(0,p.object)({objects:(0,p.array)(ge),address:ge}),SplitCoins:(0,p.object)({coin:ge,amounts:(0,p.array)(ge)}),MergeCoins:(0,p.object)({destination:ge,sources:(0,p.array)(ge)}),Publish:(0,p.object)({modules:(0,p.array)(Cn),dependencies:(0,p.array)(qe)}),MakeMoveVec:(0,p.object)({type:(0,p.nullable)((0,p.string)()),elements:(0,p.array)(ge)}),Upgrade:(0,p.object)({modules:(0,p.array)(Cn),dependencies:(0,p.array)(qe),package:qe,ticket:ge}),$Intent:VA}),ec=Tt({ImmOrOwnedObject:Rt,SharedObject:(0,p.object)({objectId:qe,initialSharedVersion:Te,mutable:(0,p.boolean)()}),Receiving:Rt}),XA=Tt({MaxAmountU64:Te}),jA=Tt({Balance:(0,p.string)()}),MA=Tt({Sender:(0,p.literal)(!0),Sponsor:(0,p.literal)(!0)}),qo=(0,p.object)({reservation:XA,typeArg:jA,withdrawFrom:MA}),LA=Tt({Object:ec,Pure:(0,p.object)({bytes:Cn}),UnresolvedPure:(0,p.object)({value:(0,p.unknown)()}),UnresolvedObject:(0,p.object)({objectId:qe,version:(0,p.optional)((0,p.nullable)(Te)),digest:(0,p.optional)((0,p.nullable)((0,p.string)())),initialSharedVersion:(0,p.optional)((0,p.nullable)(Te)),mutable:(0,p.optional)((0,p.nullable)((0,p.boolean)()))}),FundsWithdrawal:qo}),es=Tt({Object:ec,Pure:(0,p.object)({bytes:Cn})}),ts=(0,p.object)({minEpoch:(0,p.nullable)(Te),maxEpoch:(0,p.nullable)(Te),minTimestamp:(0,p.nullable)(Te),maxTimestamp:(0,p.nullable)(Te),chain:(0,p.string)(),nonce:GA}),ns=Tt({None:(0,p.literal)(!0),Epoch:Te,ValidDuring:ts}),$n=(0,p.object)({version:(0,p.literal)(2),sender:(0,p.nullish)(Nn),expiration:(0,p.nullish)(ns),gasData:ZA,inputs:(0,p.array)(LA),commands:(0,p.array)(PA)});var _t=require("@mysten/bcs"),tc=require("valibot"),xA=V("0xacc"),HA=st.parseFromStr("0x2::accumulator::Key<0x2::balance::Balance<0x2::sui::SUI>>"),nc=new Uint8Array([172,172,172,172,172,172,172,172,172,172,172,172,172,172,172,172,172,172,172,172]);function as(i){return(0,_t.fromBase58)(i).slice(12,32).every((n,a)=>n===nc[a])}function JA(i,n){let a=(0,_t.fromHex)(_n(xA,HA,B.Address.serialize(i).toBytes()).slice(2)),r=(0,_t.fromBase58)(n);if(r.length!==32)throw new Error(`Invalid chain identifier length: expected 32 bytes, got ${r.length}`);let o=new Uint8Array(32);for(let s=0;s<32;s++)o[s]=a[s]^r[s];return`0x${(0,_t.toHex)(o)}`}function ac(i,n,a,r){let o=new Uint8Array(32),s=new DataView(o.buffer);s.setBigUint64(0,i,!0);let d=Number(r);if(!Number.isSafeInteger(d)||d<0||d>4294967295)throw new Error(`Epoch ${r} out of u32 range for coin reservation digest`);return s.setUint32(8,d,!0),o.set(nc,12),(0,tc.parse)(Rt,{objectId:JA(n,a),version:"0",digest:(0,_t.toBase58)(o)})}var In=require("@mysten/bcs"),b=require("valibot"),is=(0,b.object)({digest:(0,b.string)(),objectId:(0,b.string)(),version:(0,b.union)([(0,b.pipe)((0,b.number)(),(0,b.integer)()),(0,b.string)(),(0,b.bigint)()])}),OA=Tt({ImmOrOwned:is,Shared:(0,b.object)({objectId:qe,initialSharedVersion:Te,mutable:(0,b.boolean)()}),Receiving:is}),ic=Tt({Object:OA,Pure:(0,b.array)((0,b.pipe)((0,b.number)(),(0,b.integer)()))}),oc=(0,b.union)([(0,b.object)({kind:(0,b.literal)("Input"),index:(0,b.pipe)((0,b.number)(),(0,b.integer)()),value:(0,b.unknown)(),type:(0,b.optional)((0,b.literal)("object"))}),(0,b.object)({kind:(0,b.literal)("Input"),index:(0,b.pipe)((0,b.number)(),(0,b.integer)()),value:(0,b.unknown)(),type:(0,b.literal)("pure")})]),zA=(0,b.union)([(0,b.object)({Epoch:(0,b.pipe)((0,b.number)(),(0,b.integer)())}),(0,b.object)({None:(0,b.nullable)((0,b.literal)(!0))})]),rc=(0,b.pipe)((0,b.union)([(0,b.number)(),(0,b.string)(),(0,b.bigint)()]),(0,b.check)(i=>{if(!["string","number","bigint"].includes(typeof i))return!1;try{return BigInt(i),!0}catch{return!1}})),rs=(0,b.union)([(0,b.object)({bool:(0,b.nullable)((0,b.literal)(!0))}),(0,b.object)({u8:(0,b.nullable)((0,b.literal)(!0))}),(0,b.object)({u64:(0,b.nullable)((0,b.literal)(!0))}),(0,b.object)({u128:(0,b.nullable)((0,b.literal)(!0))}),(0,b.object)({address:(0,b.nullable)((0,b.literal)(!0))}),(0,b.object)({signer:(0,b.nullable)((0,b.literal)(!0))}),(0,b.object)({vector:(0,b.lazy)(()=>rs)}),(0,b.object)({struct:(0,b.lazy)(()=>UA)}),(0,b.object)({u16:(0,b.nullable)((0,b.literal)(!0))}),(0,b.object)({u32:(0,b.nullable)((0,b.literal)(!0))}),(0,b.object)({u256:(0,b.nullable)((0,b.literal)(!0))})]),UA=(0,b.object)({address:(0,b.string)(),module:(0,b.string)(),name:(0,b.string)(),typeParams:(0,b.array)(rs)}),DA=(0,b.object)({budget:(0,b.optional)(rc),price:(0,b.optional)(rc),payment:(0,b.optional)((0,b.array)(is)),owner:(0,b.optional)((0,b.string)())}),QA=[oc,(0,b.object)({kind:(0,b.literal)("GasCoin")}),(0,b.object)({kind:(0,b.literal)("Result"),index:(0,b.pipe)((0,b.number)(),(0,b.integer)())}),(0,b.object)({kind:(0,b.literal)("NestedResult"),index:(0,b.pipe)((0,b.number)(),(0,b.integer)()),resultIndex:(0,b.pipe)((0,b.number)(),(0,b.integer)())})],en=(0,b.union)([...QA]),KA=(0,b.object)({kind:(0,b.literal)("MoveCall"),target:(0,b.pipe)((0,b.string)(),(0,b.check)(i=>i.split("::").length===3)),typeArguments:(0,b.array)((0,b.string)()),arguments:(0,b.array)(en)}),EA=(0,b.object)({kind:(0,b.literal)("TransferObjects"),objects:(0,b.array)(en),address:en}),_A=(0,b.object)({kind:(0,b.literal)("SplitCoins"),coin:en,amounts:(0,b.array)(en)}),$A=(0,b.object)({kind:(0,b.literal)("MergeCoins"),destination:en,sources:(0,b.array)(en)}),qA=(0,b.object)({kind:(0,b.literal)("MakeMoveVec"),type:(0,b.union)([(0,b.object)({Some:rs}),(0,b.object)({None:(0,b.nullable)((0,b.literal)(!0))})]),objects:(0,b.array)(en)}),eu=(0,b.union)([KA,EA,_A,$A,(0,b.object)({kind:(0,b.literal)("Publish"),modules:(0,b.array)((0,b.array)((0,b.pipe)((0,b.number)(),(0,b.integer)()))),dependencies:(0,b.array)((0,b.string)())}),(0,b.object)({kind:(0,b.literal)("Upgrade"),modules:(0,b.array)((0,b.array)((0,b.pipe)((0,b.number)(),(0,b.integer)()))),dependencies:(0,b.array)((0,b.string)()),packageId:(0,b.string)(),ticket:en}),qA]),th=(0,b.object)({version:(0,b.literal)(1),sender:(0,b.optional)((0,b.string)()),expiration:(0,b.nullish)(zA),gasConfig:DA,inputs:(0,b.array)(oc),transactions:(0,b.array)(eu)});function sc(i){let n=i.inputs.map((a,r)=>{if(a.Object)return{kind:"Input",index:r,value:{Object:a.Object.ImmOrOwnedObject?{ImmOrOwned:a.Object.ImmOrOwnedObject}:a.Object.Receiving?{Receiving:{digest:a.Object.Receiving.digest,version:a.Object.Receiving.version,objectId:a.Object.Receiving.objectId}}:{Shared:{mutable:a.Object.SharedObject.mutable,initialSharedVersion:a.Object.SharedObject.initialSharedVersion,objectId:a.Object.SharedObject.objectId}}},type:"object"};if(a.Pure)return{kind:"Input",index:r,value:{Pure:Array.from((0,In.fromBase64)(a.Pure.bytes))},type:"pure"};if(a.UnresolvedPure)return{kind:"Input",type:"pure",index:r,value:a.UnresolvedPure.value};if(a.UnresolvedObject)return{kind:"Input",type:"object",index:r,value:a.UnresolvedObject.objectId};throw new Error("Invalid input")});return{version:1,sender:i.sender??void 0,expiration:i.expiration?.$kind==="Epoch"?{Epoch:Number(i.expiration.Epoch)}:i.expiration?{None:!0}:null,gasConfig:{owner:i.gasData.owner??void 0,budget:i.gasData.budget??void 0,price:i.gasData.price??void 0,payment:i.gasData.payment??void 0},inputs:n,transactions:i.commands.map(a=>{if(a.MakeMoveVec)return{kind:"MakeMoveVec",type:a.MakeMoveVec.type===null?{None:!0}:{Some:st.parseFromStr(a.MakeMoveVec.type)},objects:a.MakeMoveVec.elements.map(r=>$t(r,n))};if(a.MergeCoins)return{kind:"MergeCoins",destination:$t(a.MergeCoins.destination,n),sources:a.MergeCoins.sources.map(r=>$t(r,n))};if(a.MoveCall)return{kind:"MoveCall",target:`${a.MoveCall.package}::${a.MoveCall.module}::${a.MoveCall.function}`,typeArguments:a.MoveCall.typeArguments,arguments:a.MoveCall.arguments.map(r=>$t(r,n))};if(a.Publish)return{kind:"Publish",modules:a.Publish.modules.map(r=>Array.from((0,In.fromBase64)(r))),dependencies:a.Publish.dependencies};if(a.SplitCoins)return{kind:"SplitCoins",coin:$t(a.SplitCoins.coin,n),amounts:a.SplitCoins.amounts.map(r=>$t(r,n))};if(a.TransferObjects)return{kind:"TransferObjects",objects:a.TransferObjects.objects.map(r=>$t(r,n)),address:$t(a.TransferObjects.address,n)};if(a.Upgrade)return{kind:"Upgrade",modules:a.Upgrade.modules.map(r=>Array.from((0,In.fromBase64)(r))),dependencies:a.Upgrade.dependencies,packageId:a.Upgrade.package,ticket:$t(a.Upgrade.ticket,n)};throw new Error(`Unknown transaction ${Object.keys(a)}`)})}}function $t(i,n){if(i.$kind==="GasCoin")return{kind:"GasCoin"};if(i.$kind==="Result")return{kind:"Result",index:i.Result};if(i.$kind==="NestedResult")return{kind:"NestedResult",index:i.NestedResult[0],resultIndex:i.NestedResult[1]};if(i.$kind==="Input")return n[i.Input];throw new Error(`Invalid argument ${Object.keys(i)}`)}function dc(i){return(0,b.parse)($n,{version:2,sender:i.sender??null,expiration:i.expiration?"Epoch"in i.expiration?{Epoch:i.expiration.Epoch}:{None:!0}:null,gasData:{owner:i.gasConfig.owner??null,budget:i.gasConfig.budget?.toString()??null,price:i.gasConfig.price?.toString()??null,payment:i.gasConfig.payment?.map(n=>({digest:n.digest,objectId:n.objectId,version:n.version.toString()}))??null},inputs:i.inputs.map(n=>{if(n.kind==="Input"){if((0,b.is)(ic,n.value)){let a=(0,b.parse)(ic,n.value);if(a.Object){if(a.Object.ImmOrOwned)return{Object:{ImmOrOwnedObject:{objectId:a.Object.ImmOrOwned.objectId,version:String(a.Object.ImmOrOwned.version),digest:a.Object.ImmOrOwned.digest}}};if(a.Object.Shared)return{Object:{SharedObject:{mutable:a.Object.Shared.mutable??null,initialSharedVersion:a.Object.Shared.initialSharedVersion,objectId:a.Object.Shared.objectId}}};if(a.Object.Receiving)return{Object:{Receiving:{digest:a.Object.Receiving.digest,version:String(a.Object.Receiving.version),objectId:a.Object.Receiving.objectId}}};throw new Error("Invalid object input")}return{Pure:{bytes:(0,In.toBase64)(new Uint8Array(a.Pure))}}}return n.type==="object"?{UnresolvedObject:{objectId:n.value}}:{UnresolvedPure:{value:n.value}}}throw new Error("Invalid input")}),commands:i.transactions.map(n=>{switch(n.kind){case"MakeMoveVec":return{MakeMoveVec:{type:"Some"in n.type?st.tagToString(n.type.Some):null,elements:n.objects.map(a=>qt(a))}};case"MergeCoins":return{MergeCoins:{destination:qt(n.destination),sources:n.sources.map(a=>qt(a))}};case"MoveCall":{let[a,r,o]=n.target.split("::");return{MoveCall:{package:a,module:r,function:o,typeArguments:n.typeArguments,arguments:n.arguments.map(s=>qt(s))}}}case"Publish":return{Publish:{modules:n.modules.map(a=>(0,In.toBase64)(Uint8Array.from(a))),dependencies:n.dependencies}};case"SplitCoins":return{SplitCoins:{coin:qt(n.coin),amounts:n.amounts.map(a=>qt(a))}};case"TransferObjects":return{TransferObjects:{objects:n.objects.map(a=>qt(a)),address:qt(n.address)}};case"Upgrade":return{Upgrade:{modules:n.modules.map(a=>(0,In.toBase64)(Uint8Array.from(a))),dependencies:n.dependencies,package:n.packageId,ticket:qt(n.ticket)}}}throw new Error(`Unknown transaction ${Object.keys(n)}`)})})}function qt(i){switch(i.kind){case"GasCoin":return{GasCoin:!0};case"Result":return{Result:i.index};case"NestedResult":return{NestedResult:[i.index,i.resultIndex]};case"Input":return{Input:i.index}}}var tu=require("valibot");function qn(i){if(typeof i=="string")return V(i);if(i.Object)return i.Object.ImmOrOwnedObject?V(i.Object.ImmOrOwnedObject.objectId):i.Object.Receiving?V(i.Object.Receiving.objectId):V(i.Object.SharedObject.objectId);if(i.UnresolvedObject)return V(i.UnresolvedObject.objectId)}function cc(i,n,a){let r=o=>{switch(o.$kind){case"Input":{let s=n.get(o.Input);if(s===void 0)throw new Error(`Input ${o.Input} not found in input mapping`);return{...o,Input:s}}case"Result":{let s=a.get(o.Result);return s!==void 0?{...o,Result:s}:o}case"NestedResult":{let s=a.get(o.NestedResult[0]);return s!==void 0?{...o,NestedResult:[s,o.NestedResult[1]]}:o}default:return o}};switch(i.$kind){case"MoveCall":i.MoveCall.arguments=i.MoveCall.arguments.map(r);break;case"TransferObjects":i.TransferObjects.objects=i.TransferObjects.objects.map(r),i.TransferObjects.address=r(i.TransferObjects.address);break;case"SplitCoins":i.SplitCoins.coin=r(i.SplitCoins.coin),i.SplitCoins.amounts=i.SplitCoins.amounts.map(r);break;case"MergeCoins":i.MergeCoins.destination=r(i.MergeCoins.destination),i.MergeCoins.sources=i.MergeCoins.sources.map(r);break;case"MakeMoveVec":i.MakeMoveVec.elements=i.MakeMoveVec.elements.map(r);break;case"Upgrade":i.Upgrade.ticket=r(i.Upgrade.ticket);break;case"$Intent":{let o=i.$Intent.inputs;i.$Intent.inputs={};for(let[s,d]of Object.entries(o))i.$Intent.inputs[s]=Array.isArray(d)?d.map(r):r(d);break}case"Publish":break}}var gc=require("@noble/hashes/blake2.js");function lc(i,n){let a=Array.from(`${i}::`).map(o=>o.charCodeAt(0)),r=new Uint8Array(a.length+n.length);return r.set(a),r.set(n,a.length),(0,gc.blake2b)(r,{dkLen:32})}var uc=require("@mysten/bcs"),Da=require("valibot");function Ac(i){return V(i).replace("0x","")}var dt=class Fn{static fromKindBytes(n){let a=B.TransactionKind.parse(n).ProgrammableTransaction;if(!a)throw new Error("Unable to deserialize from bytes.");return Fn.restore({version:2,sender:null,expiration:null,gasData:{budget:null,owner:null,payment:null,price:null},inputs:a.inputs,commands:a.commands})}static fromBytes(n){let a=B.TransactionData.parse(n)?.V1,r=a.kind.ProgrammableTransaction;if(!a||!r)throw new Error("Unable to deserialize from bytes.");return Fn.restore({version:2,sender:a.sender,expiration:a.expiration,gasData:a.gasData,inputs:r.inputs,commands:r.commands})}static restore(n){return n.version===2?new Fn((0,Da.parse)($n,n)):new Fn((0,Da.parse)($n,dc(n)))}static getDigestFromBytes(n){return(0,uc.toBase58)(lc("TransactionData",n))}constructor(n){this.version=2,this.sender=n?.sender??null,this.expiration=n?.expiration??null,this.inputs=n?.inputs??[],this.commands=n?.commands??[],this.gasData=n?.gasData??{budget:null,price:null,owner:null,payment:null}}build({maxSizeBytes:n=1/0,overrides:a,onlyTransactionKind:r}={}){let o=this.inputs,s=this.commands,d={ProgrammableTransaction:{inputs:o,commands:s}};if(r)return B.TransactionKind.serialize(d,{maxSize:n}).toBytes();let c=a?.expiration??this.expiration,g=a?.sender??this.sender,l={...this.gasData,...a?.gasData};if(!g)throw new Error("Missing transaction sender");if(!l.budget)throw new Error("Missing gas budget");if(!l.payment)throw new Error("Missing gas payment");if(!l.price)throw new Error("Missing gas price");let A={sender:Ac(g),expiration:c||{None:!0},gasData:{payment:l.payment,owner:Ac(this.gasData.owner??g),price:BigInt(l.price),budget:BigInt(l.budget)},kind:{ProgrammableTransaction:{inputs:o,commands:s}}};return B.TransactionData.serialize({V1:A},{maxSize:n}).toBytes()}addInput(n,a){let r=this.inputs.length;return this.inputs.push(a),{Input:r,type:n,$kind:"Input"}}getInputUses(n,a){this.mapArguments((r,o)=>(r.$kind==="Input"&&r.Input===n&&a(r,o),r))}mapCommandArguments(n,a){let r=this.commands[n];switch(r.$kind){case"MoveCall":r.MoveCall.arguments=r.MoveCall.arguments.map(s=>a(s,r,n));break;case"TransferObjects":r.TransferObjects.objects=r.TransferObjects.objects.map(s=>a(s,r,n)),r.TransferObjects.address=a(r.TransferObjects.address,r,n);break;case"SplitCoins":r.SplitCoins.coin=a(r.SplitCoins.coin,r,n),r.SplitCoins.amounts=r.SplitCoins.amounts.map(s=>a(s,r,n));break;case"MergeCoins":r.MergeCoins.destination=a(r.MergeCoins.destination,r,n),r.MergeCoins.sources=r.MergeCoins.sources.map(s=>a(s,r,n));break;case"MakeMoveVec":r.MakeMoveVec.elements=r.MakeMoveVec.elements.map(s=>a(s,r,n));break;case"Upgrade":r.Upgrade.ticket=a(r.Upgrade.ticket,r,n);break;case"$Intent":let o=r.$Intent.inputs;r.$Intent.inputs={};for(let[s,d]of Object.entries(o))r.$Intent.inputs[s]=Array.isArray(d)?d.map(c=>a(c,r,n)):a(d,r,n);break;case"Publish":break;default:throw new Error(`Unexpected transaction kind: ${r.$kind}`)}}mapArguments(n){for(let a of this.commands.keys())this.mapCommandArguments(a,n)}replaceCommand(n,a,r=n){if(!Array.isArray(a)){this.commands[n]=a;return}let o=a.length-1;this.commands.splice(n,1,...structuredClone(a)),this.mapArguments((s,d,c)=>{if(c<n+a.length)return s;if(typeof r!="number"&&(s.$kind==="Result"&&s.Result===n||s.$kind==="NestedResult"&&s.NestedResult[0]===n)){if(!("NestedResult"in s)||s.NestedResult[1]===0)return(0,Da.parse)(ge,structuredClone(r));throw new Error(`Cannot replace command ${n} with a specific result type: NestedResult[${n}, ${s.NestedResult[1]}] references a nested element that cannot be mapped to the replacement result`)}switch(s.$kind){case"Result":s.Result===n&&typeof r=="number"&&(s.Result=r),s.Result>n&&(s.Result+=o);break;case"NestedResult":if(s.NestedResult[0]===n&&typeof r=="number")return{$kind:"NestedResult",NestedResult:[r,s.NestedResult[1]]};s.NestedResult[0]>n&&(s.NestedResult[0]+=o);break}return s})}replaceCommandWithTransaction(n,a,r){if(r.$kind!=="Result"&&r.$kind!=="NestedResult")throw new Error("Result must be of kind Result or NestedResult");this.insertTransaction(n,a),this.replaceCommand(n+a.commands.length,[],"Result"in r?{NestedResult:[r.Result+n,0]}:{NestedResult:[r.NestedResult[0]+n,r.NestedResult[1]]})}insertTransaction(n,a){let r=new Map,o=new Map;for(let c=0;c<a.inputs.length;c++){let g=a.inputs[c],l=qn(g),A=-1;if(l!==void 0&&(A=this.inputs.findIndex(u=>qn(u)===l),A!==-1&&this.inputs[A].Object?.SharedObject&&g.Object?.SharedObject&&(this.inputs[A].Object.SharedObject.mutable=this.inputs[A].Object.SharedObject.mutable||g.Object.SharedObject.mutable)),A!==-1)r.set(c,A);else{let u=this.inputs.length;this.inputs.push(g),r.set(c,u)}}for(let c=0;c<a.commands.length;c++)o.set(c,n+c);let s=[];for(let c=0;c<a.commands.length;c++){let g=structuredClone(a.commands[c]);cc(g,r,o),s.push(g)}this.commands.splice(n,0,...s);let d=s.length;d>0&&this.mapArguments((c,g,l)=>{if(l>=n&&l<n+s.length)return c;switch(c.$kind){case"Result":c.Result>=n&&(c.Result+=d);break;case"NestedResult":c.NestedResult[0]>=n&&(c.NestedResult[0]+=d);break}return c})}getDigest(){let n=this.build({onlyTransactionKind:!1});return Fn.getDigestFromBytes(n)}snapshot(){return(0,Da.parse)($n,this)}shallowClone(){return new Fn({version:this.version,sender:this.sender,expiration:this.expiration,gasData:{...this.gasData},inputs:[...this.inputs],commands:[...this.commands]})}applyResolvedData(n){this.sender||(this.sender=n.sender??null),this.expiration||(this.expiration=n.expiration??null),this.gasData.budget||(this.gasData.budget=n.gasData.budget),this.gasData.owner||(this.gasData.owner=n.gasData.owner??null),this.gasData.payment||(this.gasData.payment=n.gasData.payment),this.gasData.price||(this.gasData.price=n.gasData.price);for(let a=0;a<this.inputs.length;a++){let r=this.inputs[a],o=n.inputs[a];switch(r.$kind){case"UnresolvedPure":if(o.$kind!=="Pure")throw new Error(`Expected input at index ${a} to resolve to a Pure argument, but got ${JSON.stringify(o)}`);this.inputs[a]=o;break;case"UnresolvedObject":if(o.$kind!=="Object")throw new Error(`Expected input at index ${a} to resolve to an Object argument, but got ${JSON.stringify(o)}`);if(o.Object.$kind==="ImmOrOwnedObject"||o.Object.$kind==="Receiving"){let s=r.UnresolvedObject,d=o.Object.ImmOrOwnedObject??o.Object.Receiving;if(V(s.objectId)!==V(d.objectId)||s.version!=null&&s.version!==d.version||s.digest!=null&&s.digest!==d.digest||s.mutable!=null||s.initialSharedVersion!=null)throw new Error(`Input at index ${a} did not match unresolved object. ${JSON.stringify(s)} is not compatible with ${JSON.stringify(d)}`)}else if(o.Object.$kind==="SharedObject"){let s=r.UnresolvedObject,d=o.Object.SharedObject;if(V(s.objectId)!==V(d.objectId)||s.initialSharedVersion!=null&&s.initialSharedVersion!==d.initialSharedVersion||s.mutable!=null&&s.mutable!==d.mutable||s.version!=null||s.digest!=null)throw new Error(`Input at index ${a} did not match unresolved object. ${JSON.stringify(s)} is not compatible with ${JSON.stringify(d)}`)}else throw new Error(`Input at index ${a} resolved to an unexpected Object kind: ${JSON.stringify(o.Object)}`);this.inputs[a]=o;break}}}};var os=require("@mysten/bcs"),Bt=require("valibot");var Be={MoveCall(i){let[n,a="",r=""]="target"in i?i.target.split("::"):[i.package,i.module,i.function];return{$kind:"MoveCall",MoveCall:{package:n,module:a,function:r,typeArguments:i.typeArguments??[],arguments:i.arguments??[]}}},TransferObjects(i,n){return{$kind:"TransferObjects",TransferObjects:{objects:i.map(a=>(0,Bt.parse)(ge,a)),address:(0,Bt.parse)(ge,n)}}},SplitCoins(i,n){return{$kind:"SplitCoins",SplitCoins:{coin:(0,Bt.parse)(ge,i),amounts:n.map(a=>(0,Bt.parse)(ge,a))}}},MergeCoins(i,n){return{$kind:"MergeCoins",MergeCoins:{destination:(0,Bt.parse)(ge,i),sources:n.map(a=>(0,Bt.parse)(ge,a))}}},Publish({modules:i,dependencies:n}){return{$kind:"Publish",Publish:{modules:i.map(a=>typeof a=="string"?a:(0,os.toBase64)(new Uint8Array(a))),dependencies:n.map(a=>Lt(a))}}},Upgrade({modules:i,dependencies:n,package:a,ticket:r}){return{$kind:"Upgrade",Upgrade:{modules:i.map(o=>typeof o=="string"?o:(0,os.toBase64)(new Uint8Array(o))),dependencies:n.map(o=>Lt(o)),package:a,ticket:(0,Bt.parse)(ge,r)}}},MakeMoveVec({type:i,elements:n}){return{$kind:"MakeMoveVec",MakeMoveVec:{type:i??null,elements:n.map(a=>(0,Bt.parse)(ge,a))}}},Intent({name:i,inputs:n={},data:a={}}){return{$kind:"$Intent",$Intent:{name:i,inputs:Object.fromEntries(Object.entries(n).map(([r,o])=>[r,Array.isArray(o)?o.map(s=>(0,Bt.parse)(ge,s)):(0,Bt.parse)(ge,o)])),data:a}}}};var w=require("valibot");function Qa(i){return(0,w.union)(Object.entries(i).map(([n,a])=>(0,w.object)({[n]:a})))}var Yt=Qa({GasCoin:(0,w.literal)(!0),Input:(0,w.pipe)((0,w.number)(),(0,w.integer)()),Result:(0,w.pipe)((0,w.number)(),(0,w.integer)()),NestedResult:(0,w.tuple)([(0,w.pipe)((0,w.number)(),(0,w.integer)()),(0,w.pipe)((0,w.number)(),(0,w.integer)())])}),nu=(0,w.object)({budget:(0,w.nullable)(Te),price:(0,w.nullable)(Te),owner:(0,w.nullable)(Nn),payment:(0,w.nullable)((0,w.array)(Rt))}),au=(0,w.object)({package:qe,module:(0,w.string)(),function:(0,w.string)(),typeArguments:(0,w.array)((0,w.string)()),arguments:(0,w.array)(Yt)}),iu=(0,w.object)({name:(0,w.string)(),inputs:(0,w.record)((0,w.string)(),(0,w.union)([Yt,(0,w.array)(Yt)])),data:(0,w.record)((0,w.string)(),(0,w.unknown)())}),ru=Qa({MoveCall:au,TransferObjects:(0,w.object)({objects:(0,w.array)(Yt),address:Yt}),SplitCoins:(0,w.object)({coin:Yt,amounts:(0,w.array)(Yt)}),MergeCoins:(0,w.object)({destination:Yt,sources:(0,w.array)(Yt)}),Publish:(0,w.object)({modules:(0,w.array)(Cn),dependencies:(0,w.array)(qe)}),MakeMoveVec:(0,w.object)({type:(0,w.nullable)((0,w.string)()),elements:(0,w.array)(Yt)}),Upgrade:(0,w.object)({modules:(0,w.array)(Cn),dependencies:(0,w.array)(qe),package:qe,ticket:Yt}),$Intent:iu}),ou=Qa({Object:Qa({ImmOrOwnedObject:Rt,SharedObject:(0,w.object)({objectId:qe,initialSharedVersion:Te,mutable:(0,w.boolean)()}),Receiving:Rt}),Pure:(0,w.object)({bytes:Cn}),UnresolvedPure:(0,w.object)({value:(0,w.unknown)()}),UnresolvedObject:(0,w.object)({objectId:qe,version:(0,w.optional)((0,w.nullable)(Te)),digest:(0,w.optional)((0,w.nullable)((0,w.string)())),initialSharedVersion:(0,w.optional)((0,w.nullable)(Te)),mutable:(0,w.optional)((0,w.nullable)((0,w.boolean)()))}),FundsWithdrawal:qo}),su=Qa({None:(0,w.literal)(!0),Epoch:Te,ValidDuring:ts}),pc=(0,w.object)({version:(0,w.literal)(2),sender:(0,w.nullish)(Nn),expiration:(0,w.nullish)(su),gasData:nu,inputs:(0,w.array)(ou),commands:(0,w.array)(ru),digest:(0,w.optional)((0,w.nullable)((0,w.string)()))});var mc=require("@mysten/bcs");function du(i){return{$kind:"Pure",Pure:{bytes:i instanceof Uint8Array?(0,mc.toBase64)(i):i.toBase64()}}}var Ie={Pure:du,ObjectRef({objectId:i,digest:n,version:a}){return{$kind:"Object",Object:{$kind:"ImmOrOwnedObject",ImmOrOwnedObject:{digest:n,version:a,objectId:V(i)}}}},SharedObjectRef({objectId:i,mutable:n,initialSharedVersion:a}){return{$kind:"Object",Object:{$kind:"SharedObject",SharedObject:{mutable:n,initialSharedVersion:a,objectId:V(i)}}}},ReceivingRef({objectId:i,digest:n,version:a}){return{$kind:"Object",Object:{$kind:"Receiving",Receiving:{digest:n,version:a,objectId:V(i)}}}},FundsWithdrawal({reservation:i,typeArg:n,withdrawFrom:a}){return{$kind:"FundsWithdrawal",FundsWithdrawal:{reservation:i,typeArg:n,withdrawFrom:a}}}};var bc=class extends Error{},yc=class extends bc{constructor(i,n){super(i,{cause:n?.cause}),this.executionError=n?.executionError}},ss=class ea extends bc{constructor(n,a){super(a),this.code=n}static fromResponse(n,a){switch(n.code){case"notExists":return new ea(n.code,`Object ${n.object_id} does not exist`);case"dynamicFieldNotFound":return new ea(n.code,`Dynamic field not found for object ${n.parent_object_id}`);case"deleted":return new ea(n.code,`Object ${n.object_id} has been deleted`);case"displayError":return new ea(n.code,`Display error: ${n.error}`);default:return new ea(n.code,`Unknown error while loading object${a?` ${a}`:""}`)}}};var cu=BigInt(1e9),Ka="0x0000000000000000000000000000000000000000000000000000000000000001",tn="0x0000000000000000000000000000000000000000000000000000000000000002",ds="0x0000000000000000000000000000000000000000000000000000000000000003",ta="0x0000000000000000000000000000000000000000000000000000000000000006";var cr=`${tn}::sui::SUI`,gr="0x0000000000000000000000000000000000000000000000000000000000000005",cs="0x0000000000000000000000000000000000000000000000000000000000000008";var gs="0x0000000000000000000000000000000000000000000000000000000000000403";function Cc(i){let n=i.split("::");if(n.length!==3)throw new Error(`Invalid type name format: ${i}`);return{package:n[0],module:n[1],name:n[2]}}function Ic(i){if(i.body.$kind!=="datatype")return!1;let{package:n,module:a,name:r}=Cc(i.body.datatype.typeName);return V(n)===tn&&a==="tx_context"&&r==="TxContext"}function lr(i){switch(i.$kind){case"address":return B.Address;case"bool":return B.Bool;case"u8":return B.U8;case"u16":return B.U16;case"u32":return B.U32;case"u64":return B.U64;case"u128":return B.U128;case"u256":return B.U256;case"vector":{if(i.vector.$kind==="u8")return B.byteVector().transform({input:a=>typeof a=="string"?new TextEncoder().encode(a):a,output:a=>a});let n=lr(i.vector);return n?B.vector(n):null}case"datatype":{let{package:n,module:a,name:r}=Cc(i.datatype.typeName),o=V(n);if(o===Ka){if(a==="ascii"&&r==="String")return B.String;if(a==="string"&&r==="String")return B.String;if(a==="option"&&r==="Option"){let s=lr(i.datatype.typeParameters[0]);return s?B.vector(s):null}}return o===tn&&a==="object"&&r==="ID"?B.Address:null}case"typeParameter":case"unknown":return null}}var hc=require("@mysten/utils"),gu=50,lu=1000n,Au=5e10;function ls(i,n=1n){let a=lu*BigInt(n),r=BigInt(i.computationCost)+a,o=r+BigInt(i.storageCost)-BigInt(i.storageRebate);return String(o>r?o:r)}function uu(i){if(!i.client)throw new Error("No sui client passed to Transaction#build, but transaction data was not sufficient to build offline.");return i.client}async function Ar(i,n,a){let r=uu(n),o=!n.onlyTransactionKind&&!i.gasData.price,s=!n.onlyTransactionKind&&!i.gasData.payment,d=i.gasData.owner??i.sender,c=!1,g=0n;i.mapArguments(Y=>(Y.$kind==="GasCoin"&&(c=!0),Y));let l=d?V(d):null;for(let Y of i.inputs){if(Y.$kind!=="FundsWithdrawal"||!l||oe(Y.FundsWithdrawal.typeArg.Balance)!==cr)continue;let h=Y.FundsWithdrawal.withdrawFrom.Sender?i.sender:d;h&&V(h)===l&&Y.FundsWithdrawal.reservation.$kind==="MaxAmountU64"&&(g+=BigInt(Y.FundsWithdrawal.reservation.MaxAmountU64))}let A=!n.onlyTransactionKind&&!i.expiration&&!i.gasData.budget,u=o||s&&c||A,m=s&&c||A,[,y,v,C,T]=await Promise.all([Cu(i,r),u?r.core.getCurrentSystemState():null,s&&d?r.core.getBalance({owner:d}):null,s&&d?r.core.listCoins({owner:d,coinType:cr}):null,m?r.core.getChainIdentifier():null]);if(await yu(i,r),!n.onlyTransactionKind){let Y=y?.systemState??null,h=T?.chainIdentifier??null;if(Y&&!i.gasData.price&&(i.gasData.price=Y.referenceGasPrice),await pu(i,r,A&&Y&&h?vc(Y,h):void 0),s){if(!v||!C)throw new Error("Could not resolve gas payment: a gas owner or sender must be set to fetch balance and coins.");mu({transactionData:i,balance:v,coins:C,usesGasCoin:c,withdrawals:g,gasPayer:d,chainIdentifier:h,epoch:Y?.epoch??null})}!i.expiration&&i.gasData.payment?.length===0&&await bu(i,r,Y,h)}return await a()}async function pu(i,n,a){if(i.gasData.budget)return;let r=await n.core.simulateTransaction({transaction:i.build({overrides:{gasData:{budget:String(Au),payment:[]},...a&&{expiration:a}}}),include:{effects:!0}});if(r.$kind==="FailedTransaction"){let o=r.FailedTransaction.status.error??void 0;throw new yc(`Transaction resolution failed: ${o?.message??"Unknown error"}`,{cause:r,executionError:o})}i.gasData.budget=ls(r.Transaction.effects.gasUsed,i.gasData.price?String(i.gasData.price):void 0)}function mu({transactionData:i,balance:n,coins:a,usesGasCoin:r,withdrawals:o,gasPayer:s,chainIdentifier:d,epoch:c}){let g=BigInt(i.gasData.budget),l=BigInt(n.balance.addressBalance);if(g===0n||!r&&l>=g+o){i.gasData.payment=[];return}let A=a.objects.filter(y=>!i.inputs.find(v=>v.Object?.ImmOrOwnedObject?y.objectId===v.Object.ImmOrOwnedObject.objectId:!1)),u=A.map(y=>({objectId:y.objectId,digest:y.digest,version:y.version})),m=l-o;if(r&&m>0n&&d&&c)i.gasData.payment=[ac(m,s,d,c),...u];else if(A.length)i.gasData.payment=u;else throw new Error("No valid gas coins found for the transaction.")}async function bu(i,n,a,r=null){let[o,s]=await Promise.all([r??n.core.getChainIdentifier().then(d=>d.chainIdentifier),a??n.core.getCurrentSystemState().then(d=>d.systemState)]);i.expiration=vc(s,o)}function vc(i,n){let a=BigInt(i.epoch);return{$kind:"ValidDuring",ValidDuring:{minEpoch:String(a),maxEpoch:String(a+1n),minTimestamp:null,maxTimestamp:null,chain:n,nonce:Math.random()*4294967296>>>0}}}async function yu(i,n){let a=i.inputs.filter(A=>A.UnresolvedObject&&!(A.UnresolvedObject.version||A.UnresolvedObject?.initialSharedVersion)),r=[...new Set(a.map(A=>Lt(A.UnresolvedObject.objectId)))],o=r.length?(0,hc.chunk)(r,gu):[],s=(await Promise.all(o.map(A=>n.core.getObjects({objectIds:A})))).flatMap(A=>A.objects),d=new Map(r.map((A,u)=>[A,s[u]])),c=Array.from(d).filter(([A,u])=>u instanceof Error).map(([A,u])=>u.message);if(c.length)throw new Error(`The following input objects are invalid: ${c.join(", ")}`);let g=s.map(A=>{if(A instanceof Error)throw new Error(`Failed to fetch object: ${A.message}`);let u=A.owner,m=u&&typeof u=="object"?u.$kind==="Shared"?u.Shared.initialSharedVersion:u.$kind==="ConsensusAddressOwner"?u.ConsensusAddressOwner.startVersion:null:null;return{objectId:A.objectId,digest:A.digest,version:A.version,initialSharedVersion:m}}),l=new Map(r.map((A,u)=>[A,g[u]]));for(let[A,u]of i.inputs.entries()){if(!u.UnresolvedObject)continue;let m,y=V(u.UnresolvedObject.objectId),v=l.get(y);u.UnresolvedObject.initialSharedVersion??v?.initialSharedVersion?m=Ie.SharedObjectRef({objectId:y,initialSharedVersion:u.UnresolvedObject.initialSharedVersion||v?.initialSharedVersion,mutable:u.UnresolvedObject.mutable||Iu(i,A)}):hu(i,A)&&(m=Ie.ReceivingRef({objectId:y,digest:u.UnresolvedObject.digest??v?.digest,version:u.UnresolvedObject.version??v?.version})),i.inputs[i.inputs.indexOf(u)]=m??Ie.ObjectRef({objectId:y,digest:u.UnresolvedObject.digest??v?.digest,version:u.UnresolvedObject.version??v?.version})}}async function Cu(i,n){let{inputs:a,commands:r}=i,o=[],s=new Set;r.forEach(c=>{if(c.MoveCall){if(c.MoveCall._argumentTypes)return;if(c.MoveCall.arguments.map(g=>g.$kind==="Input"?i.inputs[g.Input]:null).some(g=>g?.UnresolvedPure||g?.UnresolvedObject&&typeof g?.UnresolvedObject.mutable!="boolean")){let g=`${c.MoveCall.package}::${c.MoveCall.module}::${c.MoveCall.function}`;s.add(g),o.push(c.MoveCall)}}});let d=new Map;s.size>0&&await Promise.all([...s].map(async c=>{let[g,l,A]=c.split("::"),{function:u}=await n.core.getMoveFunction({packageId:g,moduleName:l,name:A});d.set(c,u.parameters)})),o.length&&await Promise.all(o.map(async c=>{let g=d.get(`${c.package}::${c.module}::${c.function}`);g&&(c._argumentTypes=g.length>0&&Ic(g.at(-1))?g.slice(0,g.length-1):g)})),r.forEach(c=>{if(!c.MoveCall)return;let g=c.MoveCall,l=`${g.package}::${g.module}::${g.function}`,A=g._argumentTypes;if(A){if(A.length!==c.MoveCall.arguments.length)throw new Error(`Incorrect number of arguments for ${l}`);A.forEach((u,m)=>{let y=g.arguments[m];if(y.$kind!=="Input")return;let v=a[y.Input];if(!v.UnresolvedPure&&!v.UnresolvedObject)return;let C=v.UnresolvedPure?.value??v.UnresolvedObject?.objectId,T=lr(u.body);if(T){y.type="pure",a[a.indexOf(v)]=Ie.Pure(T.serialize(C));return}if(typeof C!="string")throw new Error(`Expect the argument to be an object id string, got ${JSON.stringify(C,null,2)}`);y.type="object";let Y=v.UnresolvedPure?{$kind:"UnresolvedObject",UnresolvedObject:{objectId:C}}:v;a[y.Input]=Y})}})}function Iu(i,n){let a=!1;return i.getInputUses(n,(r,o)=>{if(o.MoveCall&&o.MoveCall._argumentTypes){let s=o.MoveCall.arguments.indexOf(r);a=o.MoveCall._argumentTypes[s].reference!=="immutable"||a}(o.$kind==="MakeMoveVec"||o.$kind==="MergeCoins"||o.$kind==="SplitCoins"||o.$kind==="TransferObjects")&&(a=!0)}),a}function hu(i,n){let a=!1;return i.getInputUses(n,(r,o)=>{if(o.MoveCall&&o.MoveCall._argumentTypes){let s=o.MoveCall.arguments.indexOf(r);a=fu(o.MoveCall._argumentTypes[s])||a}}),a}var vu="0x0000000000000000000000000000000000000000000000000000000000000002::transfer::Receiving";function fu(i){return i.body.$kind!=="datatype"?!1:i.body.datatype.typeName===vu}function As(i,n){return!!(i.inputs.some(a=>a.UnresolvedObject||a.UnresolvedPure)||!n.onlyTransactionKind&&(!i.gasData.price||!i.gasData.budget||!i.gasData.payment||i.gasData.payment.length===0&&!i.expiration))}async function Tc(i,n,a){return Tu(i),As(i,n)?(Ru(n).core?.resolveTransactionPlugin()??Ar)(i,n,async()=>{await fc(i),await a()}):(await fc(i),a())}function fc(i){i.inputs.forEach((n,a)=>{if(n.$kind!=="Object"&&n.$kind!=="Pure"&&n.$kind!=="FundsWithdrawal")throw new Error(`Input at index ${a} has not been resolved. Expected a Pure, Object, or FundsWithdrawal input, but found ${JSON.stringify(n)}`)})}function Ru(i){if(!i.client)throw new Error("No sui client passed to Transaction#build, but transaction data was not sufficient to build offline.");return i.client}function Tu(i){for(let n of i.commands)switch(n.$kind){case"SplitCoins":n.SplitCoins.amounts.forEach(a=>{Rc(a,B.U64,i)});break;case"TransferObjects":Rc(n.TransferObjects.address,B.Address,i);break}}function Rc(i,n,a){if(i.$kind!=="Input")return;let r=a.inputs[i.Input];r.$kind==="UnresolvedPure"&&(a.inputs[i.Input]=Ie.Pure(n.serialize(r.UnresolvedPure.value)))}function Bc(i){function n(a){return i(a)}return n.system=a=>{let r=a?.mutable;return n(r!==void 0?Ie.SharedObjectRef({objectId:gr,initialSharedVersion:1,mutable:r}):{$kind:"UnresolvedObject",UnresolvedObject:{objectId:gr,initialSharedVersion:1}})},n.clock=()=>n(Ie.SharedObjectRef({objectId:ta,initialSharedVersion:1,mutable:!1})),n.random=()=>n({$kind:"UnresolvedObject",UnresolvedObject:{objectId:cs,mutable:!1}}),n.denyList=a=>n({$kind:"UnresolvedObject",UnresolvedObject:{objectId:gs,mutable:a?.mutable}}),n.option=({type:a,value:r})=>o=>o.moveCall({typeArguments:[a],target:`${Ka}::option::${r===null?"none":"some"}`,arguments:r===null?[]:[o.object(r)]}),n}var Yc=require("@mysten/bcs");function wc(i){function n(a,r){if(typeof a=="string")return i(En(a).serialize(r));if(a instanceof Uint8Array||(0,Yc.isSerializedBcs)(a))return i(a);throw new Error("tx.pure must be called either a bcs type name, or a serialized bcs value")}return n.u8=a=>i(B.U8.serialize(a)),n.u16=a=>i(B.U16.serialize(a)),n.u32=a=>i(B.U32.serialize(a)),n.u64=a=>i(B.U64.serialize(a)),n.u128=a=>i(B.U128.serialize(a)),n.u256=a=>i(B.U256.serialize(a)),n.bool=a=>i(B.Bool.serialize(a)),n.string=a=>i(B.String.serialize(a)),n.address=a=>i(B.Address.serialize(a)),n.id=n.address,n.vector=(a,r)=>i(B.vector(En(a)).serialize(r)),n.option=(a,r)=>i(B.option(En(a)).serialize(r)),n}function Wc(){return async(i,n,a)=>{let r=Hd(i);if(r.types.length===0&&r.packages.length===0)return a();if(!n.client)throw new Error("Transaction contains MVR names but no client was provided to resolve them. Please pass a client to Transaction#build()");Jd(i,await n.client.core.mvr.resolve({types:r.types,packages:r.packages})),await a()}}var ut=require("valibot"),hn="CoinWithBalance",nn=oe("0x2::sui::SUI");function pe({type:i=nn,balance:n,useGasCoin:a=!0}){let r=null;return o=>{if(r)return r;o.addIntentResolver(hn,ur);let s=i==="gas"?i:oe(i);return r=o.add(Be.Intent({name:hn,inputs:{},data:{type:s===nn&&a?"gas":s,balance:BigInt(n),outputKind:"coin"}})),r}}function Nc({type:i=nn,balance:n,useGasCoin:a=!0}){let r=null;return o=>{if(r)return r;o.addIntentResolver(hn,ur);let s=i==="gas"?i:oe(i);return r=o.add(Be.Intent({name:hn,inputs:{},data:{type:s===nn&&a?"gas":s,balance:BigInt(n),outputKind:"balance"}})),r}}var Bu=(0,ut.object)({type:(0,ut.string)(),balance:(0,ut.bigint)(),outputKind:(0,ut.optional)((0,ut.picklist)(["coin","balance"]))});async function ur(i,n,a){let r=new Set,o=new Map,s=new Map;if(!i.sender)throw new Error("Sender must be set to resolve CoinWithBalance");for(let[C,T]of i.commands.entries()){if(T.$kind!=="$Intent"||T.$Intent.name!==hn)continue;let{type:Y,balance:h,outputKind:F}=(0,ut.parse)(Bu,T.$Intent.data);if(h===0n){let G=Y==="gas"?nn:Y;i.replaceCommand(C,Be.MoveCall({target:(F??"coin")==="balance"?"0x2::balance::zero":"0x2::coin::zero",typeArguments:[G]}));continue}Y!=="gas"&&r.add(Y),o.set(Y,(o.get(Y)??0n)+h),s.has(Y)||s.set(Y,[]),s.get(Y).push({balance:h,outputKind:F??"coin"})}if(o.has("gas")&&o.has(nn))throw new Error("Cannot mix SUI CoinWithBalance intents that use the gas coin with ones that do not (useGasCoin: false). Use one or the other.");let d=new Set;for(let C of i.inputs)C.Object?.ImmOrOwnedObject&&d.add(C.Object.ImmOrOwnedObject.objectId),C.UnresolvedObject?.objectId&&d.add(C.UnresolvedObject.objectId);let c=new Map,g=new Map,l=n.client;if(!l)throw new Error("Client must be provided to build or serialize transactions with CoinWithBalance intents");await Promise.all([...[...r].map(async C=>{let{coins:T,addressBalance:Y}=await Yu({coinType:C,balance:o.get(C),client:l,owner:i.sender,usedIds:d});c.set(C,T),g.set(C,Y)}),o.has("gas")?await l.core.getBalance({owner:i.sender,coinType:nn}).then(({balance:C})=>{g.set("gas",BigInt(C.addressBalance))}):null]);let A=new Map,u=new Map,m=new Set,y=new Map,v=0;for(;v<i.commands.length;){let C=i.commands[v];if(C.$kind!=="$Intent"||C.$Intent.name!==hn){v++;continue}let{type:T,balance:Y}=C.$Intent.data,h=T==="gas"?nn:T,F=o.get(T),G=g.get(T)??0n,N=[],k,H=s.get(T)??[];if(H.every(ae=>ae.outputKind==="balance")&&G>=F)N.push(Be.MoveCall({target:"0x2::balance::redeem_funds",typeArguments:[h],arguments:[i.addInput("withdrawal",Ie.FundsWithdrawal({reservation:{$kind:"MaxAmountU64",MaxAmountU64:String(Y)},typeArg:{$kind:"Balance",Balance:h},withdrawFrom:{$kind:"Sender",Sender:!0}}))]})),k={$kind:"NestedResult",NestedResult:[v+N.length-1,0]};else{if(!y.has(T)){let re=H,E=[];if(G>=F)m.add(T),N.push(Be.MoveCall({target:"0x2::coin::redeem_funds",typeArguments:[h],arguments:[i.addInput("withdrawal",Ie.FundsWithdrawal({reservation:{$kind:"MaxAmountU64",MaxAmountU64:String(F)},typeArg:{$kind:"Balance",Balance:h},withdrawFrom:{$kind:"Sender",Sender:!0}}))]})),E.push({$kind:"Result",Result:v+N.length-1});else if(T==="gas")E.push({$kind:"GasCoin",GasCoin:!0});else{let q=c.get(T),le=q.reduce((Fe,z)=>Fe+BigInt(z.balance),0n),fe=F>le?F-le:0n;u.set(T,le+fe===F);for(let Fe of q)E.push(i.addInput("object",Ie.ObjectRef({objectId:Fe.objectId,digest:Fe.digest,version:Fe.version})));fe>0n&&(m.add(T),N.push(Be.MoveCall({target:"0x2::coin::redeem_funds",typeArguments:[h],arguments:[i.addInput("withdrawal",Ie.FundsWithdrawal({reservation:{$kind:"MaxAmountU64",MaxAmountU64:String(fe)},typeArg:{$kind:"Balance",Balance:h},withdrawFrom:{$kind:"Sender",Sender:!0}}))]})),E.push({$kind:"Result",Result:v+N.length-1}))}let _=E[0],$=E.slice(1);for(let q=0;q<$.length;q+=500)N.push(Be.MergeCoins(_,$.slice(q,q+500)));A.set(T,_);let ye=v+N.length;N.push(Be.SplitCoins(_,re.map(q=>i.addInput("pure",Ie.Pure(B.u64().serialize(q.balance))))));let ue=[];for(let q=0;q<re.length;q++){let le={$kind:"NestedResult",NestedResult:[ye,q]};re[q].outputKind==="balance"?(N.push(Be.MoveCall({target:"0x2::coin::into_balance",typeArguments:[h],arguments:[le]})),ue.push({$kind:"NestedResult",NestedResult:[v+N.length-1,0]})):ue.push(le)}y.set(T,{results:ue,nextIntent:0})}let ae=y.get(T);k=ae.results[ae.nextIntent++]}i.replaceCommand(v,N,k),v+=N.length}for(let[C,T]of A){if(C==="gas"&&!m.has(C))continue;let Y=C==="gas"?nn:C,h=s.get(C)?.some(G=>G.outputKind==="balance"),F=m.has(C);h||F?i.commands.push(Be.MoveCall({target:"0x2::coin::send_funds",typeArguments:[Y],arguments:[T,i.addInput("pure",Ie.Pure(B.Address.serialize(i.sender)))]})):u.get(C)&&i.commands.push(Be.MoveCall({target:"0x2::coin::destroy_zero",typeArguments:[Y],arguments:[T]}))}return a()}async function Yu({coinType:i,balance:n,client:a,owner:r,usedIds:o}){let s=n,d=[],c=a.core.getBalance({owner:r,coinType:i}).then(({balance:u})=>(s-=BigInt(u.addressBalance),u)),[g,l]=await Promise.all([A(),c]);if(BigInt(l.balance)<n)throw new Error(`Insufficient balance of ${i} for owner ${r}. Required: ${n}, Available: ${n-s}`);return{coins:g,balance:BigInt(l.coinBalance),addressBalance:BigInt(l.addressBalance),coinBalance:BigInt(l.coinBalance)};async function A(u=null){let{objects:m,hasNextPage:y,cursor:v}=await a.core.listCoins({owner:r,coinType:i,cursor:u});await c;for(let C of m)o.has(C.objectId)||(d.push(C),s-=BigInt(C.balance));return s>0n&&y?A(v):d}}var na=require("@mysten/bcs"),Ht=require("valibot");function us(i,n=1/0){let a={$kind:"Result",get Result(){return typeof i=="function"?i():i}},r=[],o=s=>r[s]??={$kind:"NestedResult",get NestedResult(){return[typeof i=="function"?i():i,s]}};return new Proxy(a,{set(){throw new Error("The transaction result is a proxy, and does not support setting properties directly")},get(s,d){if(d in s)return Reflect.get(s,d);if(d===Symbol.iterator)return function*(){let g=0;for(;g<n;)yield o(g),g++};if(typeof d=="symbol")return;let c=parseInt(d,10);if(!(Number.isNaN(c)||c<0))return o(c)}})}var Fc=Symbol.for("@mysten/transaction");function mr(i){return!!i&&typeof i=="object"&&i[Fc]===!0}var pt=class pr{#t;#n;#o=new Map;#a=[];#i=[];#r=new Set;#s=new Set;#d=new Map;static fromKind(n){let a=new pr;return a.#e=dt.fromKindBytes(typeof n=="string"?(0,na.fromBase64)(n):n),a.#a=a.#e.inputs.slice(),a.#i=a.#e.commands.slice(),a.#r=new Set(a.#i.map((r,o)=>o)),a}static from(n,a={}){let r=new pr;mr(n)?r.#e=dt.restore(n.getData()):typeof n!="string"||!n.startsWith("{")?r.#e=dt.fromBytes(typeof n=="string"?(0,na.fromBase64)(n):n):r.#e=dt.restore(JSON.parse(n)),r.#a=r.#e.inputs.slice(),r.#i=r.#e.commands.slice(),r.#r=new Set(r.#i.map((s,d)=>d));let o=new Map([[hn,ur],...Object.entries(a.intentResolvers??{})]);if(!r.isPreparedForSerialization({supportedIntents:[...o.keys()]}))throw new Error("Transaction has unresolved intents or async thunks. Provide resolvers for any custom intents via the `intentResolvers` option, or call `prepareForSerialization` before copying.");for(let[s,d]of o)r.addIntentResolver(s,d);return r}addSerializationPlugin(n){this.#t.push(n)}addBuildPlugin(n){this.#n.push(n)}addIntentResolver(n,a){if(this.#o.has(n)&&this.#o.get(n)!==a)throw new Error(`Intent resolver for ${n} already exists`);this.#o.set(n,a)}setSender(n){this.#e.sender=n}setSenderIfNotSet(n){this.#e.sender||(this.#e.sender=n)}setExpiration(n){this.#e.expiration=n?(0,Ht.parse)(ns,n):null}setGasPrice(n){this.#e.gasData.price=String(n)}setGasBudget(n){this.#e.gasData.budget=String(n)}setGasBudgetIfNotSet(n){this.#e.gasData.budget==null&&(this.#e.gasData.budget=String(n))}setGasOwner(n){this.#e.gasData.owner=n}setGasPayment(n){this.#e.gasData.payment=n.map(a=>(0,Ht.parse)(Rt,a))}#e;getData(){return this.#e.snapshot()}get[Fc](){return!0}get pure(){return Object.defineProperty(this,"pure",{enumerable:!1,value:wc(n=>(0,na.isSerializedBcs)(n)?this.#c("pure",{$kind:"Pure",Pure:{bytes:n.toBase64()}}):this.#c("pure",(0,Ht.is)(es,n)?(0,Ht.parse)(es,n):n instanceof Uint8Array?Ie.Pure(n):{$kind:"UnresolvedPure",UnresolvedPure:{value:n}}))}),this.pure}constructor(){this.object=Bc(n=>{if(typeof n=="function")return this.object(this.add(n));if(typeof n=="object"&&(0,Ht.is)(ge,n))return n;let a=qn(n),r=this.#e.inputs.find(o=>a===qn(o));return r?.Object?.SharedObject&&typeof n=="object"&&n.Object?.SharedObject&&(r.Object.SharedObject.mutable=r.Object.SharedObject.mutable||n.Object.SharedObject.mutable),r?{$kind:"Input",Input:this.#e.inputs.indexOf(r),type:"object"}:this.#c("object",typeof n=="string"?{$kind:"UnresolvedObject",UnresolvedObject:{objectId:V(n)}}:n)}),this.#e=new dt,this.#n=[],this.#t=[]}get gas(){return{$kind:"GasCoin",GasCoin:!0}}coin({type:n,balance:a,useGasCoin:r}){return this.add(pe({type:n,balance:a,useGasCoin:r}))}balance({type:n,balance:a,useGasCoin:r}){return this.add(Nc({type:n,balance:a,useGasCoin:r}))}objectRef(...n){return this.object(Ie.ObjectRef(...n))}receivingRef(...n){return this.object(Ie.ReceivingRef(...n))}sharedObjectRef(...n){return this.object(Ie.SharedObjectRef(...n))}#m(){let n=new pr;return n.#e=this.#e,n.#t=this.#t,n.#n=this.#n,n.#o=this.#o,n.#s=this.#s,n.#r=new Set(this.#r),n.#d=this.#d,this.#a.push(n.#a),this.#i.push(n.#i),n}add(n){if(typeof n=="function"){if(this.#d.has(n))return this.#d.get(n);let a=this.#m(),r=n(a);if(!(r&&typeof r=="object"&&"then"in r))return this.#r=a.#r,this.#d.set(n,r),r;let o=this.#g({$kind:"$Intent",$Intent:{name:"AsyncTransactionThunk",inputs:{},data:{resultIndex:this.#e.commands.length,result:null}}});this.#s.add(Promise.resolve(r).then(d=>{o.$Intent.data.result=d}));let s=us(()=>o.$Intent.data.resultIndex);return this.#d.set(n,s),s}else this.#g(n);return us(this.#e.commands.length-1)}#g(n){let a=this.#e.commands.length;return this.#i.push(n),this.#r.add(a),this.#e.commands.push(n),this.#e.mapCommandArguments(a,r=>{if(r.$kind==="Result"&&!this.#r.has(r.Result))throw new Error(`Result { Result: ${r.Result} } is not available to use in the current transaction`);if(r.$kind==="NestedResult"&&!this.#r.has(r.NestedResult[0]))throw new Error(`Result { NestedResult: [${r.NestedResult[0]}, ${r.NestedResult[1]}] } is not available to use in the current transaction`);if(r.$kind==="Input"&&r.Input>=this.#e.inputs.length)throw new Error(`Input { Input: ${r.Input} } references an input that does not exist in the current transaction`);return r}),n}#c(n,a){return this.#a.push(a),this.#e.addInput(n,a)}#l(n){return(0,na.isSerializedBcs)(n)?this.pure(n):this.#A(n)}#A(n){if(typeof n=="function"){let a=this.add(n);return typeof a=="function"?this.#A(a):(0,Ht.parse)(ge,a)}return(0,Ht.parse)(ge,n)}splitCoins(n,a){let r=Be.SplitCoins(typeof n=="string"?this.object(n):this.#A(n),a.map(o=>typeof o=="number"||typeof o=="bigint"||typeof o=="string"?this.pure.u64(o):this.#l(o)));return this.#g(r),us(this.#e.commands.length-1,a.length)}mergeCoins(n,a){return this.add(Be.MergeCoins(this.object(n),a.map(r=>this.object(r))))}publish({modules:n,dependencies:a}){return this.add(Be.Publish({modules:n,dependencies:a}))}upgrade({modules:n,dependencies:a,package:r,ticket:o}){return this.add(Be.Upgrade({modules:n,dependencies:a,package:r,ticket:this.object(o)}))}moveCall({arguments:n,...a}){return this.add(Be.MoveCall({...a,arguments:n?.map(r=>this.#l(r))}))}transferObjects(n,a){return this.add(Be.TransferObjects(n.map(r=>this.object(r)),typeof a=="string"?this.pure.address(a):this.#l(a)))}makeMoveVec({type:n,elements:a}){return this.add(Be.MakeMoveVec({type:n,elements:a.map(r=>this.object(r))}))}withdrawal({amount:n,type:a}){let r={$kind:"FundsWithdrawal",FundsWithdrawal:{reservation:{$kind:"MaxAmountU64",MaxAmountU64:String(n)},typeArg:{$kind:"Balance",Balance:a??"0x2::sui::SUI"},withdrawFrom:{$kind:"Sender",Sender:!0}}};return this.#c("object",r)}serialize(){return JSON.stringify(sc(this.#e.snapshot()))}async toJSON(n={}){await this.prepareForSerialization(n);let a=this.isFullyResolved();return JSON.stringify((0,Ht.parse)(pc,a?{...this.#e.snapshot(),digest:this.#e.getDigest()}:this.#e.snapshot()),(r,o)=>typeof o=="bigint"?o.toString():o,2)}async sign(n){let{signer:a,...r}=n,o=await this.build(r);return a.signTransaction(o)}isPreparedForSerialization(n={}){return!(this.#s.size>0||this.#e.commands.some(a=>a.$Intent&&!n.supportedIntents?.includes(a.$Intent.name)))}isFullyResolved(){return!(!this.isPreparedForSerialization()||!this.#e.sender||As(this.#e,{}))}async build(n={}){return await this.prepareForSerialization(n),await this.#u(n),this.#e.build({onlyTransactionKind:n.onlyTransactionKind})}async getDigest(n={}){return await this.prepareForSerialization(n),await this.#u(n),this.#e.getDigest()}async#u(n){if(!n.onlyTransactionKind&&!this.#e.sender)throw new Error("Missing transaction sender");await this.#p([...this.#n,Tc],n)}async#p(n,a){try{let r=o=>{if(o>=n.length)return()=>{};let s=n[o];return async()=>{let d=r(o+1),c=!1,g=!1;if(await s(this.#e,a,async()=>{if(c)throw new Error(`next() was call multiple times in TransactionPlugin ${o}`);c=!0,await d(),g=!0}),!c)throw new Error(`next() was not called in TransactionPlugin ${o}`);if(!g)throw new Error(`next() was not awaited in TransactionPlugin ${o}`)}};await r(0)()}finally{this.#a=this.#e.inputs.slice(),this.#i=this.#e.commands.slice(),this.#r=new Set(this.#i.map((r,o)=>o))}}async#b(){for(;this.#s.size>0;){let n=Promise.all(this.#s);this.#s.clear(),this.#s.add(n),await n,this.#s.delete(n)}}#y(){let n=this.#e.commands,a=this.#e.inputs,r=this.#i.flat(1/0),o=this.#a.flat(1/0);if(r.length!==n.length)throw new Error("Unexpected number of commands found in transaction data");if(o.length!==a.length)throw new Error("Unexpected number of inputs found in transaction data");let s=r.filter(c=>c.$Intent?.name!=="AsyncTransactionThunk");this.#e.commands=s,this.#e.inputs=o,this.#i=s,this.#a=o,this.#r=new Set(s.map((c,g)=>g));function d(c){let g=n[c];if(g.$Intent?.name==="AsyncTransactionThunk"){let A=g.$Intent.data.result;if(A==null)throw new Error("AsyncTransactionThunk has not been resolved");return d(A.Result)}let l=s.indexOf(g);if(l===-1)throw new Error("Unable to find original index for command");return l}this.#e.mapArguments(c=>{if(c.$kind==="Input"){let g=o.indexOf(a[c.Input]);if(g===-1)throw new Error("Input has not been resolved");return{...c,Input:g}}else if(c.$kind==="Result"){let g=d(c.Result);return{...c,Result:g}}else if(c.$kind==="NestedResult"){let g=d(c.NestedResult[0]);return{...c,NestedResult:[g,c.NestedResult[1]]}}return c});for(let[c,g]of n.entries())if(g.$Intent?.name==="AsyncTransactionThunk")try{g.$Intent.data.resultIndex=d(c)}catch{}}async prepareForSerialization(n){await this.#b(),this.#y();let a=new Set;for(let o of this.#e.commands)o.$Intent&&a.add(o.$Intent.name);let r=[...this.#t];for(let o of a)if(!n.supportedIntents?.includes(o)){if(!this.#o.has(o))throw new Error(`Missing intent resolver for ${o}`);r.push(this.#o.get(o))}r.push(Wc()),await this.#p(r,n)}};var wu={mainnet:"https://mainnet.mvr.mystenlabs.com",testnet:"https://testnet.mvr.mystenlabs.com"},Gc=class extends ir{constructor(i){super(i),this.core=this,this.mvr=new Ld({cache:this.cache.scope("core.mvr"),url:i.mvr?.url??wu[this.network],pageSize:i.mvr?.pageSize,overrides:i.mvr?.overrides})}async getObject(i){let{objectId:n}=i,{objects:[a]}=await this.getObjects({objectIds:[n],signal:i.signal,include:i.include});if(a instanceof Error)throw a;return{object:a}}async getDynamicField(i){let n=st.parseFromStr((await this.core.mvr.resolveType({type:i.name.type})).type),a=_n(i.parentId,n,i.name.bcs),{objects:[r]}=await this.getObjects({objectIds:[a],signal:i.signal,include:{previousTransaction:!0,content:!0}});if(r instanceof Error)throw r;let o=Mt(r.type),s=await r.content,d=o.typeParams[0],c=typeof d!="string"&&d.module==="dynamic_object_field"&&d.name==="Wrapper",g=s.slice(Dn+i.name.bcs.length),l=typeof o.typeParams[1]=="string"?o.typeParams[1]:oe(o.typeParams[1]);return{dynamicField:{$kind:c?"DynamicObject":"DynamicField",fieldId:r.objectId,digest:r.digest,version:r.version,type:r.type,previousTransaction:r.previousTransaction,name:{type:typeof d=="string"?d:oe(d),bcs:i.name.bcs},value:{type:l,bcs:g},childId:c?B.Address.parse(g):void 0}}}async getDynamicObjectField(i){let n=`0x2::dynamic_object_field::Wrapper<${(await this.core.mvr.resolveType({type:i.name.type})).type}>`,{dynamicField:a}=await this.getDynamicField({parentId:i.parentId,name:{type:n,bcs:i.name.bcs},signal:i.signal}),{object:r}=await this.getObject({objectId:a.childId,signal:i.signal,include:i.include});return{object:r}}async waitForTransaction(i){let{signal:n,timeout:a=60*1e3,pollSchedule:r,include:o}=i,s="result"in i&&i.result?(i.result.Transaction??i.result.FailedTransaction).digest:i.digest,d=n?AbortSignal.any([AbortSignal.timeout(a),n]):AbortSignal.timeout(a),c=new Promise((m,y)=>{d.addEventListener("abort",()=>y(d.reason))});c.catch(()=>{});let g=r??[0,300,600,1500,3500],l=Date.now(),A=0,u=g.length>0?g[g.length-1]-(g[g.length-2]??0):2e3;for(;;){if(A<g.length){let m=l+g[A]-Date.now();A++,m>0&&await Promise.race([new Promise(y=>setTimeout(y,m)),c])}else await Promise.race([new Promise(m=>setTimeout(m,u)),c]);d.throwIfAborted();try{return await this.getTransaction({digest:s,include:o,signal:d})}catch{}}}async signAndExecuteTransaction({transaction:i,signer:n,additionalSignatures:a=[],...r}){let o;i instanceof Uint8Array?o=i:(i.setSenderIfNotSet(n.toSuiAddress()),o=await i.build({client:this}));let{signature:s}=await n.signTransaction(o);return this.executeTransaction({transaction:o,signatures:[s,...a],...r})}};var kc=require("@mysten/utils"),Wu=new Intl.PluralRules("en-US",{type:"ordinal"}),Nu=new Map([["one","st"],["two","nd"],["few","rd"],["other","th"]]);function Fu(i){return`${i}${Nu.get(Wu.select(i))}`}function ps(i){let{command:n,location:a,abortCode:r,cleverError:o}=i,s=[];if(n!=null?s.push(`MoveAbort in ${Fu(n+1)} command`):s.push("MoveAbort"),o?.constantName){let d=o.value?`'${o.constantName}': ${o.value}`:`'${o.constantName}'`;s.push(d)}else s.push(`abort code: ${r}`);if(a?.package&&a?.module){let d=[`in '${[a.package.startsWith("0x")?a.package:`0x${a.package}`,a.module,a.functionName].filter(Boolean).join("::")}'`];o?.lineNumber!=null?d.push(`(line ${o.lineNumber})`):a.instruction!=null&&d.push(`(instruction ${a.instruction})`),s.push(d.join(" "))}return s.join(", ")}var Zc=B.struct("MinimalEffectsWithError",{status:dr}),R2=B.enum("MinimalTransactionEffectsWithError",{V1:Zc,V2:Zc}),Gu=B.enum("MinimalExecutionStatusNoError",{Success:null,Failed:null}),Sc=B.struct("MinimalEffectsNoError",{status:Gu}),T2=B.enum("MinimalTransactionEffectsNoError",{V1:Sc,V2:Sc});function it(i,n){return n!=null&&typeof n!="boolean"?`${i}(${JSON.stringify(n,(a,r)=>typeof r=="bigint"?r.toString():r)})`:i}function Zu(i){let n=i.error,a=i.command!=null?Number(i.command):void 0;switch(n.$kind){case"MoveAbort":{let[r,o]=n.MoveAbort,s={package:r.module.address,module:r.module.name,function:r.function,functionName:r.functionName??void 0,instruction:r.instruction};return{$kind:"MoveAbort",message:ps({command:a,location:s,abortCode:String(o)}),command:a,MoveAbort:{abortCode:String(o),location:s}}}case"MoveObjectTooBig":return{$kind:"SizeError",message:it("MoveObjectTooBig",n.MoveObjectTooBig),command:a,SizeError:{name:"ObjectTooBig",size:Number(n.MoveObjectTooBig.objectSize),maxSize:Number(n.MoveObjectTooBig.maxObjectSize)}};case"MovePackageTooBig":return{$kind:"SizeError",message:it("MovePackageTooBig",n.MovePackageTooBig),command:a,SizeError:{name:"PackageTooBig",size:Number(n.MovePackageTooBig.objectSize),maxSize:Number(n.MovePackageTooBig.maxObjectSize)}};case"EffectsTooLarge":return{$kind:"SizeError",message:it("EffectsTooLarge",n.EffectsTooLarge),command:a,SizeError:{name:"EffectsTooLarge",size:Number(n.EffectsTooLarge.currentSize),maxSize:Number(n.EffectsTooLarge.maxSize)}};case"WrittenObjectsTooLarge":return{$kind:"SizeError",message:it("WrittenObjectsTooLarge",n.WrittenObjectsTooLarge),command:a,SizeError:{name:"WrittenObjectsTooLarge",size:Number(n.WrittenObjectsTooLarge.currentSize),maxSize:Number(n.WrittenObjectsTooLarge.maxSize)}};case"MoveVectorElemTooBig":return{$kind:"SizeError",message:it("MoveVectorElemTooBig",n.MoveVectorElemTooBig),command:a,SizeError:{name:"MoveVectorElemTooBig",size:Number(n.MoveVectorElemTooBig.valueSize),maxSize:Number(n.MoveVectorElemTooBig.maxScaledSize)}};case"MoveRawValueTooBig":return{$kind:"SizeError",message:it("MoveRawValueTooBig",n.MoveRawValueTooBig),command:a,SizeError:{name:"MoveRawValueTooBig",size:Number(n.MoveRawValueTooBig.valueSize),maxSize:Number(n.MoveRawValueTooBig.maxScaledSize)}};case"CommandArgumentError":return{$kind:"CommandArgumentError",message:it("CommandArgumentError",n.CommandArgumentError),command:a,CommandArgumentError:{argument:n.CommandArgumentError.argIdx,name:n.CommandArgumentError.kind.$kind}};case"TypeArgumentError":return{$kind:"TypeArgumentError",message:it("TypeArgumentError",n.TypeArgumentError),command:a,TypeArgumentError:{typeArgument:n.TypeArgumentError.argumentIdx,name:n.TypeArgumentError.kind.$kind}};case"PackageUpgradeError":{let r=n.PackageUpgradeError.upgradeError;return{$kind:"PackageUpgradeError",message:it("PackageUpgradeError",n.PackageUpgradeError),command:a,PackageUpgradeError:{name:r.$kind,packageId:r.$kind==="UnableToFetchPackage"?r.UnableToFetchPackage.packageId:void 0,digest:r.$kind==="DigestDoesNotMatch"?(0,kc.toBase64)(r.DigestDoesNotMatch.digest):void 0}}}case"ExecutionCancelledDueToSharedObjectCongestion":return{$kind:"CongestedObjects",message:it("ExecutionCancelledDueToSharedObjectCongestion",n.ExecutionCancelledDueToSharedObjectCongestion),command:a,CongestedObjects:{name:"ExecutionCanceledDueToConsensusObjectCongestion",objects:n.ExecutionCancelledDueToSharedObjectCongestion.congested_objects}};case"AddressDeniedForCoin":return{$kind:"CoinDenyListError",message:it("AddressDeniedForCoin",n.AddressDeniedForCoin),command:a,CoinDenyListError:{name:"AddressDeniedForCoin",address:n.AddressDeniedForCoin.address,coinType:n.AddressDeniedForCoin.coinType}};case"CoinTypeGlobalPause":return{$kind:"CoinDenyListError",message:it("CoinTypeGlobalPause",n.CoinTypeGlobalPause),command:a,CoinDenyListError:{name:"CoinTypeGlobalPause",coinType:n.CoinTypeGlobalPause.coinType}};case"CircularObjectOwnership":return{$kind:"ObjectIdError",message:it("CircularObjectOwnership",n.CircularObjectOwnership),command:a,ObjectIdError:{name:"CircularObjectOwnership",objectId:n.CircularObjectOwnership.object}};case"InvalidGasObject":return{$kind:"ObjectIdError",message:"InvalidGasObject",command:a,ObjectIdError:{name:"InvalidGasObject",objectId:""}};case"InputObjectDeleted":return{$kind:"ObjectIdError",message:"InputObjectDeleted",command:a,ObjectIdError:{name:"InputObjectDeleted",objectId:""}};case"InvalidTransferObject":return{$kind:"ObjectIdError",message:"InvalidTransferObject",command:a,ObjectIdError:{name:"InvalidTransferObject",objectId:""}};case"NonExclusiveWriteInputObjectModified":return{$kind:"Unknown",message:it("NonExclusiveWriteInputObjectModified",n.NonExclusiveWriteInputObjectModified),command:a,Unknown:null};case"InsufficientGas":case"InvariantViolation":case"FeatureNotYetSupported":case"InsufficientCoinBalance":case"CoinBalanceOverflow":case"PublishErrorNonZeroAddress":case"SuiMoveVerificationError":case"MovePrimitiveRuntimeError":case"VMVerificationOrDeserializationError":case"VMInvariantViolation":case"FunctionNotFound":case"ArityMismatch":case"TypeArityMismatch":case"NonEntryFunctionInvoked":case"UnusedValueWithoutDrop":case"InvalidPublicFunctionReturnType":case"PublishUpgradeMissingDependency":case"PublishUpgradeDependencyDowngrade":case"CertificateDenied":case"SuiMoveVerificationTimedout":case"SharedObjectOperationNotAllowed":case"ExecutionCancelledDueToRandomnessUnavailable":case"InvalidLinkage":case"InsufficientBalanceForWithdraw":return{$kind:"Unknown",message:n.$kind,command:a,Unknown:null};default:return{$kind:"Unknown",message:"Unknown error",command:a,Unknown:null}}}function Vc(i,n=!1){return(n?dt.fromKindBytes(i):dt.fromBytes(i)).snapshot()}function Pc(i){let n=B.TransactionEffects.parse(i);switch(n.$kind){case"V1":return Su({bytes:i,effects:n.V1});case"V2":return ku({bytes:i,effects:n.V2});default:throw new Error(`Unknown transaction effects version: ${n.$kind}`)}}function Su(i){throw new Error("V1 effects are not supported yet")}function ku({bytes:i,effects:n}){let a=n.changedObjects.map(([r,o])=>({objectId:r,inputState:o.inputState.$kind==="Exist"?"Exists":"DoesNotExist",inputVersion:o.inputState.Exist?.[0][0]??null,inputDigest:o.inputState.Exist?.[0][1]??null,inputOwner:o.inputState.Exist?.[1]??null,outputState:o.outputState.$kind==="NotExist"?"DoesNotExist":o.outputState.$kind,outputVersion:o.outputState.$kind==="PackageWrite"?o.outputState.PackageWrite?.[0]:o.outputState.$kind==="ObjectWrite"?n.lamportVersion:null,outputDigest:o.outputState.$kind==="PackageWrite"?o.outputState.PackageWrite?.[1]:o.outputState.$kind==="ObjectWrite"?o.outputState.ObjectWrite?.[0]??null:null,outputOwner:o.outputState.$kind==="ObjectWrite"?o.outputState.ObjectWrite[1]:null,idOperation:o.idOperation.$kind}));return{bcs:i,version:2,status:n.status.$kind==="Success"?{success:!0,error:null}:{success:!1,error:Zu(n.status.Failure)},gasUsed:n.gasUsed,transactionDigest:n.transactionDigest,gasObject:n.gasObjectIndex===null?null:a[n.gasObjectIndex]??null,eventsDigest:n.eventsDigest,dependencies:n.dependencies,lamportVersion:n.lamportVersion,changedObjects:a,unchangedConsensusObjects:n.unchangedConsensusObjects.map(([r,o])=>({kind:o.$kind,objectId:r,version:o.$kind==="ReadOnlyRoot"?o.ReadOnlyRoot[0]:o[o.$kind],digest:o.$kind==="ReadOnlyRoot"?o.ReadOnlyRoot[1]:null})),auxiliaryDataDigest:n.auxDataDigest}}var Gn=require("@mysten/bcs"),Lc=require("@mysten/utils"),Vu=5e10;function xc(i,n){if(i.status==="success")return{success:!0,error:null};let a=i.error??"Unknown";if(n){let r=a.match(/in command (\d+)/),o=r?parseInt(r[1],10):void 0,s=a.match(/instruction:\s*(\d+)/),d=s?parseInt(s[1],10):void 0,c=n.module_id?.split("::")??[],g=c[0]?V(c[0]):void 0,l=c[1];return{success:!1,error:{$kind:"MoveAbort",message:ps({command:o,location:g&&l?{package:g,module:l,functionName:n.function??void 0,instruction:d}:void 0,abortCode:String(n.error_code??0),cleverError:n.line!=null?{lineNumber:n.line}:void 0}),command:o,MoveAbort:{abortCode:String(n.error_code??0),location:n.module_id?{package:V(n.module_id.split("::")[0]??""),module:n.module_id.split("::")[1]??"",functionName:n.function??void 0,instruction:d}:void 0}}}}return{success:!1,error:{$kind:"Unknown",message:a,Unknown:null}}}var Hc=class extends Gc{#t;constructor({jsonRpcClient:i,mvr:n}){super({network:i.network,base:i,mvr:n}),this.#t=i}async getObjects(i){let n=(0,Lc.chunk)(i.objectIds,50),a=[];for(let r of n){let o=await this.#t.multiGetObjects({ids:r,options:{showOwner:!0,showType:!0,showBcs:!!(i.include?.content||i.include?.objectBcs),showPreviousTransaction:!!(i.include?.previousTransaction||i.include?.objectBcs),showStorageRebate:i.include?.objectBcs??!1,showContent:i.include?.json??!1,showDisplay:i.include?.display??!1},signal:i.signal});for(let[s,d]of o.entries())d.error?a.push(ss.fromResponse(d.error,r[s])):a.push(Xc(d.data,i.include))}return{objects:a}}async listOwnedObjects(i){let n=null;if(i.type){let r=i.type.split("::");r.length===1?n={Package:i.type}:r.length===2?n={MoveModule:{package:r[0],module:r[1]}}:n={StructType:i.type}}let a=await this.#t.getOwnedObjects({owner:i.owner,limit:i.limit,cursor:i.cursor,options:{showOwner:!0,showType:!0,showBcs:!!(i.include?.content||i.include?.objectBcs),showPreviousTransaction:!!(i.include?.previousTransaction||i.include?.objectBcs),showStorageRebate:i.include?.objectBcs??!1,showContent:i.include?.json??!1,showDisplay:i.include?.display??!1},filter:n,signal:i.signal});return{objects:a.data.map(r=>{if(r.error)throw ss.fromResponse(r.error);return Xc(r.data,i.include)}),hasNextPage:a.hasNextPage,cursor:a.nextCursor??null}}async listCoins(i){let n=await this.#t.getCoins({owner:i.owner,coinType:i.coinType,limit:i.limit,cursor:i.cursor,signal:i.signal});return{objects:n.data.map(a=>({objectId:a.coinObjectId,version:a.version,digest:a.digest,balance:a.balance,type:oe(`0x2::coin::Coin<${a.coinType}>`),owner:{$kind:"AddressOwner",AddressOwner:i.owner}})),hasNextPage:n.hasNextPage,cursor:n.nextCursor??null}}async getBalance(i){let n=await this.#t.getBalance({owner:i.owner,coinType:i.coinType,signal:i.signal}),a=n.fundsInAddressBalance??"0",r=String(BigInt(n.totalBalance)-BigInt(a));return{balance:{coinType:oe(n.coinType),balance:n.totalBalance,coinBalance:r,addressBalance:a}}}async getCoinMetadata(i){let n=(await this.mvr.resolveType({type:i.coinType})).type,a=await this.#t.getCoinMetadata({coinType:n,signal:i.signal});return a?{coinMetadata:{id:a.id??null,decimals:a.decimals,name:a.name,symbol:a.symbol,description:a.description,iconUrl:a.iconUrl??null}}:{coinMetadata:null}}async listBalances(i){return{balances:(await this.#t.getAllBalances({owner:i.owner,signal:i.signal})).map(n=>{let a=n.fundsInAddressBalance??"0",r=String(BigInt(n.totalBalance)-BigInt(a));return{coinType:oe(n.coinType),balance:n.totalBalance,coinBalance:r,addressBalance:a}}),hasNextPage:!1,cursor:null}}async getTransaction(i){return jc(await this.#t.getTransactionBlock({digest:i.digest,options:{showRawInput:!0,showEffects:!0,showObjectChanges:i.include?.objectTypes??!1,showRawEffects:i.include?.effects??!1,showEvents:i.include?.events??!1,showBalanceChanges:i.include?.balanceChanges??!1},signal:i.signal}),i.include)}async executeTransaction(i){return jc(await this.#t.executeTransactionBlock({transactionBlock:i.transaction,signature:i.signatures,options:{showRawInput:!0,showEffects:!0,showRawEffects:i.include?.effects??!1,showEvents:i.include?.events??!1,showObjectChanges:i.include?.objectTypes??!1,showBalanceChanges:i.include?.balanceChanges??!1},signal:i.signal}),i.include)}async simulateTransaction(i){i.transaction instanceof Uint8Array||await i.transaction.build({client:this,onlyTransactionKind:!0});let n=pt.from(i.transaction),a=i.transaction instanceof Uint8Array?null:dt.restore(i.transaction.getData()),r=a?a.build({overrides:{gasData:{budget:a.gasData.budget??String(Vu),price:a.gasData.price??String(await this.#t.getReferenceGasPrice()),payment:a.gasData.payment??[]}}}):i.transaction,o=n.getData().sender??V("0x0"),s=i.checksEnabled===!1,d=null;try{d=await this.#t.dryRunTransactionBlock({transactionBlock:r,signal:i.signal})}catch(C){if(!s)throw C}let c=null;if(i.include?.commandResults||s)try{c=await this.#t.devInspectTransactionBlock({sender:o,transactionBlock:n,signal:i.signal})}catch{}let g=!d||d.effects.status.status!=="success",l=s&&g&&c?c:d??c;if(!l)throw new Error("simulateTransaction failed: no results from dryRun or devInspect");let{effects:A,objectTypes:u}=ju({effects:l.effects,objectChanges:(g?null:d?.objectChanges)??[]}),m;i.include?.transaction&&(m=Vc(r),a&&!g&&A.gasUsed&&(a.gasData.budget||(m.gasData.budget=ls(A.gasUsed))));let y={digest:dt.getDigestFromBytes(r),epoch:null,status:A.status,effects:i.include?.effects?A:void 0,objectTypes:i.include?.objectTypes?u:void 0,signatures:[],transaction:m??void 0,bcs:i.include?.bcs?r:void 0,balanceChanges:i.include?.balanceChanges&&d&&!g?d.balanceChanges.map(C=>({coinType:oe(C.coinType),address:Jc(C.owner),amount:C.amount})):void 0,events:i.include?.events?l.events?.map(C=>({packageId:C.packageId,module:C.transactionModule,sender:C.sender,eventType:C.type,bcs:"bcs"in C?(0,Gn.fromBase64)(C.bcs):new Uint8Array,json:C.parsedJson??null}))??[]:void 0},v;return i.include?.commandResults&&c?.results&&(v=c.results.map(C=>({returnValues:(C.returnValues??[]).map(([T])=>({bcs:new Uint8Array(T)})),mutatedReferences:(C.mutableReferenceOutputs??[]).map(([,T])=>({bcs:new Uint8Array(T)}))}))),A.status.success?{$kind:"Transaction",Transaction:y,commandResults:v}:{$kind:"FailedTransaction",FailedTransaction:y,commandResults:v}}async getReferenceGasPrice(i){let n=await this.#t.getReferenceGasPrice({signal:i?.signal});return{referenceGasPrice:String(n)}}async getProtocolConfig(i){let n=await this.#t.getProtocolConfig({signal:i?.signal}),a={};for(let[r,o]of Object.entries(n.attributes))if(o===null)a[r]=null;else if("u16"in o)a[r]=o.u16;else if("u32"in o)a[r]=o.u32;else if("u64"in o)a[r]=o.u64;else if("f64"in o)a[r]=o.f64;else if("bool"in o)a[r]=o.bool;else{let s=Object.entries(o);a[r]=s.length===1?String(s[0][1]):JSON.stringify(o)}return{protocolConfig:{protocolVersion:n.protocolVersion,featureFlags:{...n.featureFlags},attributes:a}}}async getCurrentSystemState(i){let n=await this.#t.getLatestSuiSystemState({signal:i?.signal});return{systemState:{systemStateVersion:n.systemStateVersion,epoch:n.epoch,protocolVersion:n.protocolVersion,referenceGasPrice:n.referenceGasPrice?.toString()??null,epochStartTimestampMs:n.epochStartTimestampMs,safeMode:n.safeMode,safeModeStorageRewards:n.safeModeStorageRewards,safeModeComputationRewards:n.safeModeComputationRewards,safeModeStorageRebates:n.safeModeStorageRebates,safeModeNonRefundableStorageFee:n.safeModeNonRefundableStorageFee,parameters:{epochDurationMs:n.epochDurationMs,stakeSubsidyStartEpoch:n.stakeSubsidyStartEpoch,maxValidatorCount:n.maxValidatorCount,minValidatorJoiningStake:n.minValidatorJoiningStake,validatorLowStakeThreshold:n.validatorLowStakeThreshold,validatorLowStakeGracePeriod:n.validatorLowStakeGracePeriod},storageFund:{totalObjectStorageRebates:n.storageFundTotalObjectStorageRebates,nonRefundableBalance:n.storageFundNonRefundableBalance},stakeSubsidy:{balance:n.stakeSubsidyBalance,distributionCounter:n.stakeSubsidyDistributionCounter,currentDistributionAmount:n.stakeSubsidyCurrentDistributionAmount,stakeSubsidyPeriodLength:n.stakeSubsidyPeriodLength,stakeSubsidyDecreaseRate:n.stakeSubsidyDecreaseRate}}}}async listDynamicFields(i){let n=await this.#t.getDynamicFields({parentId:i.parentId,limit:i.limit,cursor:i.cursor});return{dynamicFields:n.data.map(a=>{let r=a.type==="DynamicObject",o=r?`0x2::dynamic_field::Field<0x2::dynamic_object_field::Wrapper<${a.name.type}>, 0x2::object::ID>`:`0x2::dynamic_field::Field<${a.name.type}, ${a.objectType}>`,s=(0,Gn.fromBase64)(a.bcsName),d=r?`0x2::dynamic_object_field::Wrapper<${a.name.type}>`:a.name.type;return{$kind:r?"DynamicObject":"DynamicField",fieldId:_n(i.parentId,d,s),type:oe(o),name:{type:a.name.type,bcs:s},valueType:a.objectType,childId:r?a.objectId:void 0}}),hasNextPage:n.hasNextPage,cursor:n.nextCursor}}async verifyZkLoginSignature(i){let n=await this.#t.verifyZkLoginSignature({bytes:i.bytes,signature:i.signature,intentScope:i.intentScope,author:i.address});return{success:n.success,errors:n.errors}}async defaultNameServiceName(i){return{data:{name:(await this.#t.resolveNameServiceNames(i)).data[0]??null}}}resolveTransactionPlugin(){return Ar}async getMoveFunction(i){let n=(await this.mvr.resolvePackage({package:i.packageId})).package,a=await this.#t.getNormalizedMoveFunction({package:n,module:i.moduleName,function:i.name});return{function:{packageId:V(n),moduleName:i.moduleName,name:i.name,visibility:Lu(a.visibility),isEntry:a.isEntry,typeParameters:a.typeParameters.map(r=>({isPhantom:!1,constraints:Mu(r)})),parameters:a.parameters.map(r=>Mc(r)),returns:a.return.map(r=>Mc(r))}}}async getChainIdentifier(i){return this.cache.read(["chainIdentifier"],async()=>({chainIdentifier:(await this.#t.getCheckpoint({id:"0"})).digest}))}};function Pu(i){if(i.bcs?.dataType==="moveObject")try{let n=oe(i.bcs.type),a,r=V(tn),o=oe(`${tn}::coin::Coin<${tn}::sui::SUI>`),s=oe(`${ds}::staking_pool::StakedSui`),d=`${r}::coin::Coin<`;if(n===o)a={GasCoin:null};else if(n===s)a={StakedSui:null};else if(n.startsWith(d)){let l=n.match(new RegExp(`${r.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}::coin::Coin<(.+)>$`));if(l)a={Coin:st.parseFromStr(l[1],!0)};else throw new Error("Failed to parse Coin type")}else{let l=st.parseFromStr(n,!0);if(typeof l!="object"||!("struct"in l))throw new Error("Expected struct type tag");a={Other:l.struct}}let c=(0,Gn.fromBase64)(i.bcs.bcsBytes),g=Xu(i.owner);return B.Object.serialize({data:{Move:{type:a,hasPublicTransfer:i.bcs.hasPublicTransfer,version:i.bcs.version,contents:c}},owner:g,previousTransaction:i.previousTransaction,storageRebate:i.storageRebate}).toBytes()}catch{return}}function Xc(i,n){let a=i.bcs?.dataType==="moveObject"?(0,Gn.fromBase64)(i.bcs.bcsBytes):void 0,r=n?.objectBcs?Pu(i):void 0,o=i.type&&i.type.includes("::")?oe(i.type):i.type??"",s=n?.json&&i.content?.dataType==="moveObject"?i.content.fields:n?.json?null:void 0,d=n?.display?i.display?.data!=null?{output:i.display.data,errors:null}:null:void 0;return{objectId:i.objectId,version:i.version,digest:i.digest,type:o,content:n?.content?a:void 0,owner:aa(i.owner),previousTransaction:n?.previousTransaction?i.previousTransaction??void 0:void 0,objectBcs:r,json:s,display:d}}function aa(i){if(i==="Immutable")return{$kind:"Immutable",Immutable:!0};if("ConsensusAddressOwner"in i)return{$kind:"ConsensusAddressOwner",ConsensusAddressOwner:{owner:i.ConsensusAddressOwner.owner,startVersion:i.ConsensusAddressOwner.start_version}};if("AddressOwner"in i)return{$kind:"AddressOwner",AddressOwner:i.AddressOwner};if("ObjectOwner"in i)return{$kind:"ObjectOwner",ObjectOwner:i.ObjectOwner};if("Shared"in i)return{$kind:"Shared",Shared:{initialSharedVersion:i.Shared.initial_shared_version}};throw new Error(`Unknown owner type: ${JSON.stringify(i)}`)}function Xu(i){if(i==="Immutable")return{Immutable:null};if("AddressOwner"in i)return{AddressOwner:i.AddressOwner};if("ObjectOwner"in i)return{ObjectOwner:i.ObjectOwner};if("Shared"in i)return{Shared:{initialSharedVersion:i.Shared.initial_shared_version}};if(typeof i=="object"&&i!==null&&"ConsensusAddressOwner"in i)return{ConsensusAddressOwner:{startVersion:i.ConsensusAddressOwner.start_version,owner:i.ConsensusAddressOwner.owner}};throw new Error(`Unknown owner type: ${JSON.stringify(i)}`)}function Jc(i){if(i==="Immutable")return null;if("ConsensusAddressOwner"in i)return i.ConsensusAddressOwner.owner;if("AddressOwner"in i)return i.AddressOwner;if("ObjectOwner"in i)return i.ObjectOwner;if("Shared"in i)return null;throw new Error(`Unknown owner type: ${JSON.stringify(i)}`)}function jc(i,n){let a={};n?.objectTypes&&i.objectChanges?.forEach(l=>{l.type!=="published"&&(a[l.objectId]=oe(l.objectType))});let r,o=[],s;if(i.rawTransaction){let l=B.SenderSignedData.parse((0,Gn.fromBase64)(i.rawTransaction))[0];if(o=l.txSignatures,n?.transaction||n?.bcs){let A=B.TransactionData.serialize(l.intentMessage.value).toBytes();n?.bcs&&(s=A),n?.transaction&&(r={...dt.restore({version:2,sender:l.intentMessage.value.V1.sender,expiration:l.intentMessage.value.V1.expiration,gasData:l.intentMessage.value.V1.gasData,inputs:l.intentMessage.value.V1.kind.ProgrammableTransaction.inputs,commands:l.intentMessage.value.V1.kind.ProgrammableTransaction.commands})})}}let d=i.effects?.status?xc(i.effects.status,i.effects.abortError):{success:!1,error:{$kind:"Unknown",message:"Unknown",Unknown:null}},c=i.rawEffects?new Uint8Array(i.rawEffects):null,g={digest:i.digest,epoch:i.effects?.executedEpoch??null,status:d,effects:n?.effects&&c?Pc(c):void 0,objectTypes:n?.objectTypes?a:void 0,transaction:r,bcs:s,signatures:o,balanceChanges:n?.balanceChanges?i.balanceChanges?.map(l=>({coinType:oe(l.coinType),address:Jc(l.owner),amount:l.amount}))??[]:void 0,events:n?.events?i.events?.map(l=>({packageId:l.packageId,module:l.transactionModule,sender:l.sender,eventType:l.type,bcs:"bcs"in l?(0,Gn.fromBase64)(l.bcs):new Uint8Array,json:l.parsedJson??null}))??[]:void 0};return d.success?{$kind:"Transaction",Transaction:g}:{$kind:"FailedTransaction",FailedTransaction:g}}function ju({bytes:i,effects:n,objectChanges:a}){let r=[],o=[],s={};return a?.forEach(d=>{switch(d.type){case"published":r.push({objectId:d.packageId,inputState:"DoesNotExist",inputVersion:null,inputDigest:null,inputOwner:null,outputState:"PackageWrite",outputVersion:d.version,outputDigest:d.digest,outputOwner:null,idOperation:"Created"});break;case"transferred":r.push({objectId:d.objectId,inputState:"Exists",inputVersion:d.version,inputDigest:d.digest,inputOwner:{$kind:"AddressOwner",AddressOwner:d.sender},outputState:"ObjectWrite",outputVersion:d.version,outputDigest:d.digest,outputOwner:aa(d.recipient),idOperation:"None"}),s[d.objectId]=oe(d.objectType);break;case"mutated":r.push({objectId:d.objectId,inputState:"Exists",inputVersion:d.previousVersion,inputDigest:null,inputOwner:aa(d.owner),outputState:"ObjectWrite",outputVersion:d.version,outputDigest:d.digest,outputOwner:aa(d.owner),idOperation:"None"}),s[d.objectId]=oe(d.objectType);break;case"deleted":r.push({objectId:d.objectId,inputState:"Exists",inputVersion:d.version,inputDigest:n.deleted?.find(c=>c.objectId===d.objectId)?.digest??null,inputOwner:null,outputState:"DoesNotExist",outputVersion:null,outputDigest:null,outputOwner:null,idOperation:"Deleted"}),s[d.objectId]=oe(d.objectType);break;case"wrapped":r.push({objectId:d.objectId,inputState:"Exists",inputVersion:d.version,inputDigest:null,inputOwner:{$kind:"AddressOwner",AddressOwner:d.sender},outputState:"ObjectWrite",outputVersion:d.version,outputDigest:n.wrapped?.find(c=>c.objectId===d.objectId)?.digest??null,outputOwner:{$kind:"ObjectOwner",ObjectOwner:d.sender},idOperation:"None"}),s[d.objectId]=oe(d.objectType);break;case"created":r.push({objectId:d.objectId,inputState:"DoesNotExist",inputVersion:null,inputDigest:null,inputOwner:null,outputState:"ObjectWrite",outputVersion:d.version,outputDigest:d.digest,outputOwner:aa(d.owner),idOperation:"Created"}),s[d.objectId]=oe(d.objectType);break}}),{objectTypes:s,effects:{bcs:i??null,version:2,status:xc(n.status,n.abortError),gasUsed:n.gasUsed,transactionDigest:n.transactionDigest,gasObject:{objectId:n.gasObject?.reference.objectId,inputState:"Exists",inputVersion:null,inputDigest:null,inputOwner:null,outputState:"ObjectWrite",outputVersion:n.gasObject.reference.version,outputDigest:n.gasObject.reference.digest,outputOwner:aa(n.gasObject.owner),idOperation:"None"},eventsDigest:n.eventsDigest??null,dependencies:n.dependencies??[],lamportVersion:n.gasObject.reference.version,changedObjects:r,unchangedConsensusObjects:o,auxiliaryDataDigest:null}}}function Mc(i){if(typeof i!="string"){if("Reference"in i)return{reference:"immutable",body:Ea(i.Reference)};if("MutableReference"in i)return{reference:"mutable",body:Ea(i.MutableReference)}}return{reference:null,body:Ea(i)}}function Ea(i){switch(i){case"Address":return{$kind:"address"};case"Bool":return{$kind:"bool"};case"U8":return{$kind:"u8"};case"U16":return{$kind:"u16"};case"U32":return{$kind:"u32"};case"U64":return{$kind:"u64"};case"U128":return{$kind:"u128"};case"U256":return{$kind:"u256"}}if(typeof i=="string")throw new Error(`Unknown type: ${i}`);if("Vector"in i)return{$kind:"vector",vector:Ea(i.Vector)};if("Struct"in i)return{$kind:"datatype",datatype:{typeName:`${V(i.Struct.address)}::${i.Struct.module}::${i.Struct.name}`,typeParameters:i.Struct.typeArguments.map(n=>Ea(n))}};if("TypeParameter"in i)return{$kind:"typeParameter",index:i.TypeParameter};throw new Error(`Unknown type: ${JSON.stringify(i)}`)}function Mu(i){return i.abilities.map(n=>{switch(n){case"Copy":return"copy";case"Drop":return"drop";case"Store":return"store";case"Key":return"key";default:return"unknown"}})}function Lu(i){switch(i){case"Public":return"public";case"Private":return"private";case"Friend":return"friend";default:return"unknown"}}var an=require("@mysten/bcs"),xu=Symbol.for("@mysten/SuiJsonRpcClient");var Zn=class extends ir{get[xu](){return!0}constructor(i){super({network:i.network}),this.jsonRpc=this,this.transport=i.transport??new Yd({url:i.url}),this.core=new Hc({jsonRpcClient:this,mvr:i.mvr})}async getRpcApiVersion({signal:i}={}){return(await this.transport.request({method:"rpc.discover",params:[],signal:i})).info.version}async getCoins({coinType:i,owner:n,cursor:a,limit:r,signal:o}){if(!n||!Oe(V(n)))throw new Error("Invalid Sui address");i&&Le(i)&&(i=(await this.core.mvr.resolveType({type:i})).type);let s=await this.transport.request({method:"suix_getCoins",params:[n,i,a,r],signal:o});return{...s,data:s.data.filter(d=>!as(d.digest))}}async getAllCoins(i){if(!i.owner||!Oe(V(i.owner)))throw new Error("Invalid Sui address");let n=await this.transport.request({method:"suix_getAllCoins",params:[i.owner,i.cursor,i.limit],signal:i.signal});return{...n,data:n.data.filter(a=>!as(a.digest))}}async getBalance({owner:i,coinType:n,signal:a}){if(!i||!Oe(V(i)))throw new Error("Invalid Sui address");return n&&Le(n)&&(n=(await this.core.mvr.resolveType({type:n})).type),await this.transport.request({method:"suix_getBalance",params:[i,n],signal:a})}async getAllBalances(i){if(!i.owner||!Oe(V(i.owner)))throw new Error("Invalid Sui address");return await this.transport.request({method:"suix_getAllBalances",params:[i.owner],signal:i.signal})}async getCoinMetadata({coinType:i,signal:n}){return i&&Le(i)&&(i=(await this.core.mvr.resolveType({type:i})).type),await this.transport.request({method:"suix_getCoinMetadata",params:[i],signal:n})}async getTotalSupply({coinType:i,signal:n}){return i&&Le(i)&&(i=(await this.core.mvr.resolveType({type:i})).type),await this.transport.request({method:"suix_getTotalSupply",params:[i],signal:n})}async call(i,n,{signal:a}={}){return await this.transport.request({method:i,params:n,signal:a})}async getMoveFunctionArgTypes({package:i,module:n,function:a,signal:r}){return i&&Me(i)&&(i=(await this.core.mvr.resolvePackage({package:i})).package),await this.transport.request({method:"sui_getMoveFunctionArgTypes",params:[i,n,a],signal:r})}async getNormalizedMoveModulesByPackage({package:i,signal:n}){return i&&Me(i)&&(i=(await this.core.mvr.resolvePackage({package:i})).package),await this.transport.request({method:"sui_getNormalizedMoveModulesByPackage",params:[i],signal:n})}async getNormalizedMoveModule({package:i,module:n,signal:a}){return i&&Me(i)&&(i=(await this.core.mvr.resolvePackage({package:i})).package),await this.transport.request({method:"sui_getNormalizedMoveModule",params:[i,n],signal:a})}async getNormalizedMoveFunction({package:i,module:n,function:a,signal:r}){return i&&Me(i)&&(i=(await this.core.mvr.resolvePackage({package:i})).package),await this.transport.request({method:"sui_getNormalizedMoveFunction",params:[i,n,a],signal:r})}async getNormalizedMoveStruct({package:i,module:n,struct:a,signal:r}){return i&&Me(i)&&(i=(await this.core.mvr.resolvePackage({package:i})).package),await this.transport.request({method:"sui_getNormalizedMoveStruct",params:[i,n,a],signal:r})}async getOwnedObjects(i){if(!i.owner||!Oe(V(i.owner)))throw new Error("Invalid Sui address");let n=i.filter?{...i.filter}:void 0;return n&&"MoveModule"in n&&Me(n.MoveModule.package)?n.MoveModule={module:n.MoveModule.module,package:(await this.core.mvr.resolvePackage({package:n.MoveModule.package})).package}:n&&"StructType"in n&&Le(n.StructType)&&(n.StructType=(await this.core.mvr.resolveType({type:n.StructType})).type),await this.transport.request({method:"suix_getOwnedObjects",params:[i.owner,{filter:n,options:i.options},i.cursor,i.limit],signal:i.signal})}async getObject(i){if(!i.id||!za(Lt(i.id)))throw new Error("Invalid Sui Object id");return await this.transport.request({method:"sui_getObject",params:[i.id,i.options],signal:i.signal})}async tryGetPastObject(i){return await this.transport.request({method:"sui_tryGetPastObject",params:[i.id,i.version,i.options],signal:i.signal})}async multiGetObjects(i){if(i.ids.forEach(n=>{if(!n||!za(Lt(n)))throw new Error(`Invalid Sui Object id ${n}`)}),i.ids.length!==new Set(i.ids).size)throw new Error(`Duplicate object ids in batch call ${i.ids}`);return await this.transport.request({method:"sui_multiGetObjects",params:[i.ids,i.options],signal:i.signal})}async queryTransactionBlocks({filter:i,options:n,cursor:a,limit:r,order:o,signal:s}){return i&&"MoveFunction"in i&&Me(i.MoveFunction.package)&&(i={...i,MoveFunction:{package:(await this.core.mvr.resolvePackage({package:i.MoveFunction.package})).package}}),await this.transport.request({method:"suix_queryTransactionBlocks",params:[{filter:i,options:n},a,r,(o||"descending")==="descending"],signal:s})}async getTransactionBlock(i){if(!vo(i.digest))throw new Error("Invalid Transaction digest");return await this.transport.request({method:"sui_getTransactionBlock",params:[i.digest,i.options],signal:i.signal})}async multiGetTransactionBlocks(i){if(i.digests.forEach(n=>{if(!vo(n))throw new Error(`Invalid Transaction digest ${n}`)}),i.digests.length!==new Set(i.digests).size)throw new Error(`Duplicate digests in batch call ${i.digests}`);return await this.transport.request({method:"sui_multiGetTransactionBlocks",params:[i.digests,i.options],signal:i.signal})}async executeTransactionBlock({transactionBlock:i,signature:n,options:a,signal:r}){return await this.transport.request({method:"sui_executeTransactionBlock",params:[typeof i=="string"?i:(0,an.toBase64)(i),Array.isArray(n)?n:[n],a],signal:r})}async signAndExecuteTransaction({transaction:i,signer:n,...a}){let r;i instanceof Uint8Array?r=i:(i.setSenderIfNotSet(n.toSuiAddress()),r=await i.build({client:this}));let{signature:o,bytes:s}=await n.signTransaction(r);return this.executeTransactionBlock({transactionBlock:s,signature:o,...a})}async getTotalTransactionBlocks({signal:i}={}){let n=await this.transport.request({method:"sui_getTotalTransactionBlocks",params:[],signal:i});return BigInt(n)}async getReferenceGasPrice({signal:i}={}){let n=await this.transport.request({method:"suix_getReferenceGasPrice",params:[],signal:i});return BigInt(n)}async getStakes(i){if(!i.owner||!Oe(V(i.owner)))throw new Error("Invalid Sui address");return await this.transport.request({method:"suix_getStakes",params:[i.owner],signal:i.signal})}async getStakesByIds(i){return i.stakedSuiIds.forEach(n=>{if(!n||!za(Lt(n)))throw new Error(`Invalid Sui Stake id ${n}`)}),await this.transport.request({method:"suix_getStakesByIds",params:[i.stakedSuiIds],signal:i.signal})}async getLatestSuiSystemState({signal:i}={}){return await this.transport.request({method:"suix_getLatestSuiSystemState",params:[],signal:i})}async queryEvents({query:i,cursor:n,limit:a,order:r,signal:o}){return i&&"MoveEventType"in i&&Le(i.MoveEventType)&&(i={...i,MoveEventType:(await this.core.mvr.resolveType({type:i.MoveEventType})).type}),i&&"MoveEventModule"in i&&Me(i.MoveEventModule.package)&&(i={...i,MoveEventModule:{module:i.MoveEventModule.module,package:(await this.core.mvr.resolvePackage({package:i.MoveEventModule.package})).package}}),"MoveModule"in i&&Me(i.MoveModule.package)&&(i={...i,MoveModule:{module:i.MoveModule.module,package:(await this.core.mvr.resolvePackage({package:i.MoveModule.package})).package}}),await this.transport.request({method:"suix_queryEvents",params:[i,n,a,(r||"descending")==="descending"],signal:o})}async devInspectTransactionBlock(i){let n;if(mr(i.transactionBlock))i.transactionBlock.setSenderIfNotSet(i.sender),n=(0,an.toBase64)(await i.transactionBlock.build({client:this,onlyTransactionKind:!0}));else if(typeof i.transactionBlock=="string")n=i.transactionBlock;else if(i.transactionBlock instanceof Uint8Array)n=(0,an.toBase64)(i.transactionBlock);else throw new Error("Unknown transaction block format.");return i.signal?.throwIfAborted(),await this.transport.request({method:"sui_devInspectTransactionBlock",params:[i.sender,n,i.gasPrice?.toString(),i.epoch],signal:i.signal})}async dryRunTransactionBlock(i){return await this.transport.request({method:"sui_dryRunTransactionBlock",params:[typeof i.transactionBlock=="string"?i.transactionBlock:(0,an.toBase64)(i.transactionBlock)]})}async getDynamicFields(i){if(!i.parentId||!za(Lt(i.parentId)))throw new Error("Invalid Sui Object id");return await this.transport.request({method:"suix_getDynamicFields",params:[i.parentId,i.cursor,i.limit],signal:i.signal})}async getDynamicFieldObject(i){return await this.transport.request({method:"suix_getDynamicFieldObject",params:[i.parentId,i.name],signal:i.signal})}async getLatestCheckpointSequenceNumber({signal:i}={}){let n=await this.transport.request({method:"sui_getLatestCheckpointSequenceNumber",params:[],signal:i});return String(n)}async getCheckpoint(i){return await this.transport.request({method:"sui_getCheckpoint",params:[i.id],signal:i.signal})}async getCheckpoints(i){return await this.transport.request({method:"sui_getCheckpoints",params:[i.cursor,i?.limit,i.descendingOrder],signal:i.signal})}async getCommitteeInfo(i){return await this.transport.request({method:"suix_getCommitteeInfo",params:[i?.epoch],signal:i?.signal})}async getNetworkMetrics({signal:i}={}){return await this.transport.request({method:"suix_getNetworkMetrics",params:[],signal:i})}async getAddressMetrics({signal:i}={}){return await this.transport.request({method:"suix_getLatestAddressMetrics",params:[],signal:i})}async getEpochMetrics(i){return await this.transport.request({method:"suix_getEpochMetrics",params:[i?.cursor,i?.limit,i?.descendingOrder],signal:i?.signal})}async getAllEpochAddressMetrics(i){return await this.transport.request({method:"suix_getAllEpochAddressMetrics",params:[i?.descendingOrder],signal:i?.signal})}async getEpochs(i){return await this.transport.request({method:"suix_getEpochs",params:[i?.cursor,i?.limit,i?.descendingOrder],signal:i?.signal})}async getMoveCallMetrics({signal:i}={}){return await this.transport.request({method:"suix_getMoveCallMetrics",params:[],signal:i})}async getCurrentEpoch({signal:i}={}){return await this.transport.request({method:"suix_getCurrentEpoch",params:[],signal:i})}async getValidatorsApy({signal:i}={}){return await this.transport.request({method:"suix_getValidatorsApy",params:[],signal:i})}async getChainIdentifier({signal:i}={}){return(0,an.toHex)((0,an.fromBase58)((await this.getCheckpoint({id:"0",signal:i})).digest).slice(0,4))}async resolveNameServiceAddress(i){return await this.transport.request({method:"suix_resolveNameServiceAddress",params:[i.name],signal:i.signal})}async resolveNameServiceNames({format:i="dot",...n}){let{nextCursor:a,hasNextPage:r,data:o}=await this.transport.request({method:"suix_resolveNameServiceNames",params:[n.address,n.cursor,n.limit],signal:n.signal});return{hasNextPage:r,nextCursor:a,data:o.map(s=>Fd(s,i))}}async getProtocolConfig(i){return await this.transport.request({method:"sui_getProtocolConfig",params:[i?.version],signal:i?.signal})}async verifyZkLoginSignature(i){return await this.transport.request({method:"sui_verifyZkLoginSignature",params:[i.bytes,i.signature,i.intentScope,i.author],signal:i.signal})}async waitForTransaction({signal:i,timeout:n=60*1e3,pollInterval:a=2*1e3,...r}){let o=AbortSignal.timeout(n),s=new Promise((d,c)=>{o.addEventListener("abort",()=>c(o.reason))});for(s.catch(()=>{});!o.aborted;){i?.throwIfAborted();try{return await this.getTransactionBlock(r)}catch{await Promise.race([new Promise(d=>setTimeout(d,a)),s])}}throw o.throwIfAborted(),new Error("Unexpected error while waiting for transaction block.")}};var ce=require("@mysten/bcs");var Ir=require("big.js");var br={},ms=null,ys=null,yr={},bs={};function Oc(i,n){br[i]=n}function Cs(i,n){if(!br[i]){let a=Object.keys(br).join(", ")||"(none registered)";throw new Error(`Environment '${i}' not found. Available: ${a}`)}ms=br[i],ys=i,yr=n??{}}function ia(i,n,a){yr[i]=n,bs[i]=a??n}function Is(){if(!ms)throw new Error("No active environment. Call setActiveEnv() or import the envs module first.");return ms}function Hu(i){return i?"supplied environment":`active environment '${ys}'`}function Ju(i){return i??Is()}function rt(i,n){if(n){let o=n.packages[i]||n.dependencies[i];if(!o)throw new Error(`Package '${i}' not found in supplied environment`);return o.publishedAt}if(yr[i])return yr[i];let a=Is(),r=a.packages[i]||a.dependencies[i];if(!r)throw new Error(`Package '${i}' not found in active environment '${ys}'`);return r.publishedAt}function ct(i,n,a){if(!a&&bs[i])return bs[i];let r=Ju(a),o=r.packages[i]||r.dependencies[i];if(!o)throw new Error(`Package '${i}' not found in ${Hu(a)}`);let s=o.typeOrigins[n];if(!s)throw new Error(`Type origin for '${n}' not found in package '${i}'. Available: ${Object.keys(o.typeOrigins).join(", ")||"(none)"}`);return s}function rn(i,n){ia("bridge",i,n)}var zc={packages:{"wormhole-messenger":{originalId:"0x6ec1db2511d2283fc945d62f6c8e5305ee2538f2168fe91477f68c574d28be1",publishedAt:"0x261feaea07ac7a746068a0c81fbb82d51c0ece2d61058c24c7b572a1869afe37",typeOrigins:{"events::MessageReceivedEvent":"0x6ec1db2511d2283fc945d62f6c8e5305ee2538f2168fe91477f68c574d28be1","events::MessageSentEvent":"0x6ec1db2511d2283fc945d62f6c8e5305ee2538f2168fe91477f68c574d28be1","wormhole_messenger::AdminCap":"0x6ec1db2511d2283fc945d62f6c8e5305ee2538f2168fe91477f68c574d28be1","wormhole_messenger::WormholeMessenger":"0x6ec1db2511d2283fc945d62f6c8e5305ee2538f2168fe91477f68c574d28be1"}},"gas-oracle":{originalId:"0x34ae5595909bdfcd61191f6e5aabf0024250194f738b82df186fdd4fb18aa7ec",publishedAt:"0x2b3067e971857503bcb4c16d8a448c0541495c0ae9d7129e52659ed6724eb0ea",typeOrigins:{"gas_oracle::AdminCap":"0x34ae5595909bdfcd61191f6e5aabf0024250194f738b82df186fdd4fb18aa7ec","gas_oracle::ChainData":"0x34ae5595909bdfcd61191f6e5aabf0024250194f738b82df186fdd4fb18aa7ec","gas_oracle::GasOracle":"0x34ae5595909bdfcd61191f6e5aabf0024250194f738b82df186fdd4fb18aa7ec"}},utils:{originalId:"0x4dacc15807ba7ccfcdfcc2d0498401bbf504d112a5959323660d757a02b850d4",publishedAt:"0x4dacc15807ba7ccfcdfcc2d0498401bbf504d112a5959323660d757a02b850d4",typeOrigins:{"bytes32::Bytes32":"0x4dacc15807ba7ccfcdfcc2d0498401bbf504d112a5959323660d757a02b850d4","fee_collector::FeeCollector":"0x4dacc15807ba7ccfcdfcc2d0498401bbf504d112a5959323660d757a02b850d4","message::Message":"0x4dacc15807ba7ccfcdfcc2d0498401bbf504d112a5959323660d757a02b850d4","messenger_protocol::MessengerProtocol":"0x4dacc15807ba7ccfcdfcc2d0498401bbf504d112a5959323660d757a02b850d4","set::Empty":"0x4dacc15807ba7ccfcdfcc2d0498401bbf504d112a5959323660d757a02b850d4","set::Set":"0x4dacc15807ba7ccfcdfcc2d0498401bbf504d112a5959323660d757a02b850d4","version::CurrentVersion":"0x4dacc15807ba7ccfcdfcc2d0498401bbf504d112a5959323660d757a02b850d4"}},messenger:{originalId:"0x73d4d15293c2482646cdfc28c58da0f9eef64c577e9c0d2bbf614c1623346b49",publishedAt:"0x2c7d3497ef1ad32b62b30fb9456ba602c4dc756c07643096a6b4a1f04f72b549",typeOrigins:{"events::MessageReceivedEvent":"0x73d4d15293c2482646cdfc28c58da0f9eef64c577e9c0d2bbf614c1623346b49","events::MessageSentEvent":"0x73d4d15293c2482646cdfc28c58da0f9eef64c577e9c0d2bbf614c1623346b49","messenger::AdminCap":"0x73d4d15293c2482646cdfc28c58da0f9eef64c577e9c0d2bbf614c1623346b49","messenger::Messenger":"0x73d4d15293c2482646cdfc28c58da0f9eef64c577e9c0d2bbf614c1623346b49"}},bridge:{originalId:"0xa2b1c8af2a4f4624362c4a7d0f91fb6b0921e780ffb2c07701901c734d75d2e3",publishedAt:"0x55b0e9a5f0deaa21cf0c52eefedff362be1859f10a74415c88801bf8eb5a0597",typeOrigins:{"another_bridge::AnotherBridge":"0xa2b1c8af2a4f4624362c4a7d0f91fb6b0921e780ffb2c07701901c734d75d2e3","bridge::AdminCap":"0xa2b1c8af2a4f4624362c4a7d0f91fb6b0921e780ffb2c07701901c734d75d2e3","bridge::Bridge":"0xa2b1c8af2a4f4624362c4a7d0f91fb6b0921e780ffb2c07701901c734d75d2e3","bridge::FeeCollectorCap":"0xa2b1c8af2a4f4624362c4a7d0f91fb6b0921e780ffb2c07701901c734d75d2e3","bridge::StopSwapCap":"0xa2b1c8af2a4f4624362c4a7d0f91fb6b0921e780ffb2c07701901c734d75d2e3","events::DepositEvent":"0xa2b1c8af2a4f4624362c4a7d0f91fb6b0921e780ffb2c07701901c734d75d2e3","events::ReceiveFeeEvent":"0xa2b1c8af2a4f4624362c4a7d0f91fb6b0921e780ffb2c07701901c734d75d2e3","events::RewardsClaimedEvent":"0xa2b1c8af2a4f4624362c4a7d0f91fb6b0921e780ffb2c07701901c734d75d2e3","events::SwappedEvent":"0xa2b1c8af2a4f4624362c4a7d0f91fb6b0921e780ffb2c07701901c734d75d2e3","events::SwappedFromVUsdEvent":"0xa2b1c8af2a4f4624362c4a7d0f91fb6b0921e780ffb2c07701901c734d75d2e3","events::SwappedToVUsdEvent":"0xa2b1c8af2a4f4624362c4a7d0f91fb6b0921e780ffb2c07701901c734d75d2e3","events::TokensReceivedEvent":"0xa2b1c8af2a4f4624362c4a7d0f91fb6b0921e780ffb2c07701901c734d75d2e3","events::TokensSentEvent":"0xa2b1c8af2a4f4624362c4a7d0f91fb6b0921e780ffb2c07701901c734d75d2e3","events::WithdrawEvent":"0xa2b1c8af2a4f4624362c4a7d0f91fb6b0921e780ffb2c07701901c734d75d2e3","pool::AdminCap":"0xa2b1c8af2a4f4624362c4a7d0f91fb6b0921e780ffb2c07701901c734d75d2e3","pool::Pool":"0xa2b1c8af2a4f4624362c4a7d0f91fb6b0921e780ffb2c07701901c734d75d2e3","pool::StopCap":"0xa2b1c8af2a4f4624362c4a7d0f91fb6b0921e780ffb2c07701901c734d75d2e3","pool_rewards::PoolRewards":"0xa2b1c8af2a4f4624362c4a7d0f91fb6b0921e780ffb2c07701901c734d75d2e3","pool_state::PoolState":"0xa2b1c8af2a4f4624362c4a7d0f91fb6b0921e780ffb2c07701901c734d75d2e3","user_deposit::UserDeposit":"0xa2b1c8af2a4f4624362c4a7d0f91fb6b0921e780ffb2c07701901c734d75d2e3"}},"cctp-bridge":{originalId:"0xcfb3ada02ea9b40f2beb396f5f781689a2f6862d224e6c9854e175d14278f9f5",publishedAt:"0x750cc42da7042399613378a509fbed8563471ca48d961b2edf832bfd1342a1e0",typeOrigins:{"cctp_bridge::AdminCap":"0xcfb3ada02ea9b40f2beb396f5f781689a2f6862d224e6c9854e175d14278f9f5","cctp_bridge::CctpBridge":"0xcfb3ada02ea9b40f2beb396f5f781689a2f6862d224e6c9854e175d14278f9f5","cctp_bridge::FeeCollectorCap":"0xcfb3ada02ea9b40f2beb396f5f781689a2f6862d224e6c9854e175d14278f9f5","events::ReceiveFeeEvent":"0xcfb3ada02ea9b40f2beb396f5f781689a2f6862d224e6c9854e175d14278f9f5","events::RecipientReplaced":"0xcfb3ada02ea9b40f2beb396f5f781689a2f6862d224e6c9854e175d14278f9f5","events::TokensReceivedEvent":"0xcfb3ada02ea9b40f2beb396f5f781689a2f6862d224e6c9854e175d14278f9f5","events::TokensSentEvent":"0xcfb3ada02ea9b40f2beb396f5f781689a2f6862d224e6c9854e175d14278f9f5","message_transmitter_authenticator::MessageTransmitterAuthenticator":"0xcfb3ada02ea9b40f2beb396f5f781689a2f6862d224e6c9854e175d14278f9f5"}}},dependencies:{std:{originalId:"0x1",publishedAt:"0x1",typeOrigins:{"ascii::Char":"0x1","ascii::String":"0x1","bit_vector::BitVector":"0x1","fixed_point32::FixedPoint32":"0x1","internal::Permit":"0x1","option::Option":"0x1","string::String":"0x1","type_name::TypeName":"0x1","uq32_32::UQ32_32":"0x1","uq64_64::UQ64_64":"0x1"}},sui:{originalId:"0x2",publishedAt:"0x2",typeOrigins:{"accumulator::AccumulatorRoot":"0x2","accumulator::Key":"0x2","accumulator::U128":"0x2","accumulator_metadata::AccumulatorObjectCountKey":"0x2","accumulator_metadata::Metadata":"0x2","accumulator_metadata::MetadataKey":"0x2","accumulator_metadata::Owner":"0x2","accumulator_metadata::OwnerKey":"0x2","accumulator_settlement::EventStreamHead":"0x2","address_alias::AddressAliasState":"0x2","address_alias::AddressAliases":"0x2","address_alias::AliasKey":"0x2","authenticator_state::ActiveJwk":"0x2","authenticator_state::AuthenticatorState":"0x2","authenticator_state::AuthenticatorStateInner":"0x2","authenticator_state::JWK":"0x2","authenticator_state::JwkId":"0x2","bag::Bag":"0x2","balance::Balance":"0x2","balance::Supply":"0x2","bcs::BCS":"0x2","bls12381::G1":"0x2","bls12381::G2":"0x2","bls12381::GT":"0x2","bls12381::Scalar":"0x2","bls12381::UncompressedG1":"0x2","borrow::Borrow":"0x2","borrow::Referent":"0x2","clock::Clock":"0x2","coin::Coin":"0x2","coin::CoinMetadata":"0x2","coin::CurrencyCreated":"0x2","coin::DenyCap":"0x2","coin::DenyCapV2":"0x2","coin::RegulatedCoinMetadata":"0x2","coin::TreasuryCap":"0x2","coin_registry::Borrow":"0x2","coin_registry::CoinRegistry":"0x2","coin_registry::Currency":"0x2","coin_registry::CurrencyInitializer":"0x2","coin_registry::CurrencyKey":"0x2","coin_registry::ExtraField":"0x2","coin_registry::LegacyMetadataKey":"0x2","coin_registry::MetadataCap":"0x2","coin_registry::MetadataCapState":"0x2","coin_registry::RegulatedState":"0x2","coin_registry::SupplyState":"0x2","config::Config":"0x2","config::Setting":"0x2","config::SettingData":"0x2","deny_list::AddressKey":"0x2","deny_list::ConfigKey":"0x2","deny_list::ConfigWriteCap":"0x2","deny_list::DenyList":"0x2","deny_list::GlobalPauseKey":"0x2","deny_list::PerTypeConfigCreated":"0x2","deny_list::PerTypeList":"0x2","derived_object::Claimed":"0x2","derived_object::ClaimedStatus":"0x2","derived_object::DerivedObjectKey":"0x2","display::Display":"0x2","display::DisplayCreated":"0x2","display::VersionUpdated":"0x2","display_registry::Display":"0x2","display_registry::DisplayCap":"0x2","display_registry::DisplayKey":"0x2","display_registry::DisplayRegistry":"0x2","display_registry::SystemMigrationCap":"0x2","dynamic_field::Field":"0x2","dynamic_object_field::Wrapper":"0x2","funds_accumulator::Withdrawal":"0x2","groth16::Curve":"0x2","groth16::PreparedVerifyingKey":"0x2","groth16::ProofPoints":"0x2","groth16::PublicProofInputs":"0x2","group_ops::Element":"0x2","kiosk::Borrow":"0x2","kiosk::Item":"0x2","kiosk::ItemDelisted":"0x2","kiosk::ItemListed":"0x2","kiosk::ItemPurchased":"0x2","kiosk::Kiosk":"0x2","kiosk::KioskOwnerCap":"0x2","kiosk::Listing":"0x2","kiosk::Lock":"0x2","kiosk::PurchaseCap":"0x2","kiosk_extension::Extension":"0x2","kiosk_extension::ExtensionKey":"0x2","linked_table::LinkedTable":"0x2","linked_table::Node":"0x2","nitro_attestation::NitroAttestationDocument":"0x2","nitro_attestation::PCREntry":"0x2","object::ID":"0x2","object::UID":"0x2","object_bag::ObjectBag":"0x2","object_table::ObjectTable":"0x2","package::Publisher":"0x2","package::UpgradeCap":"0x2","package::UpgradeReceipt":"0x2","package::UpgradeTicket":"0x2","party::Party":"0x2","party::Permissions":"0x2","priority_queue::Entry":"0x2","priority_queue::PriorityQueue":"0x2","random::Random":"0x2","random::RandomGenerator":"0x2","random::RandomInner":"0x2","ristretto255::G":"0x2","ristretto255::Scalar":"0x2","sui::SUI":"0x2","table::Table":"0x2","table_vec::TableVec":"0x2","token::ActionRequest":"0x2","token::RuleKey":"0x2","token::Token":"0x2","token::TokenPolicy":"0x2","token::TokenPolicyCap":"0x2","token::TokenPolicyCreated":"0x2","transfer::Receiving":"0x2","transfer_policy::RuleKey":"0x2","transfer_policy::TransferPolicy":"0x2","transfer_policy::TransferPolicyCap":"0x2","transfer_policy::TransferPolicyCreated":"0x2","transfer_policy::TransferPolicyDestroyed":"0x2","transfer_policy::TransferRequest":"0x2","tx_context::TxContext":"0x2","url::Url":"0x2","vec_map::Entry":"0x2","vec_map::VecMap":"0x2","vec_set::VecSet":"0x2","versioned::VersionChangeCap":"0x2","versioned::Versioned":"0x2","zklogin_verified_id::VerifiedID":"0x2","zklogin_verified_issuer::VerifiedIssuer":"0x2"}},"token-messenger-minter":{originalId:"0x31cc14d80c175ae39777c0238f20594c6d4869cfab199f40b69f3319956b8beb",publishedAt:"0x31cc14d80c175ae39777c0238f20594c6d4869cfab199f40b69f3319956b8beb",typeOrigins:{"burn_message::BurnMessage":"0x31cc14d80c175ae39777c0238f20594c6d4869cfab199f40b69f3319956b8beb","deposit_for_burn::DepositForBurn":"0x31cc14d80c175ae39777c0238f20594c6d4869cfab199f40b69f3319956b8beb","deposit_for_burn::DepositForBurnTicket":"0x31cc14d80c175ae39777c0238f20594c6d4869cfab199f40b69f3319956b8beb","deposit_for_burn::DepositForBurnWithCallerTicket":"0x31cc14d80c175ae39777c0238f20594c6d4869cfab199f40b69f3319956b8beb","deposit_for_burn::ReplaceDepositForBurnTicket":"0x31cc14d80c175ae39777c0238f20594c6d4869cfab199f40b69f3319956b8beb","handle_receive_message::MintAndWithdraw":"0x31cc14d80c175ae39777c0238f20594c6d4869cfab199f40b69f3319956b8beb","handle_receive_message::StampReceiptTicketWithBurnMessage":"0x31cc14d80c175ae39777c0238f20594c6d4869cfab199f40b69f3319956b8beb","initialize::INITIALIZE":"0x31cc14d80c175ae39777c0238f20594c6d4869cfab199f40b69f3319956b8beb","initialize::InitCap":"0x31cc14d80c175ae39777c0238f20594c6d4869cfab199f40b69f3319956b8beb","message_transmitter_authenticator::MessageTransmitterAuthenticator":"0x31cc14d80c175ae39777c0238f20594c6d4869cfab199f40b69f3319956b8beb","migration::MigrationAborted":"0x31cc14d80c175ae39777c0238f20594c6d4869cfab199f40b69f3319956b8beb","migration::MigrationCompleted":"0x31cc14d80c175ae39777c0238f20594c6d4869cfab199f40b69f3319956b8beb","migration::MigrationStarted":"0x31cc14d80c175ae39777c0238f20594c6d4869cfab199f40b69f3319956b8beb","pausable::Pause":"0x31cc14d80c175ae39777c0238f20594c6d4869cfab199f40b69f3319956b8beb","pausable::Unpause":"0x31cc14d80c175ae39777c0238f20594c6d4869cfab199f40b69f3319956b8beb","remote_token_messenger::RemoteTokenMessengerAdded":"0x31cc14d80c175ae39777c0238f20594c6d4869cfab199f40b69f3319956b8beb","remote_token_messenger::RemoteTokenMessengerRemoved":"0x31cc14d80c175ae39777c0238f20594c6d4869cfab199f40b69f3319956b8beb","role_management::PauserChanged":"0x31cc14d80c175ae39777c0238f20594c6d4869cfab199f40b69f3319956b8beb","role_management::SetTokenController":"0x31cc14d80c175ae39777c0238f20594c6d4869cfab199f40b69f3319956b8beb","roles::OwnerRole":"0x31cc14d80c175ae39777c0238f20594c6d4869cfab199f40b69f3319956b8beb","roles::Roles":"0x31cc14d80c175ae39777c0238f20594c6d4869cfab199f40b69f3319956b8beb","state::State":"0x31cc14d80c175ae39777c0238f20594c6d4869cfab199f40b69f3319956b8beb","token_controller::MintCapAdded":"0x31cc14d80c175ae39777c0238f20594c6d4869cfab199f40b69f3319956b8beb","token_controller::MintCapRemoved":"0x31cc14d80c175ae39777c0238f20594c6d4869cfab199f40b69f3319956b8beb","token_controller::SetBurnLimitPerMessage":"0x31cc14d80c175ae39777c0238f20594c6d4869cfab199f40b69f3319956b8beb","token_controller::TokenPairLinked":"0x31cc14d80c175ae39777c0238f20594c6d4869cfab199f40b69f3319956b8beb","token_controller::TokenPairUnlinked":"0x31cc14d80c175ae39777c0238f20594c6d4869cfab199f40b69f3319956b8beb"}},stablecoin:{originalId:"0x346e3233f61eb0055713417bfaddda7dc3bf26816faad1f7606994a368b92917",publishedAt:"0x346e3233f61eb0055713417bfaddda7dc3bf26816faad1f7606994a368b92917",typeOrigins:{"mint_allowance::MintAllowance":"0x346e3233f61eb0055713417bfaddda7dc3bf26816faad1f7606994a368b92917","roles::BlocklisterChanged":"0x346e3233f61eb0055713417bfaddda7dc3bf26816faad1f7606994a368b92917","roles::BlocklisterKey":"0x346e3233f61eb0055713417bfaddda7dc3bf26816faad1f7606994a368b92917","roles::MasterMinterChanged":"0x346e3233f61eb0055713417bfaddda7dc3bf26816faad1f7606994a368b92917","roles::MasterMinterKey":"0x346e3233f61eb0055713417bfaddda7dc3bf26816faad1f7606994a368b92917","roles::MetadataUpdaterChanged":"0x346e3233f61eb0055713417bfaddda7dc3bf26816faad1f7606994a368b92917","roles::MetadataUpdaterKey":"0x346e3233f61eb0055713417bfaddda7dc3bf26816faad1f7606994a368b92917","roles::OwnerKey":"0x346e3233f61eb0055713417bfaddda7dc3bf26816faad1f7606994a368b92917","roles::OwnerRole":"0x346e3233f61eb0055713417bfaddda7dc3bf26816faad1f7606994a368b92917","roles::PauserChanged":"0x346e3233f61eb0055713417bfaddda7dc3bf26816faad1f7606994a368b92917","roles::PauserKey":"0x346e3233f61eb0055713417bfaddda7dc3bf26816faad1f7606994a368b92917","roles::Roles":"0x346e3233f61eb0055713417bfaddda7dc3bf26816faad1f7606994a368b92917","stablecoin::STABLECOIN":"0x346e3233f61eb0055713417bfaddda7dc3bf26816faad1f7606994a368b92917","treasury::Blocklisted":"0x346e3233f61eb0055713417bfaddda7dc3bf26816faad1f7606994a368b92917","treasury::Burn":"0x346e3233f61eb0055713417bfaddda7dc3bf26816faad1f7606994a368b92917","treasury::ControllerConfigured":"0x346e3233f61eb0055713417bfaddda7dc3bf26816faad1f7606994a368b92917","treasury::ControllerRemoved":"0x346e3233f61eb0055713417bfaddda7dc3bf26816faad1f7606994a368b92917","treasury::DenyCapKey":"0x346e3233f61eb0055713417bfaddda7dc3bf26816faad1f7606994a368b92917","treasury::MetadataUpdated":"0x346e3233f61eb0055713417bfaddda7dc3bf26816faad1f7606994a368b92917","treasury::MigrationAborted":"0x346e3233f61eb0055713417bfaddda7dc3bf26816faad1f7606994a368b92917","treasury::MigrationCompleted":"0x346e3233f61eb0055713417bfaddda7dc3bf26816faad1f7606994a368b92917","treasury::MigrationStarted":"0x346e3233f61eb0055713417bfaddda7dc3bf26816faad1f7606994a368b92917","treasury::Mint":"0x346e3233f61eb0055713417bfaddda7dc3bf26816faad1f7606994a368b92917","treasury::MintCap":"0x346e3233f61eb0055713417bfaddda7dc3bf26816faad1f7606994a368b92917","treasury::MintCapCreated":"0x346e3233f61eb0055713417bfaddda7dc3bf26816faad1f7606994a368b92917","treasury::MinterAllowanceIncremented":"0x346e3233f61eb0055713417bfaddda7dc3bf26816faad1f7606994a368b92917","treasury::MinterConfigured":"0x346e3233f61eb0055713417bfaddda7dc3bf26816faad1f7606994a368b92917","treasury::MinterRemoved":"0x346e3233f61eb0055713417bfaddda7dc3bf26816faad1f7606994a368b92917","treasury::Pause":"0x346e3233f61eb0055713417bfaddda7dc3bf26816faad1f7606994a368b92917","treasury::Treasury":"0x346e3233f61eb0055713417bfaddda7dc3bf26816faad1f7606994a368b92917","treasury::TreasuryCapKey":"0x346e3233f61eb0055713417bfaddda7dc3bf26816faad1f7606994a368b92917","treasury::Unblocklisted":"0x346e3233f61eb0055713417bfaddda7dc3bf26816faad1f7606994a368b92917","treasury::Unpause":"0x346e3233f61eb0055713417bfaddda7dc3bf26816faad1f7606994a368b92917"}},"message-transmitter":{originalId:"0x4931e06dce648b3931f890035bd196920770e913e43e45990b383f6486fdd0a5",publishedAt:"0x4931e06dce648b3931f890035bd196920770e913e43e45990b383f6486fdd0a5",typeOrigins:{"attester_manager::AttesterDisabled":"0x4931e06dce648b3931f890035bd196920770e913e43e45990b383f6486fdd0a5","attester_manager::AttesterEnabled":"0x4931e06dce648b3931f890035bd196920770e913e43e45990b383f6486fdd0a5","attester_manager::SignatureThresholdUpdated":"0x4931e06dce648b3931f890035bd196920770e913e43e45990b383f6486fdd0a5","initialize::INITIALIZE":"0x4931e06dce648b3931f890035bd196920770e913e43e45990b383f6486fdd0a5","initialize::InitCap":"0x4931e06dce648b3931f890035bd196920770e913e43e45990b383f6486fdd0a5","message::Message":"0x4931e06dce648b3931f890035bd196920770e913e43e45990b383f6486fdd0a5","message_size::MaxMessageBodySizeUpdated":"0x4931e06dce648b3931f890035bd196920770e913e43e45990b383f6486fdd0a5","migration::MigrationAborted":"0x4931e06dce648b3931f890035bd196920770e913e43e45990b383f6486fdd0a5","migration::MigrationCompleted":"0x4931e06dce648b3931f890035bd196920770e913e43e45990b383f6486fdd0a5","migration::MigrationStarted":"0x4931e06dce648b3931f890035bd196920770e913e43e45990b383f6486fdd0a5","pausable::Pause":"0x4931e06dce648b3931f890035bd196920770e913e43e45990b383f6486fdd0a5","pausable::Unpause":"0x4931e06dce648b3931f890035bd196920770e913e43e45990b383f6486fdd0a5","receive_message::MessageReceived":"0x4931e06dce648b3931f890035bd196920770e913e43e45990b383f6486fdd0a5","receive_message::Receipt":"0x4931e06dce648b3931f890035bd196920770e913e43e45990b383f6486fdd0a5","receive_message::ReceiveMessageTicket":"0x4931e06dce648b3931f890035bd196920770e913e43e45990b383f6486fdd0a5","receive_message::StampReceiptTicket":"0x4931e06dce648b3931f890035bd196920770e913e43e45990b383f6486fdd0a5","receive_message::StampedReceipt":"0x4931e06dce648b3931f890035bd196920770e913e43e45990b383f6486fdd0a5","role_management::AttesterManagerUpdated":"0x4931e06dce648b3931f890035bd196920770e913e43e45990b383f6486fdd0a5","role_management::PauserChanged":"0x4931e06dce648b3931f890035bd196920770e913e43e45990b383f6486fdd0a5","roles::OwnerRole":"0x4931e06dce648b3931f890035bd196920770e913e43e45990b383f6486fdd0a5","roles::Roles":"0x4931e06dce648b3931f890035bd196920770e913e43e45990b383f6486fdd0a5","send_message::MessageSent":"0x4931e06dce648b3931f890035bd196920770e913e43e45990b383f6486fdd0a5","send_message::ReplaceMessageTicket":"0x4931e06dce648b3931f890035bd196920770e913e43e45990b383f6486fdd0a5","send_message::SendMessageTicket":"0x4931e06dce648b3931f890035bd196920770e913e43e45990b383f6486fdd0a5","send_message::SendMessageWithCallerTicket":"0x4931e06dce648b3931f890035bd196920770e913e43e45990b383f6486fdd0a5","state::State":"0x4931e06dce648b3931f890035bd196920770e913e43e45990b383f6486fdd0a5"}},wormhole:{originalId:"0xf47329f4344f3bf0f8e436e2f7b485466cff300f12a166563995d3888c296a94",publishedAt:"0xf47329f4344f3bf0f8e436e2f7b485466cff300f12a166563995d3888c296a94",typeOrigins:{"bytes20::Bytes20":"0xf47329f4344f3bf0f8e436e2f7b485466cff300f12a166563995d3888c296a94","bytes32::Bytes32":"0xf47329f4344f3bf0f8e436e2f7b485466cff300f12a166563995d3888c296a94","consumed_vaas::ConsumedVAAs":"0xf47329f4344f3bf0f8e436e2f7b485466cff300f12a166563995d3888c296a94","cursor::Cursor":"0xf47329f4344f3bf0f8e436e2f7b485466cff300f12a166563995d3888c296a94","emitter::EmitterCap":"0xf47329f4344f3bf0f8e436e2f7b485466cff300f12a166563995d3888c296a94","emitter::EmitterCreated":"0xf47329f4344f3bf0f8e436e2f7b485466cff300f12a166563995d3888c296a94","emitter::EmitterDestroyed":"0xf47329f4344f3bf0f8e436e2f7b485466cff300f12a166563995d3888c296a94","external_address::ExternalAddress":"0xf47329f4344f3bf0f8e436e2f7b485466cff300f12a166563995d3888c296a94","fee_collector::FeeCollector":"0xf47329f4344f3bf0f8e436e2f7b485466cff300f12a166563995d3888c296a94","governance_message::DecreeReceipt":"0xf47329f4344f3bf0f8e436e2f7b485466cff300f12a166563995d3888c296a94","governance_message::DecreeTicket":"0xf47329f4344f3bf0f8e436e2f7b485466cff300f12a166563995d3888c296a94","guardian::Guardian":"0xf47329f4344f3bf0f8e436e2f7b485466cff300f12a166563995d3888c296a94","guardian_set::GuardianSet":"0xf47329f4344f3bf0f8e436e2f7b485466cff300f12a166563995d3888c296a94","guardian_signature::GuardianSignature":"0xf47329f4344f3bf0f8e436e2f7b485466cff300f12a166563995d3888c296a94","migrate::MigrateComplete":"0xf47329f4344f3bf0f8e436e2f7b485466cff300f12a166563995d3888c296a94","package_utils::CurrentPackage":"0xf47329f4344f3bf0f8e436e2f7b485466cff300f12a166563995d3888c296a94","package_utils::CurrentVersion":"0xf47329f4344f3bf0f8e436e2f7b485466cff300f12a166563995d3888c296a94","package_utils::PackageInfo":"0xf47329f4344f3bf0f8e436e2f7b485466cff300f12a166563995d3888c296a94","package_utils::PendingPackage":"0xf47329f4344f3bf0f8e436e2f7b485466cff300f12a166563995d3888c296a94","publish_message::MessageTicket":"0xf47329f4344f3bf0f8e436e2f7b485466cff300f12a166563995d3888c296a94","publish_message::WormholeMessage":"0xf47329f4344f3bf0f8e436e2f7b485466cff300f12a166563995d3888c296a94","set::Empty":"0xf47329f4344f3bf0f8e436e2f7b485466cff300f12a166563995d3888c296a94","set::Set":"0xf47329f4344f3bf0f8e436e2f7b485466cff300f12a166563995d3888c296a94","set_fee::GovernanceWitness":"0xf47329f4344f3bf0f8e436e2f7b485466cff300f12a166563995d3888c296a94","set_fee::SetFee":"0xf47329f4344f3bf0f8e436e2f7b485466cff300f12a166563995d3888c296a94","setup::DeployerCap":"0xf47329f4344f3bf0f8e436e2f7b485466cff300f12a166563995d3888c296a94","state::LatestOnly":"0xf47329f4344f3bf0f8e436e2f7b485466cff300f12a166563995d3888c296a94","state::State":"0xf47329f4344f3bf0f8e436e2f7b485466cff300f12a166563995d3888c296a94","transfer_fee::GovernanceWitness":"0xf47329f4344f3bf0f8e436e2f7b485466cff300f12a166563995d3888c296a94","transfer_fee::TransferFee":"0xf47329f4344f3bf0f8e436e2f7b485466cff300f12a166563995d3888c296a94","update_guardian_set::GovernanceWitness":"0xf47329f4344f3bf0f8e436e2f7b485466cff300f12a166563995d3888c296a94","update_guardian_set::GuardianSetAdded":"0xf47329f4344f3bf0f8e436e2f7b485466cff300f12a166563995d3888c296a94","update_guardian_set::UpdateGuardianSet":"0xf47329f4344f3bf0f8e436e2f7b485466cff300f12a166563995d3888c296a94","upgrade_contract::ContractUpgraded":"0xf47329f4344f3bf0f8e436e2f7b485466cff300f12a166563995d3888c296a94","upgrade_contract::GovernanceWitness":"0xf47329f4344f3bf0f8e436e2f7b485466cff300f12a166563995d3888c296a94","upgrade_contract::UpgradeContract":"0xf47329f4344f3bf0f8e436e2f7b485466cff300f12a166563995d3888c296a94","vaa::VAA":"0xf47329f4344f3bf0f8e436e2f7b485466cff300f12a166563995d3888c296a94","version_control::V__0_2_0":"0xf47329f4344f3bf0f8e436e2f7b485466cff300f12a166563995d3888c296a94","version_control::V__DUMMY":"0xf47329f4344f3bf0f8e436e2f7b485466cff300f12a166563995d3888c296a94"}}}};var Uc=!1;Uc||(Oc("testnet",zc),Cs("testnet"),Uc=!0);function Ou(i,n=["<",">"]){let[a,r]=n,o=[],s="",d=0;for(let c=0;c<i.length;c++){let g=i[c];if(g===a&&d++,g===r&&d--,d===0&&g===","){o.push(s.trim()),s="";continue}s+=g}return o.push(s.trim()),o}function me(i){if(typeof i!="string")throw new Error(`Illegal type passed as a name of the type: ${i}`);let[n,a]=["<",">"],r=i.indexOf(n),o=Array.from(i).reverse().indexOf(a);if(r===-1&&o===-1)return{typeName:i,typeArgs:[]};if(r===-1||o===-1)throw new Error(`Unclosed generic in name '${i}'`);let s=i.slice(0,r),d=Ou(i.slice(r+1,i.length-o-1),[n,a]);return{typeName:s,typeArgs:d}}function Dc(i){return!i||typeof i!="object"||Array.isArray(i)?!1:"GasCoin"in i||"Input"in i||"Result"in i||"NestedResult"in i}function L(i,n){return Dc(n)?n:i.object(n)}function mt(i,n,a){if(Dc(n)){if(typeof n=="function")throw new Error("Transaction plugins are not supported");return L(i,n)}function r(l){let{typeName:A,typeArgs:u}=me(l);switch(A){case"bool":return B.Bool;case"u8":return B.U8;case"u16":return B.U16;case"u32":return B.U32;case"u64":return B.U64;case"u128":return B.U128;case"u256":return B.U256;case"address":return B.Address;case"0x1::string::String":case"0x1::ascii::String":return B.String;case"0x2::object::ID":return B.Address;case"0x1::option::Option":return B.option(r(u[0]));case"vector":return B.vector(r(u[0]));default:throw new Error(`invalid primitive type ${l}`)}}function o(l){for(let A of l){if(typeof A>"u"||A===null)return!0;if(Array.isArray(A))return o(A)}return!1}function s(l){for(let A of l){if(!Array.isArray(A)){if(A===null)continue;switch(typeof A){case"string":case"number":case"bigint":case"boolean":continue;default:return!1}}return s(A)}return!0}function d(l){for(let A of l){if(!Array.isArray(A))switch(typeof A){case"string":case"number":case"bigint":case"boolean":return!0;default:continue}return d(A)}return!1}let{typeName:c,typeArgs:g}=me(a);switch(c){case"0x1::option::Option":if(n===null)return i.pure.option("bool",null);if(s([n]))return i.pure(r(a).serialize(n));if(d([n]))throw new Error("mixing primitive and TransactionArgument values is not supported");return i.moveCall({target:"0x1::option::some",typeArguments:[g[0]],arguments:[mt(i,n,g[0])]});case"vector":if(!Array.isArray(n))throw new Error("expected an array for vector type");if(n.length===0)return i.pure(B.vector(B.Bool).serialize([]));if(o(n))throw new Error("the provided array contains undefined or null values");if(s(n))return i.pure(r(a).serialize(n));if(d(n))throw new Error("mixing primitive and TransactionArgument values is not supported");return i.makeMoveVec({type:g[0],elements:n});default:return i.pure(r(a).serialize(n))}}function zu(i){let n=i.split("0x").join("");for(let a=0;a<n.length;a++)if(n[a]!=="0")return`0x${n.substring(a)}`;return"0x0"}function X(i){let{typeName:n,typeArgs:a}=me(i);switch(n){case"bool":case"u8":case"u16":case"u32":case"u64":case"u128":case"u256":case"address":case"signer":return n;case"vector":return`vector<${X(a[0])}>`;default:{let r=n.split("::");r[0]=zu(r[0]);let o=r.join("::");return a.length>0?`${o}<${a.map(s=>X(s)).join(",")}>`:o}}}function ie(i,...n){return n.length>0?`${i}<${n.join(", ")}>`:i}function hs(i,n,a,r){return i.moveCall({target:`${rt("bridge",r?.env)}::bridge_interface::swap_and_bridge`,typeArguments:[n],arguments:[L(i,a.bridge),L(i,a.messenger),L(i,a.gasOracle),L(i,a.amount),L(i,a.recipient),mt(i,a.destinationChainId,"u8"),L(i,a.receiveToken),mt(i,a.nonce,"u256"),L(i,a.feeSuiCoin),L(i,a.feeTokenCoin)]})}function vs(i,n,a,r){return i.moveCall({target:`${rt("bridge",r?.env)}::bridge_interface::swap_and_bridge_wormhole`,typeArguments:[n],arguments:[L(i,a.bridge),L(i,a.messenger),L(i,a.wormholeState),L(i,a.theClock),L(i,a.gasOracle),L(i,a.amount),L(i,a.recipient),mt(i,a.destinationChainId,"u8"),L(i,a.receiveToken),mt(i,a.nonce,"u256"),L(i,a.feeSuiCoin),L(i,a.feeTokenCoin)]})}function Qc(i,n,a,r){return i.moveCall({target:`${rt("bridge",r?.env)}::bridge_interface::swap`,typeArguments:n,arguments:[L(i,a.bridge),L(i,a.coin),mt(i,a.receiveAmountMin,"u64")]})}function Kc(i,n,a,r){return i.moveCall({target:`${rt("bridge",r?.env)}::bridge_interface::deposit`,typeArguments:[n],arguments:[L(i,a.bridge),L(i,a.userDeposit),L(i,a.coin)]})}function Ec(i,n,a,r){return i.moveCall({target:`${rt("bridge",r?.env)}::bridge_interface::claim_reward`,typeArguments:[n],arguments:[L(i,a.bridge),L(i,a.userDeposit)]})}function _c(i,n,a,r){return i.moveCall({target:`${rt("bridge",r?.env)}::bridge_interface::withdraw`,typeArguments:[n],arguments:[L(i,a.bridge),L(i,a.userDeposit),mt(i,a.amountLp,"u64")]})}function $c(i,n,a,r){return i.moveCall({target:`${rt("bridge",r?.env)}::bridge_interface::pool`,typeArguments:[n],arguments:[L(i,a)]})}function qc(i,n,a){return i.moveCall({target:`${rt("bridge",a?.env)}::bridge_interface::new_user_deposit`,typeArguments:[n],arguments:[]})}function eg(i,n){ia("cctp-bridge",i,n)}function fs(i,n,a,r){return i.moveCall({target:`${rt("cctp-bridge",r?.env)}::cctp_bridge_interface::bridge`,typeArguments:[n],arguments:[L(i,a.cctpBridge),L(i,a.gasOracle),L(i,a.tokenMessengerMinterState),L(i,a.messageTransmitterState),L(i,a.treasury),L(i,a.denyList),L(i,a.amount),L(i,a.feeSuiCoin),L(i,a.feeTokenCoin),mt(i,a.destinationChainId,"u8"),L(i,a.recipient),L(i,a.recipientWalletAddress)]})}function tg(i,n){ia("utils",i,n)}var Rs=class i{__VectorClass=!0;static $typeName="vector";static $numTypeParams=1;static $isPhantom=[!1];$typeName="vector";$fullTypeName;$typeArgs;$isPhantom=[!1];elements;constructor(n,a){this.$fullTypeName=ie(this.$typeName,...n),this.$typeArgs=n,this.elements=a}static reified(n){return{typeName:i.$typeName,fullTypeName:ie(i.$typeName,M(n)),typeArgs:[M(n)],isPhantom:i.$isPhantom,reifiedTypeArgs:[n],fromFields:a=>i.fromFields(n,a),fromFieldsWithTypes:a=>i.fromFieldsWithTypes(n,a),fromBcs:a=>i.fromBcs(n,a),bcs:i.bcs(_a(n)),fromJSONField:a=>i.fromJSONField(n,a),fromJSON:a=>i.fromJSON(n,a),new:a=>new i([M(n)],a),kind:"VectorClassReified"}}static get r(){return i.reified}static get bcs(){return B.vector}static fromFields(n,a){return i.reified(n).new(a.map(r=>ee(n,r)))}static fromFieldsWithTypes(n,a){return i.reified(n).new(a.map(r=>Q(n,r)))}static fromBcs(n,a){return i.fromFields(n,i.bcs(_a(n)).parse(a))}toJSONField(){return this.elements.map(n=>Sn(this.$typeArgs[0],n))}toJSON(){return{$typeName:this.$typeName,$typeArgs:this.$typeArgs,elements:this.toJSONField()}}static fromJSONField(n,a){return i.reified(n).new(a.map(r=>K(n,r)))}static fromJSON(n,a){if(a.$typeName!==i.$typeName)throw new Error("not a vector json object");return i.fromJSONField(n,a.elements)}};function ra(i){return Rs.r(i)}function he(i){return typeof i=="string"?{phantomType:i,kind:"PhantomReified"}:{get phantomType(){return i.fullTypeName},kind:"PhantomReified"}}var Uu=B.bytes(32).transform({input:i=>(0,ce.fromHex)(i),output:i=>(0,ce.toHex)(i)});function _a(i){switch(i){case"bool":return B.bool();case"u8":return B.u8();case"u16":return B.u16();case"u32":return B.u32();case"u64":return B.u64();case"u128":return B.u128();case"u256":return B.u256();case"address":return Uu;default:return i.bcs}}function M(i){switch(i){case"u8":case"u16":case"u32":case"u64":case"u128":case"u256":case"bool":case"address":return i}switch(i.kind){case"PhantomReified":return i.phantomType;case"StructClassReified":return i.fullTypeName;case"VectorClassReified":return i.fullTypeName;case"EnumClassReified":return i.fullTypeName}throw new Error("unreachable")}function ee(i,n){switch(i){case"bool":case"u8":case"u16":case"u32":return n;case"u64":case"u128":case"u256":return BigInt(n);case"address":return`0x${n}`}if(i.kind==="VectorClassReified")return i.fromFields(n).elements;switch(i.typeName){case"0x1::string::String":case"0x1::ascii::String":return new TextDecoder().decode(Uint8Array.from(n.bytes)).toString();case"0x2::url::Url":return new TextDecoder().decode(Uint8Array.from(n.url.bytes)).toString();case"0x2::object::ID":return`0x${n.bytes}`;case"0x2::object::UID":return`0x${n.id.bytes}`;case"0x1::type_name::TypeName":return new TextDecoder().decode(Uint8Array.from(n.name.bytes)).toString();case"0x1::option::Option":return n.vec.length===0?null:i.fromFields(n).vec[0];default:return i.fromFields(n)}}function Q(i,n){switch(i){case"bool":case"u8":case"u16":case"u32":return n;case"u64":case"u128":case"u256":return BigInt(n);case"address":return n}if(i.kind==="VectorClassReified")return i.fromFieldsWithTypes(n).elements;switch(i.typeName){case"0x1::string::String":case"0x1::ascii::String":case"0x2::url::Url":case"0x2::object::ID":return n;case"0x2::object::UID":return n.id;case"0x1::type_name::TypeName":return n.fields.name;case"0x2::balance::Balance":return i.fromFields({value:BigInt(n)});case"0x1::option::Option":return n===null?null:Q(i.reifiedTypeArgs[0],n);default:return i.fromFieldsWithTypes(n)}}function wt(i,n,a){if(a.length!==n.length)throw new Error(`provided item has mismatching number of type argments ${i} (expected ${a.length}, got ${n.length}))`);for(let r=0;r<n.length;r++)if(X(n[r])!==X(M(a[r])))throw new Error(`provided item has mismatching type argments ${i} (expected ${M(a[r])}, got ${n[r]}))`)}function Jt(i,n){let{typeArgs:a}=me(i.type);wt(i.type,a,n)}function Sn(i,n){let{typeName:a,typeArgs:r}=me(i);switch(a){case"bool":return n;case"u8":case"u16":case"u32":return n;case"u64":case"u128":case"u256":return n.toString();case"address":case"signer":return n;case"vector":return n.map(o=>Sn(r[0],o));case"0x1::string::String":case"0x1::ascii::String":case"0x2::url::Url":case"0x2::object::ID":case"0x2::object::UID":case"0x1::type_name::TypeName":return n;case"0x1::option::Option":return n===null?null:Sn(r[0],n);default:return n.toJSONField()}}function K(i,n){switch(i){case"bool":case"u8":case"u16":case"u32":return n;case"u64":case"u128":case"u256":return BigInt(n);case"address":return n}if(i.kind==="VectorClassReified")return i.fromJSONField(n).elements;switch(i.typeName){case"0x1::string::String":case"0x1::ascii::String":case"0x2::url::Url":case"0x2::object::ID":case"0x2::object::UID":case"0x1::type_name::TypeName":return n;case"0x1::option::Option":return n===null?null:K(i.reifiedTypeArgs[0],n);default:return i.fromJSONField(n)}}function $a(i){return i=X(i),i==="0x1::string::String"}var Cr=class i{__StructClass=!0;static $typeName="0x1::string::String";static $numTypeParams=0;static $isPhantom=[];$typeName=i.$typeName;$fullTypeName;$typeArgs;$isPhantom=i.$isPhantom;bytes;constructor(n,a){this.$fullTypeName=ie(i.$typeName,...n),this.$typeArgs=n,this.bytes=a.bytes}static reified(){let n=i.bcs;return{get typeName(){return i.$typeName},get fullTypeName(){return ie(i.$typeName)},typeArgs:[],isPhantom:i.$isPhantom,reifiedTypeArgs:[],fromFields:a=>i.fromFields(a),fromFieldsWithTypes:a=>i.fromFieldsWithTypes(a),fromBcs:a=>i.fromFields(n.parse(a)),bcs:n,fromJSONField:a=>i.fromJSONField(a),fromJSON:a=>i.fromJSON(a),fromCoreObject:a=>i.fromCoreObject(a),fromSuiParsedData:a=>i.fromSuiParsedData(a),fromSuiObjectData:a=>i.fromSuiObjectData(a),fetch:async(a,r)=>i.fetch(a,r),new:a=>new i([],a),kind:"StructClassReified"}}static get r(){return i.reified()}static phantom(){return he(i.reified())}static get p(){return i.phantom()}static instantiateBcs(){return B.struct("String",{bytes:B.vector(B.u8())})}static cachedBcs=null;static get bcs(){return i.cachedBcs||(i.cachedBcs=i.instantiateBcs()),i.cachedBcs}static fromFields(n){return i.reified().new({bytes:ee(ra("u8"),n.bytes)})}static fromFieldsWithTypes(n){if(!$a(n.type))throw new Error("not a String type");return i.reified().new({bytes:Q(ra("u8"),n.fields.bytes)})}static fromBcs(n){return i.fromFields(i.bcs.parse(n))}toJSONField(){return{bytes:Sn("vector<u8>",this.bytes)}}toJSON(){return{$typeName:this.$typeName,$typeArgs:this.$typeArgs,...this.toJSONField()}}static fromJSONField(n){return i.reified().new({bytes:K(ra("u8"),n.bytes)})}static fromJSON(n){if(n.$typeName!==i.$typeName)throw new Error(`not a String json object: expected '${i.$typeName}' but got '${n.$typeName}'`);return i.fromJSONField(n)}static fromCoreObject(n){if(!$a(n.type))throw new Error(`object at ${n.objectId} is not a String object`);return i.fromBcs(n.content)}static fromSuiParsedData(n){if(n.dataType!=="moveObject")throw new Error("not an object");if(!$a(n.type))throw new Error(`object at ${n.fields.id} is not a String object`);return i.fromFieldsWithTypes(n)}static fromSuiObjectData(n){if(n.bcs){if(n.bcs.dataType!=="moveObject"||!$a(n.bcs.type))throw new Error("object at is not a String object");return i.fromBcs((0,ce.fromBase64)(n.bcs.bcsBytes))}if(n.content)return i.fromSuiParsedData(n.content);throw new Error("Both `bcs` and `content` fields are missing from the data. Include `showBcs` or `showContent` in the request.")}static async fetch(n,a){let{object:r}=await n.core.getObject({objectId:a,include:{content:!0}});if(!$a(r.type))throw new Error(`object at id ${a} is not a String object`);return i.fromBcs(r.content)}};function qa(i){return i=X(i),i==="0x2::object::ID"}var kn=class i{__StructClass=!0;static $typeName="0x2::object::ID";static $numTypeParams=0;static $isPhantom=[];$typeName=i.$typeName;$fullTypeName;$typeArgs;$isPhantom=i.$isPhantom;bytes;constructor(n,a){this.$fullTypeName=ie(i.$typeName,...n),this.$typeArgs=n,this.bytes=a.bytes}static reified(){let n=i.bcs;return{get typeName(){return i.$typeName},get fullTypeName(){return ie(i.$typeName)},typeArgs:[],isPhantom:i.$isPhantom,reifiedTypeArgs:[],fromFields:a=>i.fromFields(a),fromFieldsWithTypes:a=>i.fromFieldsWithTypes(a),fromBcs:a=>i.fromFields(n.parse(a)),bcs:n,fromJSONField:a=>i.fromJSONField(a),fromJSON:a=>i.fromJSON(a),fromCoreObject:a=>i.fromCoreObject(a),fromSuiParsedData:a=>i.fromSuiParsedData(a),fromSuiObjectData:a=>i.fromSuiObjectData(a),fetch:async(a,r)=>i.fetch(a,r),new:a=>new i([],a),kind:"StructClassReified"}}static get r(){return i.reified()}static phantom(){return he(i.reified())}static get p(){return i.phantom()}static instantiateBcs(){return B.struct("ID",{bytes:B.bytes(32).transform({input:n=>(0,ce.fromHex)(n),output:n=>(0,ce.toHex)(n)})})}static cachedBcs=null;static get bcs(){return i.cachedBcs||(i.cachedBcs=i.instantiateBcs()),i.cachedBcs}static fromFields(n){return i.reified().new({bytes:ee("address",n.bytes)})}static fromFieldsWithTypes(n){if(!qa(n.type))throw new Error("not a ID type");return i.reified().new({bytes:Q("address",n.fields.bytes)})}static fromBcs(n){return i.fromFields(i.bcs.parse(n))}toJSONField(){return{bytes:this.bytes}}toJSON(){return{$typeName:this.$typeName,$typeArgs:this.$typeArgs,...this.toJSONField()}}static fromJSONField(n){return i.reified().new({bytes:K("address",n.bytes)})}static fromJSON(n){if(n.$typeName!==i.$typeName)throw new Error(`not a ID json object: expected '${i.$typeName}' but got '${n.$typeName}'`);return i.fromJSONField(n)}static fromCoreObject(n){if(!qa(n.type))throw new Error(`object at ${n.objectId} is not a ID object`);return i.fromBcs(n.content)}static fromSuiParsedData(n){if(n.dataType!=="moveObject")throw new Error("not an object");if(!qa(n.type))throw new Error(`object at ${n.fields.id} is not a ID object`);return i.fromFieldsWithTypes(n)}static fromSuiObjectData(n){if(n.bcs){if(n.bcs.dataType!=="moveObject"||!qa(n.bcs.type))throw new Error("object at is not a ID object");return i.fromBcs((0,ce.fromBase64)(n.bcs.bcsBytes))}if(n.content)return i.fromSuiParsedData(n.content);throw new Error("Both `bcs` and `content` fields are missing from the data. Include `showBcs` or `showContent` in the request.")}static async fetch(n,a){let{object:r}=await n.core.getObject({objectId:a,include:{content:!0}});if(!qa(r.type))throw new Error(`object at id ${a} is not a ID object`);return i.fromBcs(r.content)}};function ei(i){return i=X(i),i==="0x2::object::UID"}var bt=class i{__StructClass=!0;static $typeName="0x2::object::UID";static $numTypeParams=0;static $isPhantom=[];$typeName=i.$typeName;$fullTypeName;$typeArgs;$isPhantom=i.$isPhantom;id;constructor(n,a){this.$fullTypeName=ie(i.$typeName,...n),this.$typeArgs=n,this.id=a.id}static reified(){let n=i.bcs;return{get typeName(){return i.$typeName},get fullTypeName(){return ie(i.$typeName)},typeArgs:[],isPhantom:i.$isPhantom,reifiedTypeArgs:[],fromFields:a=>i.fromFields(a),fromFieldsWithTypes:a=>i.fromFieldsWithTypes(a),fromBcs:a=>i.fromFields(n.parse(a)),bcs:n,fromJSONField:a=>i.fromJSONField(a),fromJSON:a=>i.fromJSON(a),fromCoreObject:a=>i.fromCoreObject(a),fromSuiParsedData:a=>i.fromSuiParsedData(a),fromSuiObjectData:a=>i.fromSuiObjectData(a),fetch:async(a,r)=>i.fetch(a,r),new:a=>new i([],a),kind:"StructClassReified"}}static get r(){return i.reified()}static phantom(){return he(i.reified())}static get p(){return i.phantom()}static instantiateBcs(){return B.struct("UID",{id:kn.bcs})}static cachedBcs=null;static get bcs(){return i.cachedBcs||(i.cachedBcs=i.instantiateBcs()),i.cachedBcs}static fromFields(n){return i.reified().new({id:ee(kn.reified(),n.id)})}static fromFieldsWithTypes(n){if(!ei(n.type))throw new Error("not a UID type");return i.reified().new({id:Q(kn.reified(),n.fields.id)})}static fromBcs(n){return i.fromFields(i.bcs.parse(n))}toJSONField(){return{id:this.id}}toJSON(){return{$typeName:this.$typeName,$typeArgs:this.$typeArgs,...this.toJSONField()}}static fromJSONField(n){return i.reified().new({id:K(kn.reified(),n.id)})}static fromJSON(n){if(n.$typeName!==i.$typeName)throw new Error(`not a UID json object: expected '${i.$typeName}' but got '${n.$typeName}'`);return i.fromJSONField(n)}static fromCoreObject(n){if(!ei(n.type))throw new Error(`object at ${n.objectId} is not a UID object`);return i.fromBcs(n.content)}static fromSuiParsedData(n){if(n.dataType!=="moveObject")throw new Error("not an object");if(!ei(n.type))throw new Error(`object at ${n.fields.id} is not a UID object`);return i.fromFieldsWithTypes(n)}static fromSuiObjectData(n){if(n.bcs){if(n.bcs.dataType!=="moveObject"||!ei(n.bcs.type))throw new Error("object at is not a UID object");return i.fromBcs((0,ce.fromBase64)(n.bcs.bcsBytes))}if(n.content)return i.fromSuiParsedData(n.content);throw new Error("Both `bcs` and `content` fields are missing from the data. Include `showBcs` or `showContent` in the request.")}static async fetch(n,a){let{object:r}=await n.core.getObject({objectId:a,include:{content:!0}});if(!ei(r.type))throw new Error(`object at id ${a} is not a UID object`);return i.fromBcs(r.content)}};function Wt(i,n,a){return i.moveCall({target:`${rt("utils",a?.env)}::bytes32::from_hex`,arguments:[mt(i,n,`${Cr.$typeName}`)]})}async function Ot(i,n,a=[]){let r=await i(n),o=a.concat(r.data);return r.hasNextPage&&r.nextCursor?Ot(i,r.nextCursor,o):o}var oa=class extends ke{constructor(a,r,o){super();this.nodeRpcUrlsConfig=a;this.params=r;this.api=o;this.client=new Zn({url:a.getNodeRpcUrl(this.chainSymbol),network:r.suiIsTestnet?"testnet":"mainnet"})}nodeRpcUrlsConfig;params;api;chainType="SUI";chainSymbol="SUI";client;send(){throw new f("Method send not implemented.")}async buildRawTransactionSwap(a){let r=a.sourceToken.suiAddresses;if(!r)throw new f("SUI token must contain 'suiAddresses'");rn(r.bridgeAddress,r.bridgeAddressOrigin);let o=tt(this.chainType,a);return await this.buildRawTransactionSwapFromParams(o,r)}async buildRawTransactionSwapFromParams(a,r){let{amount:o,fromAccountAddress:s,fromTokenAddress:d,toTokenAddress:c,minimumReceiveAmount:g}=a,l=new pt;l.setSender(s);let A={bridge:r.bridgeObjectAddress,coin:pe({balance:BigInt(o),type:d}),receiveAmountMin:BigInt(g)},u=Qc(l,[d,c],A),m=await Ot(y=>this.client.getCoins({owner:a.toAccountAddress,coinType:c,cursor:y}));return m.length===0||!m[0]?l.transferObjects([u],a.toAccountAddress):l.mergeCoins(m[0].coinObjectId,[u]),await l.toJSON({client:this.client})}async buildRawTransactionSendFromCustomTx(a,r,o){let s=pt.from(a);return this.buildRawTransactionSendFromTx(o,s,r)}async buildRawTransactionSend(a){return this.buildRawTransactionSendFromTx(a,new pt)}async buildRawTransactionSendFromTx(a,r,o){let s=await Ee(this.chainType,a,this.api),{messenger:d}=s,c=a.sourceToken.suiAddresses;if(!c)throw new f("SUI token must contain 'suiAddresses'");switch(rn(c.bridgeAddress,c.bridgeAddressOrigin),tg(c.utilsAddress),d){case 1:return this.buildRawTransactionAllbridgeSend(s,c,r,o);case 2:return this.buildRawTransactionWormholeSend(s,c,r,o);case 3:case 4:return this.buildRawTransactionCctpSend(a,s,c,r,o);case 6:throw new f("Messenger xReserve is not supported for SUI bridge");case 5:throw new Ze("Messenger OFT is not supported yet.")}}async buildRawTransactionAllbridgeSend(a,r,o,s){let{amount:d,fromAccountAddress:c,fromTokenAddress:g,toChainId:l,toAccountAddress:A,toTokenAddress:u,fee:m,gasFeePaymentMethod:y,extraGas:v}=a,C=m;switch(v&&(C=(0,Ir.Big)(C).plus(v).toFixed()),o.setSender(c),y){case"native":{let T=C==="0"?pe({balance:BigInt(C),useGasCoin:!1}):pe({balance:BigInt(C)}),Y={bridge:r.bridgeObjectAddress,messenger:r.allbridgeMessengerObjectAddress,amount:s??pe({balance:BigInt(d),type:g}),destinationChainId:l,nonce:Pt(),recipient:Wt(o,Ct(A)),receiveToken:Wt(o,Ct(u)),gasOracle:r.gasOracleObjectAddress,feeTokenCoin:pe({balance:BigInt(0),type:g}),feeSuiCoin:T};hs(o,g,Y);break}case"stablecoin":{let T=BigInt(d)-BigInt(C),Y,h;if(s){let[G]=o.splitCoins(s,[C]);Y=s,h=G}else Y=pe({balance:T,type:g}),h=pe({balance:BigInt(C),type:g});let F={bridge:r.bridgeObjectAddress,messenger:r.allbridgeMessengerObjectAddress,amount:Y,destinationChainId:l,nonce:Pt(),recipient:Wt(o,Ct(A)),receiveToken:Wt(o,Ct(u)),gasOracle:r.gasOracleObjectAddress,feeTokenCoin:h,feeSuiCoin:pe({balance:BigInt(0),useGasCoin:!1})};hs(o,g,F);break}case"abr":throw new f("SUI bridge does not support ABR payment method");default:return se(y,"Unhandled FeePaymentMethod")}return await o.toJSON({client:this.client})}async buildRawTransactionWormholeSend(a,r,o,s){let{amount:d,fromAccountAddress:c,fromTokenAddress:g,toChainId:l,toAccountAddress:A,toTokenAddress:u,fee:m,gasFeePaymentMethod:y,extraGas:v}=a,C=m;switch(v&&(C=(0,Ir.Big)(C).plus(v).toFixed()),o.setSender(c),y){case"native":{let T=C==="0"?pe({balance:BigInt(C),useGasCoin:!1}):pe({balance:BigInt(C)}),Y={bridge:r.bridgeObjectAddress,messenger:r.wormholeMessengerObjectAddress,wormholeState:r.wormholeStateObjectAddress,theClock:ta,amount:s??pe({balance:BigInt(d),type:g}),destinationChainId:l,nonce:Pt(),recipient:Wt(o,Ct(A)),receiveToken:Wt(o,Ct(u)),gasOracle:r.gasOracleObjectAddress,feeTokenCoin:pe({balance:BigInt(0),type:g}),feeSuiCoin:T};vs(o,g,Y);break}case"stablecoin":{let T=BigInt(d)-BigInt(C),Y,h;if(s){let[G]=o.splitCoins(s,[C]);Y=s,h=G}else Y=pe({balance:T,type:g}),h=pe({balance:BigInt(C),type:g});let F={bridge:r.bridgeObjectAddress,messenger:r.wormholeMessengerObjectAddress,wormholeState:r.wormholeStateObjectAddress,theClock:ta,amount:Y,destinationChainId:l,nonce:Pt(),recipient:Wt(o,Ct(A)),receiveToken:Wt(o,Ct(u)),gasOracle:r.gasOracleObjectAddress,feeTokenCoin:h,feeSuiCoin:pe({balance:BigInt(0),useGasCoin:!1})};vs(o,g,F);break}case"abr":throw new f("SUI bridge does not support ABR payment method");default:return se(y,"Unhandled FeePaymentMethod")}return await o.toJSON({client:this.client})}async buildRawTransactionCctpSend(a,r,o,s,d){let{amount:c,fromAccountAddress:g,fromTokenAddress:l,toChainId:A,toAccountAddress:u,fee:m,gasFeePaymentMethod:y,extraGas:v}=r;eg(o.cctpAddress,o.cctpAddressOrigin);let C=m;v&&(C=(0,Ir.Big)(C).plus(v).toFixed()),s.setSender(g);let T=Wt(s,Ct(u)),Y;if(a.destinationToken.chainType==="SOLANA"){let h=await Hi(this.chainType,a.toAccountAddress,a.destinationToken.tokenAddress,this.nodeRpcUrlsConfig.getNodeRpcUrl("SOL"));Y=Wt(s,Ct(h))}else Y=T;switch(y){case"native":{let h=C==="0"?pe({balance:BigInt(C),useGasCoin:!1}):pe({balance:BigInt(C)}),F={cctpBridge:o.cctpObjectAddress,tokenMessengerMinterState:o.cctpTokenMessengerMinterStateObjectAddress,messageTransmitterState:o.cctpMessageTransmitterStateObjectAddress,treasury:o.cctpTreasuryObjectAddress,denyList:o.cctpDenyListObjectAddress,amount:d??pe({balance:BigInt(c),type:l}),destinationChainId:A,recipient:Y,recipientWalletAddress:T,gasOracle:o.gasOracleObjectAddress,feeTokenCoin:pe({balance:BigInt(0),type:l}),feeSuiCoin:h};fs(s,l,F);break}case"stablecoin":{let h=BigInt(c)-BigInt(C),F,G;if(d){let[k]=s.splitCoins(d,[C]);F=d,G=k}else F=pe({balance:h,type:l}),G=pe({balance:BigInt(C),type:l});let N={cctpBridge:o.cctpObjectAddress,tokenMessengerMinterState:o.cctpTokenMessengerMinterStateObjectAddress,messageTransmitterState:o.cctpMessageTransmitterStateObjectAddress,treasury:o.cctpTreasuryObjectAddress,denyList:o.cctpDenyListObjectAddress,amount:F,destinationChainId:A,recipient:Y,recipientWalletAddress:T,gasOracle:o.gasOracleObjectAddress,feeTokenCoin:G,feeSuiCoin:pe({balance:BigInt(0),useGasCoin:!1})};fs(s,l,N);break}case"abr":throw new f("SUI bridge does not support ABR payment method");default:return se(y,"Unhandled FeePaymentMethod")}return await s.toJSON({client:this.client})}};var ig=require("big.js");var ng=Ft(require("bn.js"));function hr(i){return"0x"+new ng.default(i).toString("hex")}function ag(i){return new Promise(n=>setTimeout(()=>n(),i))}async function vr(i,n){let a=await i.trx.sign(n);if(!a.signature)throw new fn("Transaction was not signed properly");let o=(await i.trx.sendRawTransaction(a)).transaction.txID;return await Du(i,o),{txId:o}}async function Du(i,n,a=1e4){let r=Date.now();for(;;){if(Date.now()-r>a)throw new Mn("Transaction not found");let o=await i.trx.getUnconfirmedTransactionInfo(n);if(!o?.receipt){await ag(2e3);continue}if(o.receipt.result==="SUCCESS")return o;throw new Mn(`Transaction status is ${o.receipt.result}`)}}var ti=class extends ke{constructor(a,r){super();this.tronWeb=a;this.api=r}tronWeb;api;chainType="TRX";async send(a){let r=await Ee(this.chainType,a,this.api),o=await this.buildRawTransactionSendFromParams(a,r);return await vr(this.tronWeb,o)}async buildRawTransactionSwap(a){let r=tt(this.chainType,a);return await this.buildRawTransactionSwapFromParams(r)}async buildRawTransactionSwapFromParams(a){let{amount:r,contractAddress:o,fromAccountAddress:s,fromTokenAddress:d,toAccountAddress:c,toTokenAddress:g,minimumReceiveAmount:l}=a,A=[{type:"uint256",value:r},{type:"bytes32",value:d},{type:"bytes32",value:g},{type:"address",value:c},{type:"uint256",value:l}];return this.buildRawTransaction(o,"swap(uint256,bytes32,bytes32,address,uint256)",A,"0",s)}async buildRawTransactionSend(a){let r=await Ee(this.chainType,a,this.api);return this.buildRawTransactionSendFromParams(a,r)}async buildRawTransactionSendFromParams(a,r){let{amount:o,contractAddress:s,fromAccountAddress:d,fromTokenAddress:c,toChainId:g,toAccountAddress:l,toTokenAddress:A,messenger:u,fee:m,gasFeePaymentMethod:y,extraGas:v,extraGasDest:C}=r,T=m;v&&(T=(0,ig.Big)(T).plus(v).toFixed());let Y=Pt().toString(),h,F,G;switch(u){case 3:case 4:switch(y){case"native":{h=[{type:"uint256",value:o},{type:"bytes32",value:l},{type:"uint256",value:g},{type:"uint256",value:0}],F=T;break}case"stablecoin":{h=[{type:"uint256",value:o},{type:"bytes32",value:l},{type:"uint256",value:g},{type:"uint256",value:T}],F="0";break}case"abr":throw new f("TRX bridge does not support ABR payment method");default:return se(y,"Unhandled FeePaymentMethod")}G="bridge(uint256,bytes32,uint256,uint256)";break;case 5:switch(y){case"native":{h=[{type:"address",value:a.sourceToken.tokenAddress},{type:"uint256",value:o},{type:"bytes32",value:l},{type:"uint256",value:g},{type:"uint256",value:0},{type:"uint256",value:C??"0"},{type:"uint256",value:"10"}],F=T;break}case"stablecoin":{h=[{type:"address",value:a.sourceToken.tokenAddress},{type:"uint256",value:o},{type:"bytes32",value:l},{type:"uint256",value:g},{type:"uint256",value:T},{type:"uint256",value:C??"0"},{type:"uint256",value:"10"}],F="0";break}case"abr":throw new f("TRX bridge does not support ABR payment method");default:return se(y,"Unhandled FeePaymentMethod")}G="bridge(address,uint256,bytes32,uint256,uint256,uint256,uint256)";break;case 6:throw new f("Messenger xReserve is not supported for TRX bridge");case 1:case 2:switch(y){case"native":{h=[{type:"bytes32",value:c},{type:"uint256",value:o},{type:"bytes32",value:l},{type:"uint256",value:g},{type:"bytes32",value:A},{type:"uint256",value:Y},{type:"uint8",value:u},{type:"uint256",value:0}],F=T;break}case"stablecoin":{h=[{type:"bytes32",value:c},{type:"uint256",value:o},{type:"bytes32",value:l},{type:"uint256",value:g},{type:"bytes32",value:A},{type:"uint256",value:Y},{type:"uint8",value:u},{type:"uint256",value:T}],F="0";break}case"abr":throw new f("TRX bridge does not support ABR payment method");default:return se(y,"Unhandled FeePaymentMethod")}G="swapAndBridge(bytes32,uint256,bytes32,uint256,bytes32,uint256,uint8,uint256)";break}return this.buildRawTransaction(s,G,h,F,d)}async buildRawTransaction(a,r,o,s,d){let c=await this.tronWeb.transactionBuilder.triggerSmartContract(a,r,{callValue:+s},o,d);if(!c?.result?.result)throw new f("Unknown error: "+JSON.stringify(c,null,2));return c.transaction}};var fr=class{constructor(n,a,r,o){this.api=n;this.nodeRpcUrlsConfig=a;this.params=r;this.tokenService=o;this.rawTxBuilder=new Ji(n,a,r,o)}api;nodeRpcUrlsConfig;params;tokenService;rawTxBuilder;async getAllowance(n,a){let r,o;a?(r=n,o=a):o=n;let s=xa(o.token,o.messenger,o.gasFeePaymentMethod);return await this.tokenService.getAllowance({...o,spender:s},r)}async checkAllowance(n,a){let r,o;a?(r=n,o=a):o=n;let s=xa(o.token,o.messenger,o.gasFeePaymentMethod);return this.tokenService.checkAllowance({...o,spender:s},r)}async approve(n,a){let r=xa(a.token,a.messenger,a.gasFeePaymentMethod);return this.tokenService.approve(n,{...a,spender:r})}async send(n,a){return D(a.amount),O("amount",a.amount,a.sourceToken.decimals),Oi(a.sourceToken.chainSymbol,this.api,this.nodeRpcUrlsConfig,this.params,n).send(a)}};function xa(i,n=1,a="native"){if(a==="abr"){if(i.abrPayer)return i.abrPayer.payerAddress;throw new f("Token must contain 'abrPayer' for ABR payment method")}switch(n){case 3:if(i.cctpAddress)return i.cctpAddress;throw new we("Such route does not support CCTP protocol");case 4:if(i.cctpV2Address)return i.cctpV2Address;throw new we("Such route does not support CCTP V2 protocol");case 5:if(i.oftBridgeAddress)return i.oftBridgeAddress;throw new Ze("Such route does not support OFT protocol");case 6:if(i.xReserve?.bridgeAddress)return i.xReserve.bridgeAddress;throw new f("Such route does not support xReserve protocol");case 1:case 2:return i.bridgeAddress}}function Oi(i,n,a,r,o){switch(x.getChainProperty(i).chainType){case"EVM":{if(o)return new La(o,n,a);{let s=a.getNodeRpcUrl(i);return new La(new og.Web3(s),n,a)}}case"TRX":{if(o)return new ti(o,n);{let s=a.getNodeRpcUrl(i);return new ti(new rg.TronWeb({fullHost:s,solidityNode:s,eventServer:s}),n)}}case"SOLANA":return new $i(a.getNodeRpcUrl("SOL"),{wormholeMessengerProgramId:r.wormholeMessengerProgramId,solanaLookUpTable:r.solanaLookUpTable,cctpParams:r.cctpParams,jupiterParams:{jupiterUrl:r.jupiterUrl,jupiterApiKeyHeader:r.jupiterApiKeyHeader,jupiterMaxAccounts:r.jupiterMaxAccounts}},n);case"SRB":return new er(a,r,n);case"SUI":return new oa(a,r,n);case"ALG":if(o){let s=o,d=Ts.AlgorandClient.fromClients({algod:s});return new Xa(d,n)}else{let s=a.getNodeRpcUrl(i),d=Ts.AlgorandClient.fromConfig({algodConfig:{server:s}});return new Xa(d,n)}case"STX":{let s=a.getNodeRpcUrl(i);return new tr(s,r,n)}}}var Ws=require("@algorandfoundation/algokit-utils"),hg=require("big.js");var Qu=(i,n)=>i!==null&&Object.prototype.hasOwnProperty.call(i,n),sg="__cache__",Bs=function(i){return typeof i!="string"?sg+JSON.stringify(i):sg+i},Ys=class{constructor(n={defaultTtl:60*1e3}){this.cache={},this.defaultTtl=n.defaultTtl||60*1e3}put(n,a,r){let o=(r?r.ttl:void 0)||this.defaultTtl,s=(r?r.callback:void 0)||function(){},d=Bs(n),c=this.cache[d];c&&clearTimeout(c.handle);let g=setTimeout(()=>this.remove(n),o);this.cache[d]={handle:g,data:a,callback:s}}get(n){let a=this.cache[Bs(n)];return a&&a.data}remove(n){let a=Bs(n),r=this.cache[a];r&&(clearTimeout(r.handle),delete this.cache[a],r.callback(n,r.data))}clear(){for(let n in this.cache)Qu(this.cache,n)&&clearTimeout(this.cache[n].handle);this.cache={}}size(){return Object.keys(this.cache).length}},on=Ys;var vg=require("tronweb"),ga=require("web3");var zt=require("big.js");function dg(i,n,a,r,o){let s=j(i,3),d=(0,zt.Big)(s),c=(0,zt.Big)(a),g=(0,zt.Big)(r).plus(o),l,A;if(c.eq(0)||g.eq(0)){let m=d.div(2);l=(0,zt.Big)(r).plus(m),A=(0,zt.Big)(o).plus(m)}else l=(0,zt.Big)(r).plus(d.mul(r).div(g)),A=(0,zt.Big)(o).plus(d.mul(o).div(g));return(0,zt.Big)(Ds(n,l.toFixed(),A.toFixed())).minus(c).toFixed()}function cg(i){let n=j(i,3);return(0,zt.Big)(n).round().toFixed()}var sn=require("algosdk");var gg=require("@algorandfoundation/algokit-utils/types/app-arc56"),ni=require("@algorandfoundation/algokit-utils/types/app-client"),Ku=require("@algorandfoundation/algokit-utils/types/app-factory"),lg=require("algosdk"),Rr={name:"Pool",structs:{},methods:[{name:"createApplication",args:[{type:"address",name:"owner"},{type:"address",name:"router"},{type:"uint64",name:"a"},{type:"uint64",name:"asset"},{type:"uint64",name:"feeShareBP"},{type:"uint64",name:"balanceRatioMinBP"}],returns:{type:"void"},actions:{create:["NoOp"],call:[]},readonly:!1,events:[],recommendations:{}},{name:"optInToApplication",args:[],returns:{type:"void"},actions:{create:[],call:["OptIn"]},readonly:!1,events:[],recommendations:{}},{name:"closeOutOfApplication",args:[{type:"uint64",name:"budget",defaultValue:{source:"literal",data:"AAAAAAAAC7g=",type:"uint64"}}],returns:{type:"void"},actions:{create:[],call:["CloseOut"]},readonly:!1,events:[{name:"RewardsClaimed",args:[{type:"address",name:"user"},{type:"uint64",name:"pending"}]},{name:"Withdraw",args:[{type:"address",name:"from"},{type:"uint64",name:"lpAmount"}]}],recommendations:{}},{name:"optInAsset",args:[],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,desc:"Opt-in the application account to the ASA stored in `this.asset`.\nThis performs an inner axfer of 0 to the app's own address.\nCall once after deploy (or whenever you change the asset).",events:[],recommendations:{}},{name:"deposit",args:[{type:"axfer",name:"assetTransferRef"},{type:"uint64",name:"budget",defaultValue:{source:"literal",data:"AAAAAAAAC7g=",type:"uint64"}}],returns:{type:"void"},actions:{create:[],call:["NoOp","OptIn"]},readonly:!1,events:[{name:"RewardsClaimed",args:[{type:"address",name:"user"},{type:"uint64",name:"pending"}]},{name:"Deposit",args:[{type:"address",name:"to"},{type:"uint64",name:"lpAmount"}]}],recommendations:{}},{name:"withdraw",args:[{type:"uint64",name:"amountLp",desc:"The Withdrawn amount"},{type:"uint64",name:"budget",defaultValue:{source:"literal",data:"AAAAAAAAC7g=",type:"uint64"}}],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[{name:"RewardsClaimed",args:[{type:"address",name:"user"},{type:"uint64",name:"pending"}]},{name:"Withdraw",args:[{type:"address",name:"from"},{type:"uint64",name:"lpAmount"}]}],recommendations:{}},{name:"swapToVUsd",args:[{type:"address",name:"user",desc:"The address of the sender."},{type:"uint64",name:"amount",desc:"The amount of tokens to swap."},{type:"bool",name:"zeroFee",desc:`When true it allows to swap without incurring any fees. It is intended for use with service
1
+ "use strict";var Ug=Object.create;var fi=Object.defineProperty;var Dg=Object.getOwnPropertyDescriptor;var Qg=Object.getOwnPropertyNames;var Kg=Object.getPrototypeOf,Eg=Object.prototype.hasOwnProperty;var fa=(i,n)=>{for(var a in n)fi(i,a,{get:n[a],enumerable:!0})},Xs=(i,n,a,r)=>{if(n&&typeof n=="object"||typeof n=="function")for(let o of Qg(n))!Eg.call(i,o)&&o!==a&&fi(i,o,{get:()=>n[o],enumerable:!(r=Dg(n,o))||r.enumerable});return i};var Ft=(i,n,a)=>(a=i!=null?Ug(Kg(i)):{},Xs(n||!i||!i.__esModule?fi(a,"default",{value:i,enumerable:!0}):a,i)),_g=i=>Xs(fi({},"__esModule",{value:!0}),i);var Wp={};fa(Wp,{AddressStatus:()=>Ri,AllbridgeCoreSdk:()=>Ps,AmountFormat:()=>Pa,AmountNotEnoughError:()=>Gt,ArgumentInvalidDecimalsError:()=>Ya,CCTPDoesNotSupportedError:()=>we,ChainSymbol:()=>et,ChainType:()=>U,ErrorCode:()=>js,ExtraGasMaxLimitExceededError:()=>Ba,FeePaymentMethod:()=>gt,InsufficientPoolLiquidityError:()=>Zt,InvalidAmountError:()=>yt,InvalidGasFeePaymentOptionError:()=>Ut,InvalidMessengerOptionError:()=>Ta,InvalidTxError:()=>Rn,JupiterError:()=>Ge,Messenger:()=>Je,MethodNotSupportedError:()=>J,NodeRpcUrlNotInitializedError:()=>wa,OFTDoesNotSupportedError:()=>Ze,SdkError:()=>f,SdkRootError:()=>Ce,SolanaAutoTxFee:()=>Ui,TimeoutError:()=>xn,TxTooLargeError:()=>Na,VerifyTxError:()=>Ln,YieldDoesNotSupportedError:()=>Wa,assertYieldIsSupported:()=>Yg,isYieldSupported:()=>bi,mainnet:()=>Ra,nodeRpcUrlsDefault:()=>qg,nodeUrlsDefault:()=>$g});module.exports=_g(Wp);var Ra={coreApiUrl:"https://core.api.allbridgecoreapi.net",coreApiQueryParams:{},coreApiHeaders:{},jupiterUrl:"https://lite-api.jup.ag/swap/v1",wormholeMessengerProgramId:"worm2ZoG2kUd4vFXhvjh93UUH596ayRfgQ2MgjNMTth",solanaLookUpTable:"2JcBAEVnAwVo4u8d61iqgHPrzZuugur7cVTjWubsVLHj",sorobanNetworkPassphrase:"Public Global Stellar Network ; September 2015",tronJsonRpc:"https://api.trongrid.io/jsonrpc",cctpParams:{cctpTransmitterProgramId:"CCTPmbSD7gX1bxKPAmg77w8oFzNFpaQiQUWD43TKaecd",cctpTokenMessengerMinter:"CCTPiPYPc6AsJuwueEnWgSgucamXDZwBd53dQ11YiKX3",cctpV2TransmitterProgramId:"CCTPV2Sm4AdWt5296sk4P66VBZ7bEhcARwFaaS9YPbeC",cctpV2TokenMessengerMinter:"CCTPV2vPZJS2u2BBsUoscuikbYjnpFmbFsvVuJdgUMQe",cctpDomains:{ETH:0,AVA:1,OPT:2,ARB:3,SOL:5,BAS:6,POL:7,SUI:8}},cachePoolInfoChainSec:20},$g={solanaRpcUrl:"https://api.mainnet-beta.solana.com",tronRpcUrl:"https://api.trongrid.io"},qg={SOL:"https://api.mainnet-beta.solana.com",TRX:"https://api.trongrid.io",SRB:"https://rpc.stellar.org:443",STLR:"https://horizon.stellar.org",SUI:"https://fullnode.mainnet.sui.io",STX:"https://api.hiro.so"};var Ys=require("@algorandfoundation/algokit-utils"),gg=require("tronweb"),lg=require("web3");var Ce=class extends Error{errorCode;constructor(n,a){super(a),this.errorCode=n}},f=class extends Ce{constructor(n){super("SdkError",n)}},yt=class extends Ce{constructor(n){super("InvalidAmountError",n)}},Gt=class extends Ce{constructor(n){super("AmountNotEnoughError",n)}},Zt=class extends Ce{constructor(n){super("InsufficientPoolLiquidityError",n)}},Ge=class extends Ce{constructor(n){super("JupiterError",n)}},Ut=class extends Ce{constructor(n){super("InvalidGasFeePaymentOptionError",n)}},Ta=class extends Ce{constructor(n){super("InvalidMessengerOptionError",n)}},J=class extends Ce{constructor(n){super("MethodNotSupportedError",n)}},Ln=class extends Ce{constructor(n){super("VerifyTxError",n)}},Rn=class extends Ce{constructor(n){super("InvalidTxError",n)}},Ba=class extends Ce{constructor(n){super("ExtraGasMaxLimitExceededError",n)}},Ya=class extends Ce{constructor(n,a,r){super("ArgumentInvalidDecimalsError",`Argument '${n}' decimals '${a}' cannot be greater than '${r}'`)}},xn=class extends Ce{constructor(n){super("TimeoutError",n)}},wa=class extends Ce{constructor(n){super("NodeRpcUrlNotInitializedError",`For chain '${n}' Node RPC URL not initialized`)}},we=class extends Ce{constructor(n){super("CCTPDoesNotSupportedError",n)}},Ze=class extends Ce{constructor(n){super("OFTDoesNotSupportedError",n)}},Wa=class extends Ce{constructor(n){super("YieldDoesNotSupportedError",n)}},Na=class extends Ce{constructor(){super("TxTooLargeError","Transaction too large: try again later or switch to another messenger or pay relayer fee in native gas currency")}},js=(h=>(h.SDK_ERROR="SdkError",h.INVALID_AMOUNT_ERROR="InvalidAmountError",h.AMOUNT_NOT_ENOUGH_ERROR="AmountNotEnoughError",h.INSUFFICIENT_POOL_LIQUIDITY_ERROR="InsufficientPoolLiquidityError",h.JUPITER_ERROR="JupiterError",h.INVALID_GAS_FEE_PAYMENT_OPTION_ERROR="InvalidGasFeePaymentOptionError",h.INVALID_MESSENGER_OPTION_ERROR="InvalidMessengerOptionError",h.METHOD_NOT_SUPPORTED_ERROR="MethodNotSupportedError",h.VERIFY_TX_ERROR="VerifyTxError",h.INVALID_TX_ERROR="InvalidTxError",h.EXTRA_GAS_MAX_LIMIT_EXCEEDED_ERROR="ExtraGasMaxLimitExceededError",h.ARGUMENT_INVALID_DECIMALS_ERROR="ArgumentInvalidDecimalsError",h.TIMEOUT_ERROR="TimeoutError",h.NODE_RPC_URL_NOT_INITIALIZED_ERROR="NodeRpcUrlNotInitializedError",h.CCTP_DOES_NOT_SUPPORTED_ERROR="CCTPDoesNotSupportedError",h.OFT_DOES_NOT_SUPPORTED_ERROR="OFTDoesNotSupportedError",h.YIELD_DOES_NOT_SUPPORTED_ERROR="YieldDoesNotSupportedError",h.TX_TOO_LARGE="TxTooLargeError",h))(js||{});var et=(h=>(h.BSC="BSC",h.ETH="ETH",h.BAS="BAS",h.SOL="SOL",h.TRX="TRX",h.POL="POL",h.ARB="ARB",h.CEL="CEL",h.AVA="AVA",h.SRB="SRB",h.STLR="STLR",h.OPT="OPT",h.SUI="SUI",h.SNC="SNC",h.UNI="UNI",h.LIN="LIN",h.ALG="ALG",h.STX="STX",h))(et||{}),U=(d=>(d.EVM="EVM",d.SOLANA="SOLANA",d.TRX="TRX",d.SRB="SRB",d.SUI="SUI",d.ALG="ALG",d.STX="STX",d))(U||{});var el={EVM:18,SOLANA:9,TRX:6,SRB:7,SUI:9,ALG:6,STX:6},tl={BSC:{chainSymbol:"BSC",chainId:"0x38",name:"BNB Chain",chainType:"EVM"},ETH:{chainSymbol:"ETH",chainId:"0x1",name:"Ethereum",chainType:"EVM"},BAS:{chainSymbol:"BAS",chainId:"0x2105",name:"Base",chainType:"EVM"},ARB:{chainSymbol:"ARB",chainId:"0xa4b1",name:"Arbitrum",chainType:"EVM"},AVA:{chainSymbol:"AVA",chainId:"0xa86a",name:"Avalanche",chainType:"EVM"},CEL:{chainSymbol:"CEL",chainId:"0xa4ec",name:"Celo",chainType:"EVM"},POL:{chainSymbol:"POL",chainId:"0x89",name:"Polygon",chainType:"EVM"},OPT:{chainSymbol:"OPT",chainId:"0xa",name:"OP Mainnet",chainType:"EVM"},SNC:{chainSymbol:"SNC",chainId:"0x92",name:"Sonic",chainType:"EVM"},UNI:{chainSymbol:"UNI",chainId:"0x82",name:"Unichain",chainType:"EVM"},LIN:{chainSymbol:"LIN",chainId:"0xe708",name:"Linea",chainType:"EVM"},SOL:{chainSymbol:"SOL",name:"Solana",chainType:"SOLANA"},TRX:{chainSymbol:"TRX",name:"Tron",chainType:"TRX"},SRB:{chainSymbol:"SRB",name:"Stellar",chainType:"SRB"},STLR:{chainSymbol:"STLR",name:"Stellar",chainType:"SRB"},SUI:{chainSymbol:"SUI",name:"Sui",chainType:"SUI"},ALG:{chainSymbol:"ALG",name:"Algorand",chainType:"ALG"},STX:{chainSymbol:"STX",name:"Stacks",chainType:"STX"}},x=(()=>{let i={...tl};return{addChainsProperties(n){i={...i,...n}},getChainProperty(n){let a=i[n];if(!a)throw new f(`Cannot find chain properties for ${n}`);return a},getChainsProperties(){return i},getChainDecimalsByType(n){return el[n]}}})();var Ri=(c=>(c.OK="OK",c.INVALID="INVALID",c.FORBIDDEN="FORBIDDEN",c.UNINITIALIZED="UNINITIALIZED",c.CONTRACT_ADDRESS="CONTRACT_ADDRESS",c.WRONG_ASSOCIATED_ACCOUNT_OWNER="WRONG_ASSOCIATED_ACCOUNT_OWNER",c))(Ri||{}),to=(c=>(c.ALLBRIDGE="allbridge",c.WORMHOLE="wormhole",c.CCTP="cctp",c.CCTP_V2="cctpV2",c.OFT="oft",c.X_RESERVE="xReserve",c))(to||{}),Je=(c=>(c[c.ALLBRIDGE=1]="ALLBRIDGE",c[c.WORMHOLE=2]="WORMHOLE",c[c.CCTP=3]="CCTP",c[c.CCTP_V2=4]="CCTP_V2",c[c.OFT=5]="OFT",c[c.X_RESERVE=6]="X_RESERVE",c))(Je||{});var Ti=require("big.js");function se(i,n){throw new Error(n??`Unexpected value: ${i}`)}async function Se(i,n){return await i.getPoolInfoByKey({chainSymbol:n.chainSymbol,poolAddress:n.poolAddress})}function D(i){if((0,Ti.Big)(i).lte(0))throw new yt("Amount must be greater than zero")}function no(i){if((0,Ti.Big)(i).lt(0))throw new yt("Amount must be greater or equal than zero")}function O(i,n,a){let r=(0,Ti.Big)(n).toFixed(),[o,s]=r.split(".");if(s&&s.length>a)throw new Ya(i,s.length,a)}async function Bi(i,n,a){return await Promise.race([i,new Promise((r,o)=>{setTimeout(()=>o(new xn(n)),a)})])}async function ao(i,n,a,r){if(a<1)throw new Error(`Bad argument: 'maxRetries' must be greater than 0, but ${a} was received.`);let o=0;for(;;)try{return await Bi(i(),n,r)}catch{if(++o>=a)throw new xn(n)}}async function Ms(i,n,a,r=1.5,o=!1){let s=[],c=0,d=await i();if(s.push(d),!n(d))return s;let g=new Date(Date.now()+a*1e3).valueOf(),l=1e3,A=l;for(;Date.now()<g;){let u=s[s.length-1];if(u===void 0||!n(u))break;c++,o&&console.info(`Waiting ${l}ms before trying again (bringing the total wait time to ${A}ms so far, of total ${a*1e3}ms)`),await new Promise(y=>setTimeout(y,l)),l=l*r,new Date(Date.now()+l).valueOf()>g&&(l=g-Date.now(),o&&console.info(`was gonna wait too long; new waitTime: ${l}ms`)),A=l+A;let m=await i(u);s.push(m),o&&n(m)&&console.info(`${c}. Called ${i.name}; ${s.length} prev attempts. Most recent: ${JSON.stringify(s[s.length-1],null,2)}`)}return s}var ec=require("@algorandfoundation/algokit-utils/types/account"),tc=require("@algorandfoundation/algokit-utils/types/amount"),Xa=Ft(require("algosdk"));var Ls=require("@algorandfoundation/algokit-utils/types/app-arc56"),Fa=require("@algorandfoundation/algokit-utils/types/app-client"),nl=require("@algorandfoundation/algokit-utils/types/app-factory"),Yi={name:"Bridge",structs:{},methods:[{name:"createApplication",args:[{type:"address",name:"owner"},{type:"byte",name:"chainId"},{type:"uint64",name:"messenger"},{type:"uint64",name:"gasOracle"}],returns:{type:"void"},actions:{create:["NoOp"],call:[]},readonly:!1,events:[],recommendations:{}},{name:"optInAsset",args:[{type:"uint64",name:"asset"}],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[],recommendations:{}},{name:"swapAndBridge",args:[{type:"pay",name:"paymentRef"},{type:"axfer",name:"assetTransferRef"},{type:"byte[32]",name:"recipient"},{type:"byte",name:"destinationChainId"},{type:"byte[32]",name:"receiveToken"},{type:"byte[32]",name:"nonce"},{type:"uint64",name:"budget",defaultValue:{source:"literal",data:"AAAAAAAAA+g=",type:"uint64"}}],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[{name:"BridgingFeeFromTokens",args:[{type:"uint64",name:"feeFromNative"},{type:"uint64",name:"feeFromStable"},{type:"uint64",name:"feeStableTokenAmount"}]},{name:"ReceiveFee",args:[{type:"uint64",name:"bridgeTransactionCost"},{type:"uint64",name:"messageTransactionCost"}]},{name:"TokensSent",args:[{type:"uint64",name:"amount"},{type:"byte[32]",name:"recipient"},{type:"byte",name:"destinationChainId"},{type:"byte[32]",name:"receiveToken"},{type:"byte[32]",name:"nonce"},{type:"byte",name:"messenger"}]}],recommendations:{}},{name:"swapAndBridgeWithStable",args:[{type:"axfer",name:"assetTransferRef"},{type:"byte[32]",name:"recipient"},{type:"byte",name:"destinationChainId"},{type:"byte[32]",name:"receiveToken"},{type:"byte[32]",name:"nonce"},{type:"uint64",name:"feeTokenAmount"},{type:"uint64",name:"budget",defaultValue:{source:"literal",data:"AAAAAAAAA+g=",type:"uint64"}}],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[{name:"BridgingFeeFromTokens",args:[{type:"uint64",name:"feeFromNative"},{type:"uint64",name:"feeFromStable"},{type:"uint64",name:"feeStableTokenAmount"}]},{name:"ReceiveFee",args:[{type:"uint64",name:"bridgeTransactionCost"},{type:"uint64",name:"messageTransactionCost"}]},{name:"TokensSent",args:[{type:"uint64",name:"amount"},{type:"byte[32]",name:"recipient"},{type:"byte",name:"destinationChainId"},{type:"byte[32]",name:"receiveToken"},{type:"byte[32]",name:"nonce"},{type:"byte",name:"messenger"}]}],recommendations:{}},{name:"receiveTokens",args:[{type:"pay",name:"paymentRef"},{type:"uint64",name:"amount"},{type:"byte[32]",name:"recipient"},{type:"byte",name:"sourceChainId"},{type:"byte[32]",name:"receiveToken"},{type:"byte[32]",name:"nonce"},{type:"uint64",name:"receiveAmountMin"}],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[{name:"TokensReceived",args:[{type:"uint64",name:"receiveAmount"},{type:"address",name:"recipient"},{type:"byte[32]",name:"nonce"},{type:"byte",name:"messenger"},{type:"byte[32]",name:"message"}]}],recommendations:{}},{name:"registerBridge",args:[{type:"byte",name:"chainId"},{type:"byte[32]",name:"bridgeAddress"}],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[],recommendations:{}},{name:"addBridgeToken",args:[{type:"byte",name:"chainId"},{type:"byte[32]",name:"tokenAddress"}],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[],recommendations:{}},{name:"removeBridgeToken",args:[{type:"byte",name:"chainId"},{type:"byte[32]",name:"tokenAddress"}],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[],recommendations:{}},{name:"withdrawGasTokens",args:[{type:"uint64",name:"amount"}],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[],recommendations:{}},{name:"withdrawBridgingFeeInTokens",args:[{type:"uint64",name:"asset"}],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[],recommendations:{}},{name:"getBridgingCostInTokens",args:[{type:"byte",name:"destinationChainId"},{type:"uint64",name:"asset"}],returns:{type:"uint64"},actions:{create:[],call:["NoOp"]},readonly:!0,events:[],recommendations:{}},{name:"hashMessage",args:[{type:"uint64",name:"amount"},{type:"byte[32]",name:"recipient"},{type:"byte",name:"sourceChainId"},{type:"byte",name:"destinationChainId"},{type:"byte[32]",name:"receiveToken"},{type:"byte[32]",name:"nonce"}],returns:{type:"byte[32]"},actions:{create:[],call:["NoOp"]},readonly:!0,events:[],recommendations:{}},{name:"isOtherBridgeTokenSupported",args:[{type:"byte",name:"chainId"},{type:"byte[32]",name:"token"}],returns:{type:"bool"},actions:{create:[],call:["NoOp"]},readonly:!0,events:[],recommendations:{}},{name:"getTransactionCost",args:[{type:"byte",name:"chainId"}],returns:{type:"uint64"},actions:{create:[],call:["NoOp"]},readonly:!0,events:[],recommendations:{}},{name:"getReceiveTokensCost",args:[],returns:{type:"uint64"},actions:{create:[],call:["NoOp"]},readonly:!0,events:[],recommendations:{}},{name:"getSendTransactionStorageCost",args:[],returns:{type:"uint64"},actions:{create:[],call:["NoOp"]},readonly:!0,events:[],recommendations:{}},{name:"swap",args:[{type:"axfer",name:"assetTransferRef",desc:"The token to be swapped."},{type:"uint64",name:"receiveAsset",desc:"The token to receive in exchange for the swapped token."},{type:"address",name:"recipient",desc:"The address to receive the tokens."},{type:"uint64",name:"receiveAmountMin",desc:"The minimum amount of tokens required to receive during the swap."},{type:"uint64",name:"budget",defaultValue:{source:"literal",data:"AAAAAAAAA+g=",type:"uint64"}}],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[{name:"Swapped",args:[{type:"address",name:"sender"},{type:"address",name:"recipient"},{type:"uint64",name:"tokenId"},{type:"uint64",name:"receiveTokenId"},{type:"uint64",name:"amount"},{type:"uint64",name:"receivedAmount"}]}],recommendations:{}},{name:"addPool",args:[{type:"uint64",name:"poolId",desc:"The address of the `Pool` contract."},{type:"uint64",name:"asset",desc:"The address of the token in the liquidity pool."}],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[],recommendations:{}},{name:"removePool",args:[{type:"uint64",name:"tokenId"}],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[],recommendations:{}},{name:"stopSwap",args:[],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[],recommendations:{}},{name:"startSwap",args:[],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[],recommendations:{}},{name:"setStopAuthority",args:[{type:"address",name:"stopAuthority"}],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[],recommendations:{}},{name:"setRebalancer",args:[{type:"address",name:"rebalancer"}],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[],recommendations:{}},{name:"getGasUsage",args:[{type:"byte",name:"chainId"}],returns:{type:"uint64"},actions:{create:[],call:["NoOp"]},readonly:!0,events:[],recommendations:{}},{name:"setGasUsage",args:[{type:"byte",name:"chainId"},{type:"uint64",name:"gasAmount"}],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[],recommendations:{}},{name:"setGasOracle",args:[{type:"uint64",name:"gasOracle"}],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[],recommendations:{}},{name:"getTransactionRelayerCost",args:[{type:"byte",name:"chainId"}],returns:{type:"uint64"},actions:{create:[],call:["NoOp"]},readonly:!0,events:[],recommendations:{}},{name:"transferOwnership",args:[{type:"address",name:"newOwner"}],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[],recommendations:{}}],arcs:[22,28],networks:{},state:{schema:{global:{ints:3,bytes:4},local:{ints:0,bytes:0}},keys:{global:{chainId:{keyType:"AVMString",valueType:"byte",key:"Y2hhaW5JZA=="},messenger:{keyType:"AVMString",valueType:"AVMUint64",key:"bWVzc2VuZ2Vy"},stopAuthority:{keyType:"AVMString",valueType:"address",key:"c3RvcEF1dGhvcml0eQ=="},rebalancer:{keyType:"AVMString",valueType:"address",key:"cmViYWxhbmNlcg=="},canSwap:{keyType:"AVMString",valueType:"AVMUint64",key:"Y2FuU3dhcA=="},gasOracle:{keyType:"AVMString",valueType:"AVMUint64",key:"Z2FzT3JhY2xl"},owner:{keyType:"AVMString",valueType:"address",key:"b3duZXI="}},local:{},box:{}},maps:{global:{},local:{},box:{processedMessages:{keyType:"byte[32]",valueType:"byte[0]",prefix:"bQ=="},sentMessages:{keyType:"byte[32]",valueType:"byte[0]",prefix:"cw=="},otherBridges:{keyType:"byte",valueType:"byte[32]",prefix:"Yg=="},otherBridgeTokens:{keyType:"AVMBytes",valueType:"byte[0]",prefix:"dA=="},pools:{keyType:"uint64",valueType:"uint64",prefix:"cA=="},fromGasOracleScalingFactor:{keyType:"uint64",valueType:"uint64",prefix:"ZQ=="},bridgingFeeConversionScalingFactor:{keyType:"uint64",valueType:"uint64",prefix:"Zg=="},gasUsage:{keyType:"byte",valueType:"uint64",prefix:"dQ=="}}}},bareActions:{create:[],call:[]},sourceInfo:{approval:{sourceInfo:[{pc:[431],errorMessage:"Asset must go to app"},{pc:[877,1323,2099,2412,2424],errorMessage:"Box must have value"},{pc:[1835],errorMessage:"Bridge: amount too low for fee"},{pc:[1842],errorMessage:"Bridge: bridge to the zero address"},{pc:[911],errorMessage:"Bridge: message processed"},{pc:[961],errorMessage:"Bridge: no message"},{pc:[853,2063],errorMessage:"Bridge: not enough fee"},{pc:[843],errorMessage:"Bridge: source not registered"},{pc:[1950],errorMessage:"Bridge: tokens already sent"},{pc:[1915],errorMessage:"Bridge: unknown chain or token"},{pc:[1902],errorMessage:"Bridge: wrong destination chain"},{pc:[953,1256,1308,1995,2146,2289,2395,2469],errorMessage:"Bytes has valid prefix"},{pc:[447],errorMessage:"CloseTo not allowed"},{pc:[137],errorMessage:"OnCompletion must be NoOp"},{pc:[2484],errorMessage:"Only owner"},{pc:[439],errorMessage:"Rekey not allowed"},{pc:[1665],errorMessage:"Router: is not stopAuthority"},{pc:[2311],errorMessage:"Router: no pool"},{pc:[2221],errorMessage:"Router: no receive pool"},{pc:[832,1502,1825],errorMessage:"Router: swap prohibited"},{pc:[1166],errorMessage:"account opted into asset"},{pc:[2006,2319],errorMessage:"application exists"},{pc:[1599],errorMessage:"asset exists"},{pc:[831,858,920,1127,1174,1225,1267,1501,1663,1824,1896,1964,2108,2113,2236,2346,2430,2482],errorMessage:"check GlobalState exists"},{pc:[1956],errorMessage:"index access is out of bounds"},{pc:[958],errorMessage:"invalid number of bytes for arc4.bool"},{pc:[504,642,658,666,711,727,735,791,807,818,1040,1069,1098,1349,1373,1381,1406,1475,1686,1703,1803],errorMessage:"invalid number of bytes for arc4.static_array<arc4.uint8, 32>"},{pc:[520,529,561,674,743,752,779,826,1118,1148,1213,1261,1313,1340,1466,1483,1492,1571,1580,1643,1746,1768,2e3,2151,2294,2400,2474],errorMessage:"invalid number of bytes for arc4.uint64"},{pc:[512,650,719,799,1032,1061,1090,1205,1357,1365,1398,1434,1720,1738,1785],errorMessage:"invalid number of bytes for arc4.uint8"},{pc:[899,2205],errorMessage:"invalid size"},{pc:[634,703,1458],errorMessage:"transaction type is axfer"},{pc:[623,771],errorMessage:"transaction type is pay"}],pcOffsetMethod:"none"},clear:{sourceInfo:[],pcOffsetMethod:"none"}},source:{approval:"I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMSAwIDggMzIgMTU3MDAKICAgIGJ5dGVjYmxvY2sgMHgxNTFmN2M3NSAiY2FuU3dhcCIgIm93bmVyIiAiZ2FzT3JhY2xlIiAicmViYWxhbmNlciIgImNoYWluSWQiICJtZXNzZW5nZXIiICJ0IiAicCIgInN0b3BBdXRob3JpdHkiIDB4MDEgMHgwMCAidSIgMHg0MzQxN2FhMyAweGY3NDc1YjgyIDB4MTUxZjdjNzUwMDAwMDAwMDAwMDAzZDU0IDB4MDY4MTAxCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYm56IG1haW5fYWZ0ZXJfaWZfZWxzZUAyCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjUyCiAgICAvLyBwcml2YXRlIHJlYmFsYW5jZXIgPSBHbG9iYWxTdGF0ZTxBZGRyZXNzPih7IGluaXRpYWxWYWx1ZTogbmV3IEFkZHJlc3MoYnplcm8oMCkpIH0pOy8vIGNhbiByZXN0cmljdCBkZXBvc2l0IG9yIHdpdGhkcmF3IG9wZXJhdGlvbnMKICAgIGludGNfMSAvLyAwCiAgICBiemVybwogICAgYnl0ZWMgNCAvLyAicmViYWxhbmNlciIKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjUzCiAgICAvLyBjYW5Td2FwID0gR2xvYmFsU3RhdGU8Ym9vbGVhbj4oeyBpbml0aWFsVmFsdWU6IHRydWUgfSk7CiAgICBieXRlY18xIC8vICJjYW5Td2FwIgogICAgaW50Y18wIC8vIDEKICAgIGFwcF9nbG9iYWxfcHV0CgptYWluX2FmdGVyX2lmX2Vsc2VAMjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6NTUKICAgIC8vIGV4cG9ydCBjbGFzcyBCcmlkZ2UgZXh0ZW5kcyBSb3V0ZXIgaW1wbGVtZW50cyBDb252ZW50aW9uYWxSb3V0aW5nLCBJQnJpZGdlIHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gbXVzdCBiZSBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYnogbWFpbl9jcmVhdGVfTm9PcEAzMwogICAgcHVzaGJ5dGVzcyAweDY1ZjcwNTczIDB4M2UzODAyN2MgMHhhNDYwMGFlZCAweGRlNGNhZDRhIDB4NGViYTA3MjEgMHhjNjE3ZWQ3MyAweDU3NTMxNTYwIDB4NjM4MDgyNzggMHgwNjUwN2M2YSAweGY1Zjk2ZWIzIDB4NGIwNjJjYTAgMHhjM2NkZDkyYSAvLyBtZXRob2QgIm9wdEluQXNzZXQodWludDY0KXZvaWQiLCBtZXRob2QgInN3YXBBbmRCcmlkZ2UocGF5LGF4ZmVyLGJ5dGVbMzJdLGJ5dGUsYnl0ZVszMl0sYnl0ZVszMl0sdWludDY0KXZvaWQiLCBtZXRob2QgInN3YXBBbmRCcmlkZ2VXaXRoU3RhYmxlKGF4ZmVyLGJ5dGVbMzJdLGJ5dGUsYnl0ZVszMl0sYnl0ZVszMl0sdWludDY0LHVpbnQ2NCl2b2lkIiwgbWV0aG9kICJyZWNlaXZlVG9rZW5zKHBheSx1aW50NjQsYnl0ZVszMl0sYnl0ZSxieXRlWzMyXSxieXRlWzMyXSx1aW50NjQpdm9pZCIsIG1ldGhvZCAicmVnaXN0ZXJCcmlkZ2UoYnl0ZSxieXRlWzMyXSl2b2lkIiwgbWV0aG9kICJhZGRCcmlkZ2VUb2tlbihieXRlLGJ5dGVbMzJdKXZvaWQiLCBtZXRob2QgInJlbW92ZUJyaWRnZVRva2VuKGJ5dGUsYnl0ZVszMl0pdm9pZCIsIG1ldGhvZCAid2l0aGRyYXdHYXNUb2tlbnModWludDY0KXZvaWQiLCBtZXRob2QgIndpdGhkcmF3QnJpZGdpbmdGZWVJblRva2Vucyh1aW50NjQpdm9pZCIsIG1ldGhvZCAiZ2V0QnJpZGdpbmdDb3N0SW5Ub2tlbnMoYnl0ZSx1aW50NjQpdWludDY0IiwgbWV0aG9kICJoYXNoTWVzc2FnZSh1aW50NjQsYnl0ZVszMl0sYnl0ZSxieXRlLGJ5dGVbMzJdLGJ5dGVbMzJdKWJ5dGVbMzJdIiwgbWV0aG9kICJpc090aGVyQnJpZGdlVG9rZW5TdXBwb3J0ZWQoYnl0ZSxieXRlWzMyXSlib29sIgogICAgYnl0ZWMgMTMgLy8gbWV0aG9kICJnZXRUcmFuc2FjdGlvbkNvc3QoYnl0ZSl1aW50NjQiCiAgICBwdXNoYnl0ZXNzIDB4MDdkZjg0MjkgMHg4MGM1YzcwZiAweDQxMzRkMDY4IDB4ZWYxNWY4NTUgMHg2YjFlZTIyMyAweDE4NzBhNDkyIDB4MzU1NzMyNGQgMHgwNGIxNjFmMSAweGQyYjM1N2ViIC8vIG1ldGhvZCAiZ2V0UmVjZWl2ZVRva2Vuc0Nvc3QoKXVpbnQ2NCIsIG1ldGhvZCAiZ2V0U2VuZFRyYW5zYWN0aW9uU3RvcmFnZUNvc3QoKXVpbnQ2NCIsIG1ldGhvZCAic3dhcChheGZlcix1aW50NjQsYWRkcmVzcyx1aW50NjQsdWludDY0KXZvaWQiLCBtZXRob2QgImFkZFBvb2wodWludDY0LHVpbnQ2NCl2b2lkIiwgbWV0aG9kICJyZW1vdmVQb29sKHVpbnQ2NCl2b2lkIiwgbWV0aG9kICJzdG9wU3dhcCgpdm9pZCIsIG1ldGhvZCAic3RhcnRTd2FwKCl2b2lkIiwgbWV0aG9kICJzZXRTdG9wQXV0aG9yaXR5KGFkZHJlc3Mpdm9pZCIsIG1ldGhvZCAic2V0UmViYWxhbmNlcihhZGRyZXNzKXZvaWQiCiAgICBieXRlYyAxNCAvLyBtZXRob2QgImdldEdhc1VzYWdlKGJ5dGUpdWludDY0IgogICAgcHVzaGJ5dGVzcyAweDBjYTVhZTdhIDB4Mjc0NzBmMDcgMHhjYmZjNmQwMiAweGUxN2JhZmI0IC8vIG1ldGhvZCAic2V0R2FzVXNhZ2UoYnl0ZSx1aW50NjQpdm9pZCIsIG1ldGhvZCAic2V0R2FzT3JhY2xlKHVpbnQ2NCl2b2lkIiwgbWV0aG9kICJnZXRUcmFuc2FjdGlvblJlbGF5ZXJDb3N0KGJ5dGUpdWludDY0IiwgbWV0aG9kICJ0cmFuc2Zlck93bmVyc2hpcChhZGRyZXNzKXZvaWQiCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAwCiAgICBtYXRjaCBvcHRJbkFzc2V0IHN3YXBBbmRCcmlkZ2Ugc3dhcEFuZEJyaWRnZVdpdGhTdGFibGUgcmVjZWl2ZVRva2VucyByZWdpc3RlckJyaWRnZSBhZGRCcmlkZ2VUb2tlbiByZW1vdmVCcmlkZ2VUb2tlbiB3aXRoZHJhd0dhc1Rva2VucyB3aXRoZHJhd0JyaWRnaW5nRmVlSW5Ub2tlbnMgZ2V0QnJpZGdpbmdDb3N0SW5Ub2tlbnMgaGFzaE1lc3NhZ2UgaXNPdGhlckJyaWRnZVRva2VuU3VwcG9ydGVkIGdldFRyYW5zYWN0aW9uQ29zdCBtYWluX2dldFJlY2VpdmVUb2tlbnNDb3N0X3JvdXRlQDE4IG1haW5fZ2V0U2VuZFRyYW5zYWN0aW9uU3RvcmFnZUNvc3Rfcm91dGVAMTkgc3dhcCBhZGRQb29sIHJlbW92ZVBvb2wgc3RvcFN3YXAgc3RhcnRTd2FwIHNldFN0b3BBdXRob3JpdHkgc2V0UmViYWxhbmNlciBnZXRHYXNVc2FnZSBzZXRHYXNVc2FnZSBzZXRHYXNPcmFjbGUgZ2V0VHJhbnNhY3Rpb25SZWxheWVyQ29zdCB0cmFuc2Zlck93bmVyc2hpcAogICAgZXJyCgptYWluX2dldFNlbmRUcmFuc2FjdGlvblN0b3JhZ2VDb3N0X3JvdXRlQDE5OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czozNTEKICAgIC8vIEBhYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgYnl0ZWMgMTUgLy8gMHgxNTFmN2M3NTAwMDAwMDAwMDAwMDNkNTQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl9nZXRSZWNlaXZlVG9rZW5zQ29zdF9yb3V0ZUAxODoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MzQ0CiAgICAvLyBAYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUgfSkKICAgIGJ5dGVjIDE1IC8vIDB4MTUxZjdjNzUwMDAwMDAwMDAwMDAzZDU0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fY3JlYXRlX05vT3BAMzM6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjU1CiAgICAvLyBleHBvcnQgY2xhc3MgQnJpZGdlIGV4dGVuZHMgUm91dGVyIGltcGxlbWVudHMgQ29udmVudGlvbmFsUm91dGluZywgSUJyaWRnZSB7CiAgICBwdXNoYnl0ZXMgMHg2NjRjYTQwNCAvLyBtZXRob2QgImNyZWF0ZUFwcGxpY2F0aW9uKGFkZHJlc3MsYnl0ZSx1aW50NjQsdWludDY0KXZvaWQiCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAwCiAgICBtYXRjaCBjcmVhdGVBcHBsaWNhdGlvbgogICAgZXJyCgoKLy8gX3B1eWFfbGliLnV0aWwuZW5zdXJlX2J1ZGdldChyZXF1aXJlZF9idWRnZXQ6IHVpbnQ2NCwgZmVlX3NvdXJjZTogdWludDY0KSAtPiB2b2lkOgplbnN1cmVfYnVkZ2V0OgogICAgcHJvdG8gMiAwCiAgICBmcmFtZV9kaWcgLTIKICAgIHB1c2hpbnQgMTAgLy8gMTAKICAgICsKCmVuc3VyZV9idWRnZXRfd2hpbGVfdG9wQDE6CiAgICBmcmFtZV9kaWcgMAogICAgZ2xvYmFsIE9wY29kZUJ1ZGdldAogICAgPgogICAgYnogZW5zdXJlX2J1ZGdldF9hZnRlcl93aGlsZUA2CiAgICBpdHhuX2JlZ2luCiAgICBwdXNoaW50IDYgLy8gYXBwbAogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgcHVzaGludCA1IC8vIERlbGV0ZUFwcGxpY2F0aW9uCiAgICBpdHhuX2ZpZWxkIE9uQ29tcGxldGlvbgogICAgYnl0ZWMgMTYgLy8gMHgwNjgxMDEKICAgIGl0eG5fZmllbGQgQXBwcm92YWxQcm9ncmFtCiAgICBieXRlYyAxNiAvLyAweDA2ODEwMQogICAgaXR4bl9maWVsZCBDbGVhclN0YXRlUHJvZ3JhbQogICAgZnJhbWVfZGlnIC0xCiAgICBzd2l0Y2ggZW5zdXJlX2J1ZGdldF9zd2l0Y2hfY2FzZV8wQDMgZW5zdXJlX2J1ZGdldF9zd2l0Y2hfY2FzZV8xQDQKCmVuc3VyZV9idWRnZXRfc3dpdGNoX2Nhc2VfbmV4dEA1OgogICAgaXR4bl9zdWJtaXQKICAgIGIgZW5zdXJlX2J1ZGdldF93aGlsZV90b3BAMQoKZW5zdXJlX2J1ZGdldF9zd2l0Y2hfY2FzZV8xQDQ6CiAgICBnbG9iYWwgTWluVHhuRmVlCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgYiBlbnN1cmVfYnVkZ2V0X3N3aXRjaF9jYXNlX25leHRANQoKZW5zdXJlX2J1ZGdldF9zd2l0Y2hfY2FzZV8wQDM6CiAgICBpbnRjXzEgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKICAgIGIgZW5zdXJlX2J1ZGdldF9zd2l0Y2hfY2FzZV9uZXh0QDUKCmVuc3VyZV9idWRnZXRfYWZ0ZXJfd2hpbGVANjoKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvdXRpbHMuYWxnby50czo6YW1vdW50RnJvbUFzc2V0VHJhbnNmZXIoYXNzZXRUcmFuc2ZlclR4bjogdWludDY0KSAtPiB1aW50NjQ6CmFtb3VudEZyb21Bc3NldFRyYW5zZmVyOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy91dGlscy5hbGdvLnRzOjIzCiAgICAvLyBleHBvcnQgZnVuY3Rpb24gYW1vdW50RnJvbUFzc2V0VHJhbnNmZXIoYXNzZXRUcmFuc2ZlclR4bjogZ3R4bi5Bc3NldFRyYW5zZmVyVHhuKTogdWludDY0IHsKICAgIHByb3RvIDEgMQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy91dGlscy5hbGdvLnRzOjI0CiAgICAvLyBhc3NlcnQoYXNzZXRUcmFuc2ZlclR4bi5hc3NldFJlY2VpdmVyID09PSBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcywgYEFzc2V0IG11c3QgZ28gdG8gYXBwYCk7CiAgICBmcmFtZV9kaWcgLTEKICAgIGd0eG5zIEFzc2V0UmVjZWl2ZXIKICAgIGdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCiAgICA9PQogICAgYXNzZXJ0IC8vIEFzc2V0IG11c3QgZ28gdG8gYXBwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3V0aWxzLmFsZ28udHM6MjcKICAgIC8vIGFzc2VydChhc3NldFRyYW5zZmVyVHhuLnJla2V5VG8gPT09IEdsb2JhbC56ZXJvQWRkcmVzcywgYFJla2V5IG5vdCBhbGxvd2VkYCk7CiAgICBmcmFtZV9kaWcgLTEKICAgIGd0eG5zIFJla2V5VG8KICAgIGdsb2JhbCBaZXJvQWRkcmVzcwogICAgPT0KICAgIGFzc2VydCAvLyBSZWtleSBub3QgYWxsb3dlZAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy91dGlscy5hbGdvLnRzOjI4CiAgICAvLyBhc3NlcnQoYXNzZXRUcmFuc2ZlclR4bi5hc3NldENsb3NlVG8gPT09IEdsb2JhbC56ZXJvQWRkcmVzcywgYENsb3NlVG8gbm90IGFsbG93ZWRgKTsKICAgIGZyYW1lX2RpZyAtMQogICAgZ3R4bnMgQXNzZXRDbG9zZVRvCiAgICBnbG9iYWwgWmVyb0FkZHJlc3MKICAgID09CiAgICBhc3NlcnQgLy8gQ2xvc2VUbyBub3QgYWxsb3dlZAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy91dGlscy5hbGdvLnRzOjI5CiAgICAvLyByZXR1cm4gYXNzZXRUcmFuc2ZlclR4bi5hc3NldEFtb3VudDsKICAgIGZyYW1lX2RpZyAtMQogICAgZ3R4bnMgQXNzZXRBbW91bnQKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvdXRpbHMuYWxnby50czo6YW1vdW50RnJvbVBheW1lbnQocGF5bWVudFR4bjogdWludDY0KSAtPiB1aW50NjQ6CmFtb3VudEZyb21QYXltZW50OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy91dGlscy5hbGdvLnRzOjMyCiAgICAvLyBleHBvcnQgZnVuY3Rpb24gYW1vdW50RnJvbVBheW1lbnQocGF5bWVudFR4bjogZ3R4bi5QYXltZW50VHhuKTogdWludDY0IHsKICAgIHByb3RvIDEgMQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy91dGlscy5hbGdvLnRzOjMzCiAgICAvLyBpZiAocGF5bWVudFR4bi5yZWNlaXZlciAhPT0gR2xvYmFsLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MpIHJldHVybiAwOwogICAgZnJhbWVfZGlnIC0xCiAgICBndHhucyBSZWNlaXZlcgogICAgZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKICAgICE9CiAgICBieiBhbW91bnRGcm9tUGF5bWVudF9hZnRlcl9pZl9lbHNlQDIKICAgIGludGNfMSAvLyAwCiAgICByZXRzdWIKCmFtb3VudEZyb21QYXltZW50X2FmdGVyX2lmX2Vsc2VAMjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvdXRpbHMuYWxnby50czozNQogICAgLy8gaWYgKHBheW1lbnRUeG4ucmVrZXlUbyAhPT0gR2xvYmFsLnplcm9BZGRyZXNzKSByZXR1cm4gMDsKICAgIGZyYW1lX2RpZyAtMQogICAgZ3R4bnMgUmVrZXlUbwogICAgZ2xvYmFsIFplcm9BZGRyZXNzCiAgICAhPQogICAgYnogYW1vdW50RnJvbVBheW1lbnRfYWZ0ZXJfaWZfZWxzZUA0CiAgICBpbnRjXzEgLy8gMAogICAgcmV0c3ViCgphbW91bnRGcm9tUGF5bWVudF9hZnRlcl9pZl9lbHNlQDQ6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3V0aWxzLmFsZ28udHM6MzYKICAgIC8vIGlmIChwYXltZW50VHhuLmNsb3NlUmVtYWluZGVyVG8gIT09IEdsb2JhbC56ZXJvQWRkcmVzcykgcmV0dXJuIDA7CiAgICBmcmFtZV9kaWcgLTEKICAgIGd0eG5zIENsb3NlUmVtYWluZGVyVG8KICAgIGdsb2JhbCBaZXJvQWRkcmVzcwogICAgIT0KICAgIGJ6IGFtb3VudEZyb21QYXltZW50X2FmdGVyX2lmX2Vsc2VANgogICAgaW50Y18xIC8vIDAKICAgIHJldHN1YgoKYW1vdW50RnJvbVBheW1lbnRfYWZ0ZXJfaWZfZWxzZUA2OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy91dGlscy5hbGdvLnRzOjM4CiAgICAvLyByZXR1cm4gcGF5bWVudFR4bi5hbW91bnQ7CiAgICBmcmFtZV9kaWcgLTEKICAgIGd0eG5zIEFtb3VudAogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czo6QnJpZGdlLmNyZWF0ZUFwcGxpY2F0aW9uW3JvdXRpbmddKCkgLT4gdm9pZDoKY3JlYXRlQXBwbGljYXRpb246CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjY5CiAgICAvLyBjcmVhdGVBcHBsaWNhdGlvbihvd25lcjogQWRkcmVzcywgY2hhaW5JZDogQnl0ZSwgbWVzc2VuZ2VyOiBBcHBsaWNhdGlvbiwgZ2FzT3JhY2xlOiBBcHBsaWNhdGlvbik6IHZvaWQgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMyAvLyAzMgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC5zdGF0aWNfYXJyYXk8YXJjNC51aW50OCwgMzI+CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18wIC8vIDEKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDgKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDMKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzIgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50NjQKICAgIGJ0b2kKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDQKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzIgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50NjQKICAgIGJ0b2kKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvb3duYWJsZS5hbGdvLnRzOjYKICAgIC8vIHByb3RlY3RlZCBvd25lciA9IEdsb2JhbFN0YXRlPEFkZHJlc3M+KCk7CiAgICBieXRlY18yIC8vICJvd25lciIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvb3duYWJsZS5hbGdvLnRzOjkKICAgIC8vIHRoaXMub3duZXIudmFsdWUgPSBvd25lcjsKICAgIGRpZyA0CiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9nYXMtdXNhZ2UuYWxnby50czo5CiAgICAvLyBnYXNPcmFjbGUgPSBHbG9iYWxTdGF0ZTxBcHBsaWNhdGlvbj4oKTsKICAgIGJ5dGVjXzMgLy8gImdhc09yYWNsZSIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvZ2FzLXVzYWdlLmFsZ28udHM6MTQKICAgIC8vIHRoaXMuZ2FzT3JhY2xlLnZhbHVlID0gZ2FzT3JhY2xlOwogICAgc3dhcAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcm91dGVyLmFsZ28udHM6NDIKICAgIC8vIHByaXZhdGUgc3RvcEF1dGhvcml0eSA9IEdsb2JhbFN0YXRlPEFkZHJlc3M+KCk7Ly8gY2FuIHJlc3RyaWN0IGRlcG9zaXQgb3Igd2l0aGRyYXcgb3BlcmF0aW9ucwogICAgYnl0ZWMgOSAvLyAic3RvcEF1dGhvcml0eSIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcm91dGVyLmFsZ28udHM6NTcKICAgIC8vIHRoaXMuc3RvcEF1dGhvcml0eS52YWx1ZSA9IG93bmVyOwogICAgdW5jb3ZlciAzCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czo1NwogICAgLy8gY2hhaW5JZCA9IEdsb2JhbFN0YXRlPEJ5dGU+KCk7CiAgICBieXRlYyA1IC8vICJjaGFpbklkIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czo3MQogICAgLy8gdGhpcy5jaGFpbklkLnZhbHVlID0gY2hhaW5JZDsKICAgIHVuY292ZXIgMgogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6NTgKICAgIC8vIG1lc3NlbmdlciA9IEdsb2JhbFN0YXRlPEFwcGxpY2F0aW9uPigpOwogICAgYnl0ZWMgNiAvLyAibWVzc2VuZ2VyIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czo3MgogICAgLy8gdGhpcy5tZXNzZW5nZXIudmFsdWUgPSBtZXNzZW5nZXI7CiAgICBzd2FwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czo2OQogICAgLy8gY3JlYXRlQXBwbGljYXRpb24ob3duZXI6IEFkZHJlc3MsIGNoYWluSWQ6IEJ5dGUsIG1lc3NlbmdlcjogQXBwbGljYXRpb24sIGdhc09yYWNsZTogQXBwbGljYXRpb24pOiB2b2lkIHsKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjpCcmlkZ2Uub3B0SW5Bc3NldFtyb3V0aW5nXSgpIC0+IHZvaWQ6Cm9wdEluQXNzZXQ6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjc1CiAgICAvLyBvcHRJbkFzc2V0KGFzc2V0OiBBc3NldCk6IHZvaWQgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgYnRvaQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czo3NgogICAgLy8gdGhpcy5vbmx5T3duZXIoKTsKICAgIGNhbGxzdWIgb25seU93bmVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjc5LTg1CiAgICAvLyBpdHhuCiAgICAvLyAgIC5hc3NldFRyYW5zZmVyKHsKICAgIC8vICAgICB4ZmVyQXNzZXQ6IGFzc2V0LAogICAgLy8gICAgIGFzc2V0QW1vdW50OiAwLAogICAgLy8gICAgIGFzc2V0UmVjZWl2ZXI6IEdsb2JhbC5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzLAogICAgLy8gICB9KQogICAgLy8gICAuc3VibWl0KCk7CiAgICBpdHhuX2JlZ2luCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjgzCiAgICAvLyBhc3NldFJlY2VpdmVyOiBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcywKICAgIGdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCiAgICBpdHhuX2ZpZWxkIEFzc2V0UmVjZWl2ZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6ODIKICAgIC8vIGFzc2V0QW1vdW50OiAwLAogICAgaW50Y18xIC8vIDAKICAgIGl0eG5fZmllbGQgQXNzZXRBbW91bnQKICAgIGl0eG5fZmllbGQgWGZlckFzc2V0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjc5LTg0CiAgICAvLyBpdHhuCiAgICAvLyAgIC5hc3NldFRyYW5zZmVyKHsKICAgIC8vICAgICB4ZmVyQXNzZXQ6IGFzc2V0LAogICAgLy8gICAgIGFzc2V0QW1vdW50OiAwLAogICAgLy8gICAgIGFzc2V0UmVjZWl2ZXI6IEdsb2JhbC5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzLAogICAgLy8gICB9KQogICAgcHVzaGludCA0IC8vIDQKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludGNfMSAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czo3OS04NQogICAgLy8gaXR4bgogICAgLy8gICAuYXNzZXRUcmFuc2Zlcih7CiAgICAvLyAgICAgeGZlckFzc2V0OiBhc3NldCwKICAgIC8vICAgICBhc3NldEFtb3VudDogMCwKICAgIC8vICAgICBhc3NldFJlY2VpdmVyOiBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcywKICAgIC8vICAgfSkKICAgIC8vICAgLnN1Ym1pdCgpOwogICAgaXR4bl9zdWJtaXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6ODcKICAgIC8vIGxvZygnQnJpZGdlOiBvcHQtaW4gY29tcGxldGVkJyk7CiAgICBwdXNoYnl0ZXMgIkJyaWRnZTogb3B0LWluIGNvbXBsZXRlZCIKICAgIGxvZwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czo3NQogICAgLy8gb3B0SW5Bc3NldChhc3NldDogQXNzZXQpOiB2b2lkIHsKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjpCcmlkZ2Uuc3dhcEFuZEJyaWRnZVtyb3V0aW5nXSgpIC0+IHZvaWQ6CnN3YXBBbmRCcmlkZ2U6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjkwCiAgICAvLyBAYWJpbWV0aG9kKHsgZGVmYXVsdEFyZ3VtZW50czogeyBidWRnZXQ6IHsgY29uc3RhbnQ6IDEwMDAgfSB9IH0pCiAgICB0eG4gR3JvdXBJbmRleAogICAgcHVzaGludCAyIC8vIDIKICAgIC0KICAgIGR1cAogICAgZ3R4bnMgVHlwZUVudW0KICAgIGludGNfMCAvLyBwYXkKICAgID09CiAgICBhc3NlcnQgLy8gdHJhbnNhY3Rpb24gdHlwZSBpcyBwYXkKICAgIHR4biBHcm91cEluZGV4CiAgICBpbnRjXzAgLy8gMQogICAgLQogICAgZHVwCiAgICBndHhucyBUeXBlRW51bQogICAgcHVzaGludCA0IC8vIGF4ZmVyCiAgICA9PQogICAgYXNzZXJ0IC8vIHRyYW5zYWN0aW9uIHR5cGUgaXMgYXhmZXIKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzMgLy8gMzIKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQuc3RhdGljX2FycmF5PGFyYzQudWludDgsIDMyPgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZHVwCiAgICBsZW4KICAgIGludGNfMCAvLyAxCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ4CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAzCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18zIC8vIDMyCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnN0YXRpY19hcnJheTxhcmM0LnVpbnQ4LCAzMj4KICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDQKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzMgLy8gMzIKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQuc3RhdGljX2FycmF5PGFyYzQudWludDgsIDMyPgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgNQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgYnRvaQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoxMDAKICAgIC8vIHRoaXMuX3N3YXBBbmRCcmlkZ2UoYW1vdW50RnJvbVBheW1lbnQocGF5bWVudFJlZiksIGFzc2V0VHJhbnNmZXJSZWYsIHJlY2lwaWVudCwgZGVzdGluYXRpb25DaGFpbklkLCByZWNlaXZlVG9rZW4sIG5vbmNlLCAwLCBidWRnZXQpOwogICAgdW5jb3ZlciA2CiAgICBjYWxsc3ViIGFtb3VudEZyb21QYXltZW50CiAgICBjb3ZlciA2CiAgICBjb3ZlciA2CiAgICBpbnRjXzEgLy8gMAogICAgdW5jb3ZlciA3CiAgICBjYWxsc3ViIF9zd2FwQW5kQnJpZGdlCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjkwCiAgICAvLyBAYWJpbWV0aG9kKHsgZGVmYXVsdEFyZ3VtZW50czogeyBidWRnZXQ6IHsgY29uc3RhbnQ6IDEwMDAgfSB9IH0pCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czo6QnJpZGdlLnN3YXBBbmRCcmlkZ2VXaXRoU3RhYmxlW3JvdXRpbmddKCkgLT4gdm9pZDoKc3dhcEFuZEJyaWRnZVdpdGhTdGFibGU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjEwMwogICAgLy8gQGFiaW1ldGhvZCh7IGRlZmF1bHRBcmd1bWVudHM6IHsgYnVkZ2V0OiB7IGNvbnN0YW50OiAxMDAwIH0gfSB9KQogICAgdHhuIEdyb3VwSW5kZXgKICAgIGludGNfMCAvLyAxCiAgICAtCiAgICBkdXAKICAgIGd0eG5zIFR5cGVFbnVtCiAgICBwdXNoaW50IDQgLy8gYXhmZXIKICAgID09CiAgICBhc3NlcnQgLy8gdHJhbnNhY3Rpb24gdHlwZSBpcyBheGZlcgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMyAvLyAzMgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC5zdGF0aWNfYXJyYXk8YXJjNC51aW50OCwgMzI+CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18wIC8vIDEKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDgKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDMKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzMgLy8gMzIKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQuc3RhdGljX2FycmF5PGFyYzQudWludDgsIDMyPgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgNAogICAgZHVwCiAgICBsZW4KICAgIGludGNfMyAvLyAzMgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC5zdGF0aWNfYXJyYXk8YXJjNC51aW50OCwgMzI+CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyA1CiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyA2CiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjExMwogICAgLy8gdGhpcy5fc3dhcEFuZEJyaWRnZSgwLCBhc3NldFRyYW5zZmVyUmVmLCByZWNpcGllbnQsIGRlc3RpbmF0aW9uQ2hhaW5JZCwgcmVjZWl2ZVRva2VuLCBub25jZSwgZmVlVG9rZW5BbW91bnQsIGJ1ZGdldCk7CiAgICBpbnRjXzEgLy8gMAogICAgY292ZXIgNwogICAgY2FsbHN1YiBfc3dhcEFuZEJyaWRnZQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoxMDMKICAgIC8vIEBhYmltZXRob2QoeyBkZWZhdWx0QXJndW1lbnRzOiB7IGJ1ZGdldDogeyBjb25zdGFudDogMTAwMCB9IH0gfSkKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjpCcmlkZ2UucmVjZWl2ZVRva2Vuc1tyb3V0aW5nXSgpIC0+IHZvaWQ6CnJlY2VpdmVUb2tlbnM6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjE5MwogICAgLy8gQGFiaW1ldGhvZCgpCiAgICB0eG4gR3JvdXBJbmRleAogICAgaW50Y18wIC8vIDEKICAgIC0KICAgIGR1cAogICAgZ3R4bnMgVHlwZUVudW0KICAgIGludGNfMCAvLyBwYXkKICAgID09CiAgICBhc3NlcnQgLy8gdHJhbnNhY3Rpb24gdHlwZSBpcyBwYXkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzIgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50NjQKICAgIGJ0b2kKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGR1cAogICAgY292ZXIgMwogICAgZHVwCiAgICBsZW4KICAgIGludGNfMyAvLyAzMgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC5zdGF0aWNfYXJyYXk8YXJjNC51aW50OCwgMzI+CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAzCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18wIC8vIDEKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDgKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDQKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzMgLy8gMzIKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQuc3RhdGljX2FycmF5PGFyYzQudWludDgsIDMyPgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgNQogICAgZHVwCiAgICBjb3ZlciA2CiAgICBkdXAKICAgIGxlbgogICAgaW50Y18zIC8vIDMyCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnN0YXRpY19hcnJheTxhcmM0LnVpbnQ4LCAzMj4KICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDYKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzIgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50NjQKICAgIGJ0b2kKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcm91dGVyLmFsZ28udHM6NjQKICAgIC8vIGFzc2VydCh0aGlzLmNhblN3YXAudmFsdWUsICdSb3V0ZXI6IHN3YXAgcHJvaGliaXRlZCcpOwogICAgaW50Y18xIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcm91dGVyLmFsZ28udHM6NTMKICAgIC8vIGNhblN3YXAgPSBHbG9iYWxTdGF0ZTxib29sZWFuPih7IGluaXRpYWxWYWx1ZTogdHJ1ZSB9KTsKICAgIGJ5dGVjXzEgLy8gImNhblN3YXAiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjY0CiAgICAvLyBhc3NlcnQodGhpcy5jYW5Td2FwLnZhbHVlLCAnUm91dGVyOiBzd2FwIHByb2hpYml0ZWQnKTsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICBhc3NlcnQgLy8gUm91dGVyOiBzd2FwIHByb2hpYml0ZWQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6NjQKICAgIC8vIG90aGVyQnJpZGdlcyA9IEJveE1hcDxCeXRlLCBTdGF0aWNCeXRlczwzMj4+KHsga2V5UHJlZml4OiAnYicgfSk7CiAgICBwdXNoYnl0ZXMgImIiCiAgICBkaWcgNAogICAgY29uY2F0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjIwNAogICAgLy8gYXNzZXJ0KHRoaXMub3RoZXJCcmlkZ2VzKHNvdXJjZUNoYWluSWQpLmV4aXN0cywgJ0JyaWRnZTogc291cmNlIG5vdCByZWdpc3RlcmVkJyk7CiAgICBkdXAKICAgIGJveF9sZW4KICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIEJyaWRnZTogc291cmNlIG5vdCByZWdpc3RlcmVkCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjIwNgogICAgLy8gY29uc3QgdmFsdWUgPSBhbW91bnRGcm9tUGF5bWVudChwYXltZW50UmVmKTsKICAgIHVuY292ZXIgNwogICAgY2FsbHN1YiBhbW91bnRGcm9tUGF5bWVudAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoyMDcKICAgIC8vIGFzc2VydCh2YWx1ZSA+PSBzdG9yYWdlRmVlLCAnQnJpZGdlOiBub3QgZW5vdWdoIGZlZScpOwogICAgZHVwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjM0OAogICAgLy8gcmV0dXJuIDE1NzAwOwogICAgaW50YyA0IC8vIDE1NzAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjIwNwogICAgLy8gYXNzZXJ0KHZhbHVlID49IHN0b3JhZ2VGZWUsICdCcmlkZ2U6IG5vdCBlbm91Z2ggZmVlJyk7CiAgICA+PQogICAgYXNzZXJ0IC8vIEJyaWRnZTogbm90IGVub3VnaCBmZWUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MjA5CiAgICAvLyBjb25zdCBtZXNzYWdlID0gdGhpcy5oYXNoTWVzc2FnZShhbW91bnQsIHJlY2lwaWVudCwgc291cmNlQ2hhaW5JZCwgdGhpcy5jaGFpbklkLnZhbHVlLCByZWNlaXZlVG9rZW4sIG5vbmNlKTsKICAgIGludGNfMSAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjU3CiAgICAvLyBjaGFpbklkID0gR2xvYmFsU3RhdGU8Qnl0ZT4oKTsKICAgIGJ5dGVjIDUgLy8gImNoYWluSWQiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjIwOQogICAgLy8gY29uc3QgbWVzc2FnZSA9IHRoaXMuaGFzaE1lc3NhZ2UoYW1vdW50LCByZWNpcGllbnQsIHNvdXJjZUNoYWluSWQsIHRoaXMuY2hhaW5JZC52YWx1ZSwgcmVjZWl2ZVRva2VuLCBub25jZSk7CiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgZGlnIDgKICAgIGRpZyA4CiAgICB1bmNvdmVyIDgKICAgIHVuY292ZXIgMwogICAgZGlnIDgKICAgIHVuY292ZXIgOAogICAgY2FsbHN1YiBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjpCcmlkZ2UuaGFzaE1lc3NhZ2UKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MjEwCiAgICAvLyBjb25zdCBtZXNzYWdlV2l0aFNlbmRlciA9IGhhc2hXaXRoU2VuZGVyQWRkcmVzcyhtZXNzYWdlLCB0aGlzLm90aGVyQnJpZGdlcyhzb3VyY2VDaGFpbklkKS52YWx1ZS5ieXRlcyk7CiAgICB1bmNvdmVyIDIKICAgIGJveF9nZXQKICAgIGFzc2VydCAvLyBCb3ggbXVzdCBoYXZlIHZhbHVlCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3V0aWxzLmFsZ28udHM6NTIKICAgIC8vIGNvbnN0IGg6IGJ5dGVzID0gb3Aua2VjY2FrMjU2KG9wLmNvbmNhdChtZXNzYWdlLmJ5dGVzLCBzZW5kZXJBZGRyZXNzKSk7CiAgICBkaWcgMQogICAgc3dhcAogICAgY29uY2F0CiAgICBrZWNjYWsyNTYKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvdXRpbHMuYWxnby50czo1NQogICAgLy8gY29uc3QgZmlyc3QyID0gb3Auc3Vic3RyaW5nKG1lc3NhZ2UuYnl0ZXMsIDAsIDIpOwogICAgc3dhcAogICAgc3Vic3RyaW5nIDAgMgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy91dGlscy5hbGdvLnRzOjU3CiAgICAvLyBjb25zdCBsYXN0MzAgPSBvcC5zdWJzdHJpbmcoaCwgMiwgMzIpOwogICAgc3dhcAogICAgc3Vic3RyaW5nIDIgMzIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvdXRpbHMuYWxnby50czo2MAogICAgLy8gcmV0dXJuIG5ldyBTdGF0aWNCeXRlczwzMj4ob3AuY29uY2F0KGZpcnN0MiwgbGFzdDMwKSk7CiAgICBjb25jYXQKICAgIGR1cAogICAgY292ZXIgNgogICAgZHVwCiAgICBsZW4KICAgIGludGNfMyAvLyAzMgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIHNpemUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6NjAKICAgIC8vIHByb2Nlc3NlZE1lc3NhZ2VzID0gQm94TWFwPFN0YXRpY0J5dGVzPDMyPiwgU3RhdGljQnl0ZXM+KHsga2V5UHJlZml4OiAnbScgfSk7CiAgICBwdXNoYnl0ZXMgIm0iCiAgICBkaWcgMQogICAgY29uY2F0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjIxMgogICAgLy8gYXNzZXJ0KCF0aGlzLnByb2Nlc3NlZE1lc3NhZ2VzKG1lc3NhZ2VXaXRoU2VuZGVyKS5leGlzdHMsICdCcmlkZ2U6IG1lc3NhZ2UgcHJvY2Vzc2VkJyk7CiAgICBkdXAKICAgIGJveF9sZW4KICAgIGJ1cnkgMQogICAgIQogICAgYXNzZXJ0IC8vIEJyaWRnZTogbWVzc2FnZSBwcm9jZXNzZWQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MjE0CiAgICAvLyB0aGlzLnByb2Nlc3NlZE1lc3NhZ2VzKG1lc3NhZ2VXaXRoU2VuZGVyKS52YWx1ZSA9IG5ldyBTdGF0aWNCeXRlcygpOwogICAgcHVzaGJ5dGVzIDB4CiAgICBib3hfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjIxNy0yMjEKICAgIC8vIGFzc2VydChhYmlDYWxsKHsKICAgIC8vICAgbWV0aG9kOiBNZXNzZW5nZXIucHJvdG90eXBlLnJlY2VpdmVkTWVzc2FnZXMsCiAgICAvLyAgIGFwcElkOiB0aGlzLm1lc3Nlbmdlci52YWx1ZS5pZCwKICAgIC8vICAgYXJnczogW21lc3NhZ2VXaXRoU2VuZGVyXSwKICAgIC8vIH0pLnJldHVyblZhbHVlLCAnQnJpZGdlOiBubyBtZXNzYWdlJyk7CiAgICBpdHhuX2JlZ2luCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjIxOQogICAgLy8gYXBwSWQ6IHRoaXMubWVzc2VuZ2VyLnZhbHVlLmlkLAogICAgaW50Y18xIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6NTgKICAgIC8vIG1lc3NlbmdlciA9IEdsb2JhbFN0YXRlPEFwcGxpY2F0aW9uPigpOwogICAgYnl0ZWMgNiAvLyAibWVzc2VuZ2VyIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoyMTkKICAgIC8vIGFwcElkOiB0aGlzLm1lc3Nlbmdlci52YWx1ZS5pZCwKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjIxNy0yMjEKICAgIC8vIGFzc2VydChhYmlDYWxsKHsKICAgIC8vICAgbWV0aG9kOiBNZXNzZW5nZXIucHJvdG90eXBlLnJlY2VpdmVkTWVzc2FnZXMsCiAgICAvLyAgIGFwcElkOiB0aGlzLm1lc3Nlbmdlci52YWx1ZS5pZCwKICAgIC8vICAgYXJnczogW21lc3NhZ2VXaXRoU2VuZGVyXSwKICAgIC8vIH0pLnJldHVyblZhbHVlLCAnQnJpZGdlOiBubyBtZXNzYWdlJyk7CiAgICBwdXNoYnl0ZXMgMHgzM2UxNDdhYSAvLyBtZXRob2QgInJlY2VpdmVkTWVzc2FnZXMoYnl0ZVszMl0pYm9vbCIKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uSUQKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBwdXNoaW50IDYgLy8gYXBwbAogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18xIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICBpdHhuX3N1Ym1pdAogICAgaXR4biBMYXN0TG9nCiAgICBkdXAKICAgIGV4dHJhY3QgNCAwCiAgICBzd2FwCiAgICBleHRyYWN0IDAgNAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICA9PQogICAgYXNzZXJ0IC8vIEJ5dGVzIGhhcyB2YWxpZCBwcmVmaXgKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzAgLy8gMQogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC5ib29sCiAgICBpbnRjXzEgLy8gMAogICAgZ2V0Yml0CiAgICBhc3NlcnQgLy8gQnJpZGdlOiBubyBtZXNzYWdlCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjIyMwogICAgLy8gY29uc3QgdG9rZW5JZDogdWludDY0ID0gb3AuZXh0cmFjdFVpbnQ2NChyZWNlaXZlVG9rZW4uYnl0ZXMsIDI0KTsKICAgIHVuY292ZXIgMgogICAgcHVzaGludCAyNCAvLyAyNAogICAgZXh0cmFjdF91aW50NjQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MjI1LTIzMAogICAgLy8gY29uc3QgcmVjZWl2ZUFtb3VudCA9IHRoaXMucmVjZWl2ZUFuZFN3YXBGcm9tVlVzZCgKICAgIC8vICAgQXNzZXQodG9rZW5JZCksCiAgICAvLyAgIHJlY2lwaWVudEFkZHJlc3MsCiAgICAvLyAgIGFtb3VudCwKICAgIC8vICAgcmVjZWl2ZUFtb3VudE1pbiwKICAgIC8vICk7CiAgICB1bmNvdmVyIDMKICAgIHVuY292ZXIgNAogICAgdW5jb3ZlciA0CiAgICBjYWxsc3ViIHJlY2VpdmVBbmRTd2FwRnJvbVZVc2QKICAgIHN3YXAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MzQ4CiAgICAvLyByZXR1cm4gMTU3MDA7CiAgICBpbnRjIDQgLy8gMTU3MDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MjMzCiAgICAvLyBjb25zdCBleHRyYUdhczogdWludDY0ID0gdmFsdWUgLSBzdG9yYWdlRmVlOwogICAgLQogICAgZHVwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjIzNAogICAgLy8gaWYgKGV4dHJhR2FzID4gMCkgewogICAgYnogcmVjZWl2ZVRva2Vuc19hZnRlcl9pZl9lbHNlQDUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MjM1LTIzOAogICAgLy8gaXR4bi5wYXltZW50KHsKICAgIC8vICAgYW1vdW50OiBleHRyYUdhcywKICAgIC8vICAgcmVjZWl2ZXI6IHJlY2lwaWVudEFkZHJlc3MuYnl0ZXMsCiAgICAvLyB9KS5zdWJtaXQoKTsKICAgIGl0eG5fYmVnaW4KICAgIGRpZyA0CiAgICBpdHhuX2ZpZWxkIFJlY2VpdmVyCiAgICBkdXAKICAgIGl0eG5fZmllbGQgQW1vdW50CiAgICBpbnRjXzAgLy8gMQogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18xIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICBpdHhuX3N1Ym1pdAoKcmVjZWl2ZVRva2Vuc19hZnRlcl9pZl9lbHNlQDU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjI0MC0yNDYKICAgIC8vIGVtaXQ8VG9rZW5zUmVjZWl2ZWQ+KHsKICAgIC8vICAgcmVjZWl2ZUFtb3VudCwKICAgIC8vICAgcmVjaXBpZW50OiByZWNpcGllbnRBZGRyZXNzLAogICAgLy8gICBub25jZSwKICAgIC8vICAgbWVzc2VuZ2VyOiBBTExCUklER0VfTUVTU0VOR0VSLAogICAgLy8gICBtZXNzYWdlOiBtZXNzYWdlV2l0aFNlbmRlciwKICAgIC8vIH0pOwogICAgZGlnIDEKICAgIGl0b2IKICAgIGRpZyA1CiAgICBjb25jYXQKICAgIGRpZyA0CiAgICBjb25jYXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MjQ0CiAgICAvLyBtZXNzZW5nZXI6IEFMTEJSSURHRV9NRVNTRU5HRVIsCiAgICBieXRlYyAxMCAvLyAweDAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjI0MC0yNDYKICAgIC8vIGVtaXQ8VG9rZW5zUmVjZWl2ZWQ+KHsKICAgIC8vICAgcmVjZWl2ZUFtb3VudCwKICAgIC8vICAgcmVjaXBpZW50OiByZWNpcGllbnRBZGRyZXNzLAogICAgLy8gICBub25jZSwKICAgIC8vICAgbWVzc2VuZ2VyOiBBTExCUklER0VfTUVTU0VOR0VSLAogICAgLy8gICBtZXNzYWdlOiBtZXNzYWdlV2l0aFNlbmRlciwKICAgIC8vIH0pOwogICAgY29uY2F0CiAgICBkaWcgMwogICAgY29uY2F0CiAgICBwdXNoYnl0ZXMgMHg0NTgzNmFkNiAvLyBtZXRob2QgIlRva2Vuc1JlY2VpdmVkKHVpbnQ2NCxhZGRyZXNzLGJ5dGVbMzJdLGJ5dGUsYnl0ZVszMl0pIgogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MTkzCiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjpCcmlkZ2UucmVnaXN0ZXJCcmlkZ2Vbcm91dGluZ10oKSAtPiB2b2lkOgpyZWdpc3RlckJyaWRnZToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MjQ5CiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzAgLy8gMQogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50OAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZHVwCiAgICBsZW4KICAgIGludGNfMyAvLyAzMgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC5zdGF0aWNfYXJyYXk8YXJjNC51aW50OCwgMzI+CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjI1MQogICAgLy8gdGhpcy5vbmx5T3duZXIoKTsKICAgIGNhbGxzdWIgb25seU93bmVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjY0CiAgICAvLyBvdGhlckJyaWRnZXMgPSBCb3hNYXA8Qnl0ZSwgU3RhdGljQnl0ZXM8MzI+Pih7IGtleVByZWZpeDogJ2InIH0pOwogICAgcHVzaGJ5dGVzICJiIgogICAgdW5jb3ZlciAyCiAgICBjb25jYXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MjUyCiAgICAvLyB0aGlzLm90aGVyQnJpZGdlcyhjaGFpbklkKS52YWx1ZSA9IGJyaWRnZUFkZHJlc3M7CiAgICBzd2FwCiAgICBib3hfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjI0OQogICAgLy8gQGFiaW1ldGhvZCgpCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czo6QnJpZGdlLmFkZEJyaWRnZVRva2VuW3JvdXRpbmddKCkgLT4gdm9pZDoKYWRkQnJpZGdlVG9rZW46CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjI1NQogICAgLy8gQGFiaW1ldGhvZCgpCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18wIC8vIDEKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDgKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzMgLy8gMzIKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQuc3RhdGljX2FycmF5PGFyYzQudWludDgsIDMyPgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoyNTcKICAgIC8vIHRoaXMub25seU93bmVyKCk7CiAgICBjYWxsc3ViIG9ubHlPd25lcgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czozNjEKICAgIC8vIHJldHVybiBjaGFpbklkLmJ5dGVzLmNvbmNhdCh0b2tlbi5ieXRlcyk7CiAgICBjb25jYXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6NjcKICAgIC8vIG90aGVyQnJpZGdlVG9rZW5zID0gQm94TWFwPGJ5dGVzLCBTdGF0aWNCeXRlcz4oeyBrZXlQcmVmaXg6ICd0JyB9KTsKICAgIGJ5dGVjIDcgLy8gInQiCiAgICBzd2FwCiAgICBjb25jYXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MjU4CiAgICAvLyB0aGlzLm90aGVyQnJpZGdlVG9rZW5zKHRoaXMuX2dldE90aGVyQnJpZGdlVG9rZW5zS2V5KGNoYWluSWQsIHRva2VuQWRkcmVzcykpLnZhbHVlID0gbmV3IFN0YXRpY0J5dGVzKCk7CiAgICBwdXNoYnl0ZXMgMHgKICAgIGJveF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MjU1CiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjpCcmlkZ2UucmVtb3ZlQnJpZGdlVG9rZW5bcm91dGluZ10oKSAtPiB2b2lkOgpyZW1vdmVCcmlkZ2VUb2tlbjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MjYxCiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzAgLy8gMQogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50OAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZHVwCiAgICBsZW4KICAgIGludGNfMyAvLyAzMgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC5zdGF0aWNfYXJyYXk8YXJjNC51aW50OCwgMzI+CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjI2MwogICAgLy8gdGhpcy5vbmx5T3duZXIoKTsKICAgIGNhbGxzdWIgb25seU93bmVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjM2MQogICAgLy8gcmV0dXJuIGNoYWluSWQuYnl0ZXMuY29uY2F0KHRva2VuLmJ5dGVzKTsKICAgIGNvbmNhdAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czo2NwogICAgLy8gb3RoZXJCcmlkZ2VUb2tlbnMgPSBCb3hNYXA8Ynl0ZXMsIFN0YXRpY0J5dGVzPih7IGtleVByZWZpeDogJ3QnIH0pOwogICAgYnl0ZWMgNyAvLyAidCIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoyNjQKICAgIC8vIHRoaXMub3RoZXJCcmlkZ2VUb2tlbnModGhpcy5fZ2V0T3RoZXJCcmlkZ2VUb2tlbnNLZXkoY2hhaW5JZCwgdG9rZW5BZGRyZXNzKSkuZGVsZXRlKCk7CiAgICBib3hfZGVsCiAgICBwb3AKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MjYxCiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjpCcmlkZ2Uud2l0aGRyYXdHYXNUb2tlbnNbcm91dGluZ10oKSAtPiB2b2lkOgp3aXRoZHJhd0dhc1Rva2VuczoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MjY3CiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzIgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50NjQKICAgIGJ0b2kKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MjY5CiAgICAvLyB0aGlzLm9ubHlPd25lcigpOwogICAgY2FsbHN1YiBvbmx5T3duZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MjcwCiAgICAvLyBpdHhuLnBheW1lbnQoeyBhbW91bnQ6IGFtb3VudCwgcmVjZWl2ZXI6IHRoaXMub3duZXIudmFsdWUuYnl0ZXMgfSkuc3VibWl0KCk7CiAgICBpdHhuX2JlZ2luCiAgICBpbnRjXzEgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9vd25hYmxlLmFsZ28udHM6NgogICAgLy8gcHJvdGVjdGVkIG93bmVyID0gR2xvYmFsU3RhdGU8QWRkcmVzcz4oKTsKICAgIGJ5dGVjXzIgLy8gIm93bmVyIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoyNzAKICAgIC8vIGl0eG4ucGF5bWVudCh7IGFtb3VudDogYW1vdW50LCByZWNlaXZlcjogdGhpcy5vd25lci52YWx1ZS5ieXRlcyB9KS5zdWJtaXQoKTsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICBpdHhuX2ZpZWxkIFJlY2VpdmVyCiAgICBpdHhuX2ZpZWxkIEFtb3VudAogICAgaW50Y18wIC8vIDEKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludGNfMSAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgaXR4bl9zdWJtaXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MjY3CiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjpCcmlkZ2Uud2l0aGRyYXdCcmlkZ2luZ0ZlZUluVG9rZW5zW3JvdXRpbmddKCkgLT4gdm9pZDoKd2l0aGRyYXdCcmlkZ2luZ0ZlZUluVG9rZW5zOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoyNzMKICAgIC8vIEBhYmltZXRob2QoKQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgYnRvaQogICAgZHVwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjI3NQogICAgLy8gdGhpcy5vbmx5T3duZXIoKTsKICAgIGNhbGxzdWIgb25seU93bmVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjI3NgogICAgLy8gY29uc3QgYXBwQWNjdDogQWNjb3VudCA9IEdsb2JhbC5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzOwogICAgZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKICAgIGR1cAogICAgY292ZXIgMgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoyNzcKICAgIC8vIGNvbnN0IGJhbGFuY2UgPSBhc3NldC5iYWxhbmNlKGFwcEFjY3QpOwogICAgc3dhcAogICAgYXNzZXRfaG9sZGluZ19nZXQgQXNzZXRCYWxhbmNlCiAgICBzd2FwCiAgICBkdXAKICAgIHVuY292ZXIgMgogICAgYXNzZXJ0IC8vIGFjY291bnQgb3B0ZWQgaW50byBhc3NldAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoyNzgKICAgIC8vIGlmIChiYWxhbmNlID4gVWludDY0KDApKSB7CiAgICBieiB3aXRoZHJhd0JyaWRnaW5nRmVlSW5Ub2tlbnNfYWZ0ZXJfaWZfZWxzZUA0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjI3OS0yODQKICAgIC8vIGl0eG4uYXNzZXRUcmFuc2Zlcih7CiAgICAvLyAgIHNlbmRlcjogYXBwQWNjdCwKICAgIC8vICAgeGZlckFzc2V0OiBhc3NldCwKICAgIC8vICAgYXNzZXRBbW91bnQ6IGJhbGFuY2UsCiAgICAvLyAgIGFzc2V0UmVjZWl2ZXI6IHRoaXMub3duZXIudmFsdWUuYnl0ZXMsCiAgICAvLyB9KS5zdWJtaXQoKTsKICAgIGl0eG5fYmVnaW4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MjgzCiAgICAvLyBhc3NldFJlY2VpdmVyOiB0aGlzLm93bmVyLnZhbHVlLmJ5dGVzLAogICAgaW50Y18xIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvb3duYWJsZS5hbGdvLnRzOjYKICAgIC8vIHByb3RlY3RlZCBvd25lciA9IEdsb2JhbFN0YXRlPEFkZHJlc3M+KCk7CiAgICBieXRlY18yIC8vICJvd25lciIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MjgzCiAgICAvLyBhc3NldFJlY2VpdmVyOiB0aGlzLm93bmVyLnZhbHVlLmJ5dGVzLAogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIGl0eG5fZmllbGQgQXNzZXRSZWNlaXZlcgogICAgZHVwCiAgICBpdHhuX2ZpZWxkIEFzc2V0QW1vdW50CiAgICBkaWcgMgogICAgaXR4bl9maWVsZCBYZmVyQXNzZXQKICAgIGRpZyAxCiAgICBpdHhuX2ZpZWxkIFNlbmRlcgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoyNzktMjg0CiAgICAvLyBpdHhuLmFzc2V0VHJhbnNmZXIoewogICAgLy8gICBzZW5kZXI6IGFwcEFjY3QsCiAgICAvLyAgIHhmZXJBc3NldDogYXNzZXQsCiAgICAvLyAgIGFzc2V0QW1vdW50OiBiYWxhbmNlLAogICAgLy8gICBhc3NldFJlY2VpdmVyOiB0aGlzLm93bmVyLnZhbHVlLmJ5dGVzLAogICAgLy8gfSkuc3VibWl0KCk7CiAgICBwdXNoaW50IDQgLy8gNAogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18xIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICBpdHhuX3N1Ym1pdAoKd2l0aGRyYXdCcmlkZ2luZ0ZlZUluVG9rZW5zX2FmdGVyX2lmX2Vsc2VANDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MjczCiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjpCcmlkZ2UuZ2V0QnJpZGdpbmdDb3N0SW5Ub2tlbnNbcm91dGluZ10oKSAtPiB2b2lkOgpnZXRCcmlkZ2luZ0Nvc3RJblRva2VuczoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6Mjg4CiAgICAvLyBAYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUgfSkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzAgLy8gMQogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50OAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgYnRvaQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoyOTMKICAgIC8vIGNvbnN0IGJyaWRnZUdhc0Ftb3VudDogdWludDY0ID0gdGhpcy5nZXRHYXNVc2FnZShkZXN0aW5hdGlvbkNoYWluSWQpOwogICAgZGlnIDEKICAgIGNhbGxzdWIgc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9nYXMtdXNhZ2UuYWxnby50czo6R2FzVXNhZ2UuZ2V0R2FzVXNhZ2UKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6Mjk0LTI5OAogICAgLy8gY29uc3QgbWVzc2VuZ2VyR2FzQW1vdW50OiB1aW50NjQgPSBhYmlDYWxsKHsKICAgIC8vICAgbWV0aG9kOiBNZXNzZW5nZXIucHJvdG90eXBlLmdldEdhc1VzYWdlLAogICAgLy8gICBhcHBJZDogdGhpcy5tZXNzZW5nZXIudmFsdWUuaWQsCiAgICAvLyAgIGFyZ3M6IFtkZXN0aW5hdGlvbkNoYWluSWRdLAogICAgLy8gfSkucmV0dXJuVmFsdWU7CiAgICBpdHhuX2JlZ2luCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjI5NgogICAgLy8gYXBwSWQ6IHRoaXMubWVzc2VuZ2VyLnZhbHVlLmlkLAogICAgaW50Y18xIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6NTgKICAgIC8vIG1lc3NlbmdlciA9IEdsb2JhbFN0YXRlPEFwcGxpY2F0aW9uPigpOwogICAgYnl0ZWMgNiAvLyAibWVzc2VuZ2VyIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoyOTYKICAgIC8vIGFwcElkOiB0aGlzLm1lc3Nlbmdlci52YWx1ZS5pZCwKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjI5NC0yOTgKICAgIC8vIGNvbnN0IG1lc3Nlbmdlckdhc0Ftb3VudDogdWludDY0ID0gYWJpQ2FsbCh7CiAgICAvLyAgIG1ldGhvZDogTWVzc2VuZ2VyLnByb3RvdHlwZS5nZXRHYXNVc2FnZSwKICAgIC8vICAgYXBwSWQ6IHRoaXMubWVzc2VuZ2VyLnZhbHVlLmlkLAogICAgLy8gICBhcmdzOiBbZGVzdGluYXRpb25DaGFpbklkXSwKICAgIC8vIH0pLnJldHVyblZhbHVlOwogICAgYnl0ZWMgMTQgLy8gbWV0aG9kICJnZXRHYXNVc2FnZShieXRlKXVpbnQ2NCIKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBkaWcgMwogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25JRAogICAgcHVzaGludCA2IC8vIGFwcGwKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludGNfMSAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgaXR4bl9zdWJtaXQKICAgIGl0eG4gTGFzdExvZwogICAgZHVwCiAgICBleHRyYWN0IDQgMAogICAgc3dhcAogICAgZXh0cmFjdCAwIDQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgPT0KICAgIGFzc2VydCAvLyBCeXRlcyBoYXMgdmFsaWQgcHJlZml4CiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjMwMC0zMDQKICAgIC8vIHJldHVybiBhYmlDYWxsKHsKICAgIC8vICAgbWV0aG9kOiBHYXNPcmFjbGUucHJvdG90eXBlLmdldFRyYW5zYWN0aW9uR2FzQ29zdEluVVNELAogICAgLy8gICBhcHBJZDogdGhpcy5nYXNPcmFjbGUudmFsdWUuaWQsCiAgICAvLyAgIGFyZ3M6IFtkZXN0aW5hdGlvbkNoYWluSWQsIGJyaWRnZUdhc0Ftb3VudCArIG1lc3Nlbmdlckdhc0Ftb3VudF0sCiAgICAvLyB9KS5yZXR1cm5WYWx1ZSAvIHRoaXMuZnJvbUdhc09yYWNsZVNjYWxpbmdGYWN0b3IoYXNzZXQpLnZhbHVlOwogICAgaXR4bl9iZWdpbgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czozMDIKICAgIC8vIGFwcElkOiB0aGlzLmdhc09yYWNsZS52YWx1ZS5pZCwKICAgIGludGNfMSAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2dhcy11c2FnZS5hbGdvLnRzOjkKICAgIC8vIGdhc09yYWNsZSA9IEdsb2JhbFN0YXRlPEFwcGxpY2F0aW9uPigpOwogICAgYnl0ZWNfMyAvLyAiZ2FzT3JhY2xlIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czozMDIKICAgIC8vIGFwcElkOiB0aGlzLmdhc09yYWNsZS52YWx1ZS5pZCwKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjMwMwogICAgLy8gYXJnczogW2Rlc3RpbmF0aW9uQ2hhaW5JZCwgYnJpZGdlR2FzQW1vdW50ICsgbWVzc2VuZ2VyR2FzQW1vdW50XSwKICAgIGNvdmVyIDIKICAgICsKICAgIGl0b2IKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MzAwLTMwNAogICAgLy8gcmV0dXJuIGFiaUNhbGwoewogICAgLy8gICBtZXRob2Q6IEdhc09yYWNsZS5wcm90b3R5cGUuZ2V0VHJhbnNhY3Rpb25HYXNDb3N0SW5VU0QsCiAgICAvLyAgIGFwcElkOiB0aGlzLmdhc09yYWNsZS52YWx1ZS5pZCwKICAgIC8vICAgYXJnczogW2Rlc3RpbmF0aW9uQ2hhaW5JZCwgYnJpZGdlR2FzQW1vdW50ICsgbWVzc2VuZ2VyR2FzQW1vdW50XSwKICAgIC8vIH0pLnJldHVyblZhbHVlIC8gdGhpcy5mcm9tR2FzT3JhY2xlU2NhbGluZ0ZhY3Rvcihhc3NldCkudmFsdWU7CiAgICBwdXNoYnl0ZXMgMHg3YmY3ZDUwYyAvLyBtZXRob2QgImdldFRyYW5zYWN0aW9uR2FzQ29zdEluVVNEKGJ5dGUsdWludDY0KXVpbnQ2NCIKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICB1bmNvdmVyIDMKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbklECiAgICBwdXNoaW50IDYgLy8gYXBwbAogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18xIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICBpdHhuX3N1Ym1pdAogICAgaXR4biBMYXN0TG9nCiAgICBkdXAKICAgIGV4dHJhY3QgNCAwCiAgICBzd2FwCiAgICBleHRyYWN0IDAgNAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICA9PQogICAgYXNzZXJ0IC8vIEJ5dGVzIGhhcyB2YWxpZCBwcmVmaXgKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzIgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50NjQKICAgIGJ0b2kKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MzA0CiAgICAvLyB9KS5yZXR1cm5WYWx1ZSAvIHRoaXMuZnJvbUdhc09yYWNsZVNjYWxpbmdGYWN0b3IoYXNzZXQpLnZhbHVlOwogICAgc3dhcAogICAgaXRvYgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czozNgogICAgLy8gcHJvdGVjdGVkIGZyb21HYXNPcmFjbGVTY2FsaW5nRmFjdG9yID0gQm94TWFwPEFzc2V0LCB1aW50NjQ+KHsga2V5UHJlZml4OiAnZScgfSk7CiAgICBwdXNoYnl0ZXMgImUiCiAgICBzd2FwCiAgICBjb25jYXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MzA0CiAgICAvLyB9KS5yZXR1cm5WYWx1ZSAvIHRoaXMuZnJvbUdhc09yYWNsZVNjYWxpbmdGYWN0b3IoYXNzZXQpLnZhbHVlOwogICAgYm94X2dldAogICAgYXNzZXJ0IC8vIEJveCBtdXN0IGhhdmUgdmFsdWUKICAgIGJ0b2kKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MzAwLTMwNAogICAgLy8gcmV0dXJuIGFiaUNhbGwoewogICAgLy8gICBtZXRob2Q6IEdhc09yYWNsZS5wcm90b3R5cGUuZ2V0VHJhbnNhY3Rpb25HYXNDb3N0SW5VU0QsCiAgICAvLyAgIGFwcElkOiB0aGlzLmdhc09yYWNsZS52YWx1ZS5pZCwKICAgIC8vICAgYXJnczogW2Rlc3RpbmF0aW9uQ2hhaW5JZCwgYnJpZGdlR2FzQW1vdW50ICsgbWVzc2VuZ2VyR2FzQW1vdW50XSwKICAgIC8vIH0pLnJldHVyblZhbHVlIC8gdGhpcy5mcm9tR2FzT3JhY2xlU2NhbGluZ0ZhY3Rvcihhc3NldCkudmFsdWU7CiAgICAvCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjI4OAogICAgLy8gQGFiaW1ldGhvZCh7IHJlYWRvbmx5OiB0cnVlIH0pCiAgICBpdG9iCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czo6QnJpZGdlLmhhc2hNZXNzYWdlW3JvdXRpbmddKCkgLT4gdm9pZDoKaGFzaE1lc3NhZ2U6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjMwNwogICAgLy8gQGFiaW1ldGhvZCh7IHJlYWRvbmx5OiB0cnVlIH0pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18zIC8vIDMyCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnN0YXRpY19hcnJheTxhcmM0LnVpbnQ4LCAzMj4KICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDMKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzAgLy8gMQogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50OAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgNAogICAgZHVwCiAgICBsZW4KICAgIGludGNfMCAvLyAxCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ4CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyA1CiAgICBkdXAKICAgIGxlbgogICAgaW50Y18zIC8vIDMyCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnN0YXRpY19hcnJheTxhcmM0LnVpbnQ4LCAzMj4KICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDYKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzMgLy8gMzIKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQuc3RhdGljX2FycmF5PGFyYzQudWludDgsIDMyPgogICAgY2FsbHN1YiBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjpCcmlkZ2UuaGFzaE1lc3NhZ2UKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjpCcmlkZ2UuaXNPdGhlckJyaWRnZVRva2VuU3VwcG9ydGVkW3JvdXRpbmddKCkgLT4gdm9pZDoKaXNPdGhlckJyaWRnZVRva2VuU3VwcG9ydGVkOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czozMzQKICAgIC8vIEBhYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMCAvLyAxCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ4CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18zIC8vIDMyCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnN0YXRpY19hcnJheTxhcmM0LnVpbnQ4LCAzMj4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MzYxCiAgICAvLyByZXR1cm4gY2hhaW5JZC5ieXRlcy5jb25jYXQodG9rZW4uYnl0ZXMpOwogICAgY29uY2F0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjY3CiAgICAvLyBvdGhlckJyaWRnZVRva2VucyA9IEJveE1hcDxieXRlcywgU3RhdGljQnl0ZXM+KHsga2V5UHJlZml4OiAndCcgfSk7CiAgICBieXRlYyA3IC8vICJ0IgogICAgc3dhcAogICAgY29uY2F0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjMzNgogICAgLy8gcmV0dXJuIHRoaXMub3RoZXJCcmlkZ2VUb2tlbnModGhpcy5fZ2V0T3RoZXJCcmlkZ2VUb2tlbnNLZXkoY2hhaW5JZCwgdG9rZW4pKS5leGlzdHM7CiAgICBib3hfbGVuCiAgICBidXJ5IDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MzM0CiAgICAvLyBAYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUgfSkKICAgIGJ5dGVjIDExIC8vIDB4MDAKICAgIGludGNfMSAvLyAwCiAgICB1bmNvdmVyIDIKICAgIHNldGJpdAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6OkJyaWRnZS5nZXRUcmFuc2FjdGlvbkNvc3Rbcm91dGluZ10oKSAtPiB2b2lkOgpnZXRUcmFuc2FjdGlvbkNvc3Q6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjMzOQogICAgLy8gQGFiaW1ldGhvZCh7IHJlYWRvbmx5OiB0cnVlIH0pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18wIC8vIDEKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDgKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MzQxCiAgICAvLyByZXR1cm4gdGhpcy5nZXRUcmFuc2FjdGlvblJlbGF5ZXJDb3N0KGNoYWluSWQpICsgdGhpcy5nZXRTZW5kVHJhbnNhY3Rpb25TdG9yYWdlQ29zdCgpOwogICAgY2FsbHN1YiBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2dhcy11c2FnZS5hbGdvLnRzOjpHYXNVc2FnZS5nZXRUcmFuc2FjdGlvblJlbGF5ZXJDb3N0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjM1NQogICAgLy8gcmV0dXJuIDE1NzAwOwogICAgaW50YyA0IC8vIDE1NzAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjM0MQogICAgLy8gcmV0dXJuIHRoaXMuZ2V0VHJhbnNhY3Rpb25SZWxheWVyQ29zdChjaGFpbklkKSArIHRoaXMuZ2V0U2VuZFRyYW5zYWN0aW9uU3RvcmFnZUNvc3QoKTsKICAgICsKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MzM5CiAgICAvLyBAYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUgfSkKICAgIGl0b2IKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjpSb3V0ZXIuc3dhcFtyb3V0aW5nXSgpIC0+IHZvaWQ6CnN3YXA6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjgxCiAgICAvLyBAYWJpbWV0aG9kKHsgZGVmYXVsdEFyZ3VtZW50czogeyBidWRnZXQ6IHsgY29uc3RhbnQ6IDEwMDAgfSB9IH0pCiAgICB0eG4gR3JvdXBJbmRleAogICAgaW50Y18wIC8vIDEKICAgIC0KICAgIGR1cAogICAgZ3R4bnMgVHlwZUVudW0KICAgIHB1c2hpbnQgNCAvLyBheGZlcgogICAgPT0KICAgIGFzc2VydCAvLyB0cmFuc2FjdGlvbiB0eXBlIGlzIGF4ZmVyCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18zIC8vIDMyCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnN0YXRpY19hcnJheTxhcmM0LnVpbnQ4LCAzMj4KICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDMKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzIgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50NjQKICAgIGJ0b2kKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDQKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzIgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50NjQKICAgIGJ0b2kKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcm91dGVyLmFsZ28udHM6ODkKICAgIC8vIGVuc3VyZUJ1ZGdldChidWRnZXQsIE9wVXBGZWVTb3VyY2UuR3JvdXBDcmVkaXQpOwogICAgaW50Y18xIC8vIDAKICAgIGNhbGxzdWIgZW5zdXJlX2J1ZGdldAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czo2NAogICAgLy8gYXNzZXJ0KHRoaXMuY2FuU3dhcC52YWx1ZSwgJ1JvdXRlcjogc3dhcCBwcm9oaWJpdGVkJyk7CiAgICBpbnRjXzEgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czo1MwogICAgLy8gY2FuU3dhcCA9IEdsb2JhbFN0YXRlPGJvb2xlYW4+KHsgaW5pdGlhbFZhbHVlOiB0cnVlIH0pOwogICAgYnl0ZWNfMSAvLyAiY2FuU3dhcCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcm91dGVyLmFsZ28udHM6NjQKICAgIC8vIGFzc2VydCh0aGlzLmNhblN3YXAudmFsdWUsICdSb3V0ZXI6IHN3YXAgcHJvaGliaXRlZCcpOwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIGFzc2VydCAvLyBSb3V0ZXI6IHN3YXAgcHJvaGliaXRlZAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czo5MQogICAgLy8gY29uc3Qgc2VuZGVyID0gbmV3IEFkZHJlc3MoVHhuLnNlbmRlcik7CiAgICB0eG4gU2VuZGVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjkyCiAgICAvLyBjb25zdCBhbW91bnQgPSBhbW91bnRGcm9tQXNzZXRUcmFuc2Zlcihhc3NldFRyYW5zZmVyUmVmKTsKICAgIGRpZyA0CiAgICBjYWxsc3ViIGFtb3VudEZyb21Bc3NldFRyYW5zZmVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjkzCiAgICAvLyBjb25zdCB2VXNkQW1vdW50ID0gdGhpcy5zZW5kQW5kU3dhcFRvVlVzZChhc3NldFRyYW5zZmVyUmVmLnhmZXJBc3NldCwgc2VuZGVyLCBhbW91bnQpOwogICAgdW5jb3ZlciA1CiAgICBndHhucyBYZmVyQXNzZXQKICAgIGR1cAogICAgZGlnIDMKICAgIGRpZyAzCiAgICBjYWxsc3ViIHNlbmRBbmRTd2FwVG9WVXNkCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjk0CiAgICAvLyBjb25zdCByZWNlaXZlZEFtb3VudCA9IHRoaXMucmVjZWl2ZUFuZFN3YXBGcm9tVlVzZChyZWNlaXZlQXNzZXQsIHJlY2lwaWVudCwgdlVzZEFtb3VudCwgcmVjZWl2ZUFtb3VudE1pbik7CiAgICBkaWcgNgogICAgZGlnIDYKICAgIHVuY292ZXIgMgogICAgdW5jb3ZlciA2CiAgICBjYWxsc3ViIHJlY2VpdmVBbmRTd2FwRnJvbVZVc2QKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcm91dGVyLmFsZ28udHM6OTUtMTAyCiAgICAvLyBlbWl0PFN3YXBwZWQ+KHsKICAgIC8vICAgc2VuZGVyLAogICAgLy8gICByZWNpcGllbnQsCiAgICAvLyAgIHRva2VuSWQ6IGFzc2V0VHJhbnNmZXJSZWYueGZlckFzc2V0LmlkLAogICAgLy8gICByZWNlaXZlVG9rZW5JZDogcmVjZWl2ZUFzc2V0LmlkLAogICAgLy8gICBhbW91bnQsCiAgICAvLyAgIHJlY2VpdmVkQW1vdW50LAogICAgLy8gfSk7CiAgICB1bmNvdmVyIDMKICAgIHVuY292ZXIgNAogICAgY29uY2F0CiAgICB1bmNvdmVyIDIKICAgIGl0b2IKICAgIGNvbmNhdAogICAgdW5jb3ZlciAzCiAgICBpdG9iCiAgICBjb25jYXQKICAgIHVuY292ZXIgMgogICAgaXRvYgogICAgY29uY2F0CiAgICBzd2FwCiAgICBpdG9iCiAgICBjb25jYXQKICAgIHB1c2hieXRlcyAweDE1NDA0NGIzIC8vIG1ldGhvZCAiU3dhcHBlZChhZGRyZXNzLGFkZHJlc3MsdWludDY0LHVpbnQ2NCx1aW50NjQsdWludDY0KSIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjgxCiAgICAvLyBAYWJpbWV0aG9kKHsgZGVmYXVsdEFyZ3VtZW50czogeyBidWRnZXQ6IHsgY29uc3RhbnQ6IDEwMDAgfSB9IH0pCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czo6Um91dGVyLmFkZFBvb2xbcm91dGluZ10oKSAtPiB2b2lkOgphZGRQb29sOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czoxMTIKICAgIC8vIEBhYmltZXRob2QoKQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgYnRvaQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgYnRvaQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czoxMTQKICAgIC8vIHRoaXMub25seU93bmVyKCk7CiAgICBjYWxsc3ViIG9ubHlPd25lcgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czoxMTUKICAgIC8vIHRoaXMucG9vbHMoYXNzZXQpLnZhbHVlID0gcG9vbElkOwogICAgZHVwCiAgICBpdG9iCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjM0CiAgICAvLyBwb29scyA9IEJveE1hcDxBc3NldCwgdWludDY0Pih7IGtleVByZWZpeDogJ3AnIH0pOwogICAgYnl0ZWMgOCAvLyAicCIKICAgIGRpZyAxCiAgICBjb25jYXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcm91dGVyLmFsZ28udHM6MTE1CiAgICAvLyB0aGlzLnBvb2xzKGFzc2V0KS52YWx1ZSA9IHBvb2xJZDsKICAgIHVuY292ZXIgMwogICAgaXRvYgogICAgYm94X3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czoxMTYKICAgIC8vIGNvbnN0IHRva2VuRGVjaW1hbHMgPSBhc3NldC5kZWNpbWFsczsKICAgIHN3YXAKICAgIGFzc2V0X3BhcmFtc19nZXQgQXNzZXREZWNpbWFscwogICAgYXNzZXJ0IC8vIGFzc2V0IGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czoxMTcKICAgIC8vIHRoaXMuYnJpZGdpbmdGZWVDb252ZXJzaW9uU2NhbGluZ0ZhY3Rvcihhc3NldCkudmFsdWUgPSAxMCAqKiAoT1JBQ0xFX1BSSUNFX1BSRUNJU0lPTiAtIHRva2VuRGVjaW1hbHMgKyBDSEFJTl9QUkVDSVNJT04pOwogICAgcHVzaGludCA5IC8vIDkKICAgIHN3YXAKICAgIC0KICAgIGR1cAogICAgcHVzaGludCA2IC8vIDYKICAgICsKICAgIHB1c2hpbnQgMTAgLy8gMTAKICAgIHN3YXAKICAgIGV4cAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czozOQogICAgLy8gcHJvdGVjdGVkIGJyaWRnaW5nRmVlQ29udmVyc2lvblNjYWxpbmdGYWN0b3IgPSBCb3hNYXA8QXNzZXQsIHVpbnQ2ND4oeyBrZXlQcmVmaXg6ICdmJyB9KTsKICAgIHB1c2hieXRlcyAiZiIKICAgIGRpZyAzCiAgICBjb25jYXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcm91dGVyLmFsZ28udHM6MTE3CiAgICAvLyB0aGlzLmJyaWRnaW5nRmVlQ29udmVyc2lvblNjYWxpbmdGYWN0b3IoYXNzZXQpLnZhbHVlID0gMTAgKiogKE9SQUNMRV9QUklDRV9QUkVDSVNJT04gLSB0b2tlbkRlY2ltYWxzICsgQ0hBSU5fUFJFQ0lTSU9OKTsKICAgIHN3YXAKICAgIGl0b2IKICAgIGJveF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcm91dGVyLmFsZ28udHM6MTE4CiAgICAvLyB0aGlzLmZyb21HYXNPcmFjbGVTY2FsaW5nRmFjdG9yKGFzc2V0KS52YWx1ZSA9IDEwICoqIChPUkFDTEVfUFJJQ0VfUFJFQ0lTSU9OIC0gdG9rZW5EZWNpbWFscyk7CiAgICBwdXNoaW50IDEwIC8vIDEwCiAgICBzd2FwCiAgICBleHAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcm91dGVyLmFsZ28udHM6MzYKICAgIC8vIHByb3RlY3RlZCBmcm9tR2FzT3JhY2xlU2NhbGluZ0ZhY3RvciA9IEJveE1hcDxBc3NldCwgdWludDY0Pih7IGtleVByZWZpeDogJ2UnIH0pOwogICAgcHVzaGJ5dGVzICJlIgogICAgdW5jb3ZlciAyCiAgICBjb25jYXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcm91dGVyLmFsZ28udHM6MTE4CiAgICAvLyB0aGlzLmZyb21HYXNPcmFjbGVTY2FsaW5nRmFjdG9yKGFzc2V0KS52YWx1ZSA9IDEwICoqIChPUkFDTEVfUFJJQ0VfUFJFQ0lTSU9OIC0gdG9rZW5EZWNpbWFscyk7CiAgICBzd2FwCiAgICBpdG9iCiAgICBib3hfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjExMgogICAgLy8gQGFiaW1ldGhvZCgpCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czo6Um91dGVyLnJlbW92ZVBvb2xbcm91dGluZ10oKSAtPiB2b2lkOgpyZW1vdmVQb29sOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czoxMjEKICAgIC8vIEBhYmltZXRob2QoKQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgYnRvaQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czoxMjMKICAgIC8vIHRoaXMub25seU93bmVyKCk7CiAgICBjYWxsc3ViIG9ubHlPd25lcgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czoxMjQKICAgIC8vIHRoaXMucG9vbHModG9rZW5JZCkuZGVsZXRlKCk7CiAgICBpdG9iCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjM0CiAgICAvLyBwb29scyA9IEJveE1hcDxBc3NldCwgdWludDY0Pih7IGtleVByZWZpeDogJ3AnIH0pOwogICAgYnl0ZWMgOCAvLyAicCIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czoxMjQKICAgIC8vIHRoaXMucG9vbHModG9rZW5JZCkuZGVsZXRlKCk7CiAgICBib3hfZGVsCiAgICBwb3AKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcm91dGVyLmFsZ28udHM6MTIxCiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjpSb3V0ZXIuc3RvcFN3YXBbcm91dGluZ10oKSAtPiB2b2lkOgpzdG9wU3dhcDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcm91dGVyLmFsZ28udHM6NzEKICAgIC8vIGFzc2VydChvcC5UeG4uc2VuZGVyLmJ5dGVzID09PSB0aGlzLnN0b3BBdXRob3JpdHkudmFsdWUuYnl0ZXMsICdSb3V0ZXI6IGlzIG5vdCBzdG9wQXV0aG9yaXR5Jyk7CiAgICB0eG4gU2VuZGVyCiAgICBpbnRjXzEgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czo0MgogICAgLy8gcHJpdmF0ZSBzdG9wQXV0aG9yaXR5ID0gR2xvYmFsU3RhdGU8QWRkcmVzcz4oKTsvLyBjYW4gcmVzdHJpY3QgZGVwb3NpdCBvciB3aXRoZHJhdyBvcGVyYXRpb25zCiAgICBieXRlYyA5IC8vICJzdG9wQXV0aG9yaXR5IgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czo3MQogICAgLy8gYXNzZXJ0KG9wLlR4bi5zZW5kZXIuYnl0ZXMgPT09IHRoaXMuc3RvcEF1dGhvcml0eS52YWx1ZS5ieXRlcywgJ1JvdXRlcjogaXMgbm90IHN0b3BBdXRob3JpdHknKTsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICA9PQogICAgYXNzZXJ0IC8vIFJvdXRlcjogaXMgbm90IHN0b3BBdXRob3JpdHkKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcm91dGVyLmFsZ28udHM6NTMKICAgIC8vIGNhblN3YXAgPSBHbG9iYWxTdGF0ZTxib29sZWFuPih7IGluaXRpYWxWYWx1ZTogdHJ1ZSB9KTsKICAgIGJ5dGVjXzEgLy8gImNhblN3YXAiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjEzMwogICAgLy8gdGhpcy5jYW5Td2FwLnZhbHVlID0gZmFsc2U7CiAgICBpbnRjXzEgLy8gMAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcm91dGVyLmFsZ28udHM6MTMwCiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjpSb3V0ZXIuc3RhcnRTd2FwW3JvdXRpbmddKCkgLT4gdm9pZDoKc3RhcnRTd2FwOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czoxNDEKICAgIC8vIHRoaXMub25seU93bmVyKCk7CiAgICBjYWxsc3ViIG9ubHlPd25lcgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czo1MwogICAgLy8gY2FuU3dhcCA9IEdsb2JhbFN0YXRlPGJvb2xlYW4+KHsgaW5pdGlhbFZhbHVlOiB0cnVlIH0pOwogICAgYnl0ZWNfMSAvLyAiY2FuU3dhcCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcm91dGVyLmFsZ28udHM6MTQyCiAgICAvLyB0aGlzLmNhblN3YXAudmFsdWUgPSB0cnVlOwogICAgaW50Y18wIC8vIDEKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjEzOQogICAgLy8gQGFiaW1ldGhvZCgpCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czo6Um91dGVyLnNldFN0b3BBdXRob3JpdHlbcm91dGluZ10oKSAtPiB2b2lkOgpzZXRTdG9wQXV0aG9yaXR5OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czoxNDgKICAgIC8vIEBhYmltZXRob2QoKQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMyAvLyAzMgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC5zdGF0aWNfYXJyYXk8YXJjNC51aW50OCwgMzI+CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjE1MAogICAgLy8gdGhpcy5vbmx5T3duZXIoKTsKICAgIGNhbGxzdWIgb25seU93bmVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjQyCiAgICAvLyBwcml2YXRlIHN0b3BBdXRob3JpdHkgPSBHbG9iYWxTdGF0ZTxBZGRyZXNzPigpOy8vIGNhbiByZXN0cmljdCBkZXBvc2l0IG9yIHdpdGhkcmF3IG9wZXJhdGlvbnMKICAgIGJ5dGVjIDkgLy8gInN0b3BBdXRob3JpdHkiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjE1MQogICAgLy8gdGhpcy5zdG9wQXV0aG9yaXR5LnZhbHVlID0gc3RvcEF1dGhvcml0eTsKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjE0OAogICAgLy8gQGFiaW1ldGhvZCgpCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czo6Um91dGVyLnNldFJlYmFsYW5jZXJbcm91dGluZ10oKSAtPiB2b2lkOgpzZXRSZWJhbGFuY2VyOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czoxNTcKICAgIC8vIEBhYmltZXRob2QoKQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMyAvLyAzMgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC5zdGF0aWNfYXJyYXk8YXJjNC51aW50OCwgMzI+CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjE1OQogICAgLy8gdGhpcy5vbmx5T3duZXIoKTsKICAgIGNhbGxzdWIgb25seU93bmVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjUyCiAgICAvLyBwcml2YXRlIHJlYmFsYW5jZXIgPSBHbG9iYWxTdGF0ZTxBZGRyZXNzPih7IGluaXRpYWxWYWx1ZTogbmV3IEFkZHJlc3MoYnplcm8oMCkpIH0pOy8vIGNhbiByZXN0cmljdCBkZXBvc2l0IG9yIHdpdGhkcmF3IG9wZXJhdGlvbnMKICAgIGJ5dGVjIDQgLy8gInJlYmFsYW5jZXIiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjE2MAogICAgLy8gdGhpcy5yZWJhbGFuY2VyLnZhbHVlID0gcmViYWxhbmNlcjsKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjE1NwogICAgLy8gQGFiaW1ldGhvZCgpCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9nYXMtdXNhZ2UuYWxnby50czo6R2FzVXNhZ2UuZ2V0R2FzVXNhZ2Vbcm91dGluZ10oKSAtPiB2b2lkOgpnZXRHYXNVc2FnZToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvZ2FzLXVzYWdlLmFsZ28udHM6MTcKICAgIC8vIEBhYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMCAvLyAxCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ4CiAgICBjYWxsc3ViIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvZ2FzLXVzYWdlLmFsZ28udHM6Okdhc1VzYWdlLmdldEdhc1VzYWdlCiAgICBpdG9iCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9nYXMtdXNhZ2UuYWxnby50czo6R2FzVXNhZ2Uuc2V0R2FzVXNhZ2Vbcm91dGluZ10oKSAtPiB2b2lkOgpzZXRHYXNVc2FnZToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvZ2FzLXVzYWdlLmFsZ28udHM6MjIKICAgIC8vIEBhYmltZXRob2QoKQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMCAvLyAxCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ4CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2dhcy11c2FnZS5hbGdvLnRzOjI0CiAgICAvLyB0aGlzLm9ubHlPd25lcigpOwogICAgY2FsbHN1YiBvbmx5T3duZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvZ2FzLXVzYWdlLmFsZ28udHM6MTAKICAgIC8vIGdhc1VzYWdlID0gQm94TWFwPEJ5dGUsIHVpbnQ2ND4oeyBrZXlQcmVmaXg6ICd1JyB9KTsKICAgIGJ5dGVjIDEyIC8vICJ1IgogICAgdW5jb3ZlciAyCiAgICBjb25jYXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvZ2FzLXVzYWdlLmFsZ28udHM6MjUKICAgIC8vIHRoaXMuZ2FzVXNhZ2UoY2hhaW5JZCkudmFsdWUgPSBnYXNBbW91bnQ7CiAgICBzd2FwCiAgICBpdG9iCiAgICBib3hfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2dhcy11c2FnZS5hbGdvLnRzOjIyCiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2dhcy11c2FnZS5hbGdvLnRzOjpHYXNVc2FnZS5zZXRHYXNPcmFjbGVbcm91dGluZ10oKSAtPiB2b2lkOgpzZXRHYXNPcmFjbGU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2dhcy11c2FnZS5hbGdvLnRzOjI4CiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzIgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50NjQKICAgIGJ0b2kKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvZ2FzLXVzYWdlLmFsZ28udHM6MzAKICAgIC8vIHRoaXMub25seU93bmVyKCk7CiAgICBjYWxsc3ViIG9ubHlPd25lcgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9nYXMtdXNhZ2UuYWxnby50czo5CiAgICAvLyBnYXNPcmFjbGUgPSBHbG9iYWxTdGF0ZTxBcHBsaWNhdGlvbj4oKTsKICAgIGJ5dGVjXzMgLy8gImdhc09yYWNsZSIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvZ2FzLXVzYWdlLmFsZ28udHM6MzEKICAgIC8vIHRoaXMuZ2FzT3JhY2xlLnZhbHVlID0gZ2FzT3JhY2xlOwogICAgc3dhcAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvZ2FzLXVzYWdlLmFsZ28udHM6MjgKICAgIC8vIEBhYmltZXRob2QoKQogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvZ2FzLXVzYWdlLmFsZ28udHM6Okdhc1VzYWdlLmdldFRyYW5zYWN0aW9uUmVsYXllckNvc3Rbcm91dGluZ10oKSAtPiB2b2lkOgpnZXRUcmFuc2FjdGlvblJlbGF5ZXJDb3N0OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9nYXMtdXNhZ2UuYWxnby50czozNAogICAgLy8gQGFiaW1ldGhvZCh7IHJlYWRvbmx5OiB0cnVlIH0pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18wIC8vIDEKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDgKICAgIGNhbGxzdWIgc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9nYXMtdXNhZ2UuYWxnby50czo6R2FzVXNhZ2UuZ2V0VHJhbnNhY3Rpb25SZWxheWVyQ29zdAogICAgaXRvYgogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvb3duYWJsZS5hbGdvLnRzOjpPd25hYmxlLnRyYW5zZmVyT3duZXJzaGlwW3JvdXRpbmddKCkgLT4gdm9pZDoKdHJhbnNmZXJPd25lcnNoaXA6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL293bmFibGUuYWxnby50czoxNgogICAgLy8gQGFiaW1ldGhvZCgpCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18zIC8vIDMyCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnN0YXRpY19hcnJheTxhcmM0LnVpbnQ4LCAzMj4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvb3duYWJsZS5hbGdvLnRzOjE4CiAgICAvLyB0aGlzLm9ubHlPd25lcigpOwogICAgY2FsbHN1YiBvbmx5T3duZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvb3duYWJsZS5hbGdvLnRzOjYKICAgIC8vIHByb3RlY3RlZCBvd25lciA9IEdsb2JhbFN0YXRlPEFkZHJlc3M+KCk7CiAgICBieXRlY18yIC8vICJvd25lciIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvb3duYWJsZS5hbGdvLnRzOjE5CiAgICAvLyB0aGlzLm93bmVyLnZhbHVlID0gbmV3T3duZXI7CiAgICBzd2FwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9vd25hYmxlLmFsZ28udHM6MTYKICAgIC8vIEBhYmltZXRob2QoKQogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6OkJyaWRnZS5fc3dhcEFuZEJyaWRnZShmZWVGcm9tTmF0aXZlOiB1aW50NjQsIGFzc2V0VHJhbnNmZXJSZWY6IHVpbnQ2NCwgcmVjaXBpZW50OiBieXRlcywgZGVzdGluYXRpb25DaGFpbklkOiBieXRlcywgcmVjZWl2ZVRva2VuOiBieXRlcywgbm9uY2U6IGJ5dGVzLCBmZWVUb2tlbkFtb3VudDogdWludDY0LCBidWRnZXQ6IHVpbnQ2NCkgLT4gdm9pZDoKX3N3YXBBbmRCcmlkZ2U6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjExNi0xMjUKICAgIC8vIHByaXZhdGUgX3N3YXBBbmRCcmlkZ2UoCiAgICAvLyAgIGZlZUZyb21OYXRpdmU6IHVpbnQ2NCwKICAgIC8vICAgYXNzZXRUcmFuc2ZlclJlZjogZ3R4bi5Bc3NldFRyYW5zZmVyVHhuLAogICAgLy8gICByZWNpcGllbnQ6IFN0YXRpY0J5dGVzPDMyPiwKICAgIC8vICAgZGVzdGluYXRpb25DaGFpbklkOiBCeXRlLAogICAgLy8gICByZWNlaXZlVG9rZW46IFN0YXRpY0J5dGVzPDMyPiwKICAgIC8vICAgbm9uY2U6IFN0YXRpY0J5dGVzPDMyPiwKICAgIC8vICAgZmVlVG9rZW5BbW91bnQ6IHVpbnQ2NCwKICAgIC8vICAgYnVkZ2V0OiB1aW50NjQsCiAgICAvLyApOiB2b2lkIHsKICAgIHByb3RvIDggMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoxMjYKICAgIC8vIGVuc3VyZUJ1ZGdldChidWRnZXQsIE9wVXBGZWVTb3VyY2UuR3JvdXBDcmVkaXQpOwogICAgZnJhbWVfZGlnIC0xCiAgICBpbnRjXzEgLy8gMAogICAgY2FsbHN1YiBlbnN1cmVfYnVkZ2V0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjY0CiAgICAvLyBhc3NlcnQodGhpcy5jYW5Td2FwLnZhbHVlLCAnUm91dGVyOiBzd2FwIHByb2hpYml0ZWQnKTsKICAgIGludGNfMSAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjUzCiAgICAvLyBjYW5Td2FwID0gR2xvYmFsU3RhdGU8Ym9vbGVhbj4oeyBpbml0aWFsVmFsdWU6IHRydWUgfSk7CiAgICBieXRlY18xIC8vICJjYW5Td2FwIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czo2NAogICAgLy8gYXNzZXJ0KHRoaXMuY2FuU3dhcC52YWx1ZSwgJ1JvdXRlcjogc3dhcCBwcm9oaWJpdGVkJyk7CiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgYXNzZXJ0IC8vIFJvdXRlcjogc3dhcCBwcm9oaWJpdGVkCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjEyOAogICAgLy8gY29uc3QgYW1vdW50ID0gYW1vdW50RnJvbUFzc2V0VHJhbnNmZXIoYXNzZXRUcmFuc2ZlclJlZik7CiAgICBmcmFtZV9kaWcgLTcKICAgIGNhbGxzdWIgYW1vdW50RnJvbUFzc2V0VHJhbnNmZXIKICAgIGR1cAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoxMjkKICAgIC8vIGFzc2VydChhbW91bnQgPiBmZWVUb2tlbkFtb3VudCwgJ0JyaWRnZTogYW1vdW50IHRvbyBsb3cgZm9yIGZlZScpOwogICAgZnJhbWVfZGlnIC0yCiAgICA+CiAgICBhc3NlcnQgLy8gQnJpZGdlOiBhbW91bnQgdG9vIGxvdyBmb3IgZmVlCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjEzMAogICAgLy8gYXNzZXJ0KCFyZWNpcGllbnQuYnl0ZXMuZXF1YWxzKGJ6ZXJvKDMyKSksICdCcmlkZ2U6IGJyaWRnZSB0byB0aGUgemVybyBhZGRyZXNzJyk7CiAgICBpbnRjXzMgLy8gMzIKICAgIGJ6ZXJvCiAgICBmcmFtZV9kaWcgLTYKICAgID09CiAgICAhCiAgICBhc3NlcnQgLy8gQnJpZGdlOiBicmlkZ2UgdG8gdGhlIHplcm8gYWRkcmVzcwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoxMzIKICAgIC8vIGNvbnN0IGZlZUZyb21TdGFibGU6IHVpbnQ2NCA9IHRoaXMuX2NvbnZlcnRCcmlkZ2luZ0ZlZUluVG9rZW5zVG9OYXRpdmVUb2tlbihhc3NldFRyYW5zZmVyUmVmLnhmZXJBc3NldCwgZmVlVG9rZW5BbW91bnQpOwogICAgZnJhbWVfZGlnIC03CiAgICBndHhucyBYZmVyQXNzZXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MzY1CiAgICAvLyBpZiAoZmVlVG9rZW5BbW91bnQgPT09IDApIHJldHVybiAwOwogICAgZnJhbWVfZGlnIC0yCiAgICBibnogX3N3YXBBbmRCcmlkZ2VfYWZ0ZXJfaWZfZWxzZUAzCiAgICBpbnRjXzEgLy8gMAoKX3N3YXBBbmRCcmlkZ2VfYWZ0ZXJfaW5saW5lZF9zbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjpCcmlkZ2UuX2NvbnZlcnRCcmlkZ2luZ0ZlZUluVG9rZW5zVG9OYXRpdmVUb2tlbkA1OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoxMzMKICAgIC8vIGNvbnN0IGJyaWRnaW5nRmVlOiB1aW50NjQgPSBmZWVGcm9tTmF0aXZlICsgZmVlRnJvbVN0YWJsZTsKICAgIGZyYW1lX2RpZyAtOAogICAgZGlnIDEKICAgICsKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MTM0CiAgICAvLyBlbWl0PEJyaWRnaW5nRmVlRnJvbVRva2Vucz4oeyBmZWVGcm9tTmF0aXZlLCBmZWVGcm9tU3RhYmxlLCBmZWVTdGFibGVUb2tlbkFtb3VudDogZmVlVG9rZW5BbW91bnQgfSk7CiAgICBmcmFtZV9kaWcgLTgKICAgIGl0b2IKICAgIHVuY292ZXIgMgogICAgaXRvYgogICAgY29uY2F0CiAgICBmcmFtZV9kaWcgLTIKICAgIGl0b2IKICAgIGNvbmNhdAogICAgcHVzaGJ5dGVzIDB4MzZiYWZhZGQgLy8gbWV0aG9kICJCcmlkZ2luZ0ZlZUZyb21Ub2tlbnModWludDY0LHVpbnQ2NCx1aW50NjQpIgogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MTM2CiAgICAvLyBjb25zdCBhbW91bnRBZnRlckZlZTogdWludDY0ID0gYW1vdW50IC0gZmVlVG9rZW5BbW91bnQ7CiAgICBmcmFtZV9kaWcgMAogICAgZnJhbWVfZGlnIC0yCiAgICAtCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjEzOAogICAgLy8gY29uc3QgdlVzZEFtb3VudCA9IHRoaXMuc2VuZEFuZFN3YXBUb1ZVc2QoYXNzZXRUcmFuc2ZlclJlZi54ZmVyQXNzZXQsIHNlbmRlciwgYW1vdW50QWZ0ZXJGZWUpOwogICAgZnJhbWVfZGlnIDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MTM3CiAgICAvLyBjb25zdCBzZW5kZXIgPSBuZXcgQWRkcmVzcyhUeG4uc2VuZGVyKTsKICAgIHR4biBTZW5kZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MTM4CiAgICAvLyBjb25zdCB2VXNkQW1vdW50ID0gdGhpcy5zZW5kQW5kU3dhcFRvVlVzZChhc3NldFRyYW5zZmVyUmVmLnhmZXJBc3NldCwgc2VuZGVyLCBhbW91bnRBZnRlckZlZSk7CiAgICB1bmNvdmVyIDIKICAgIGNhbGxzdWIgc2VuZEFuZFN3YXBUb1ZVc2QKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MTUwCiAgICAvLyBhc3NlcnQoZGVzdGluYXRpb25DaGFpbklkICE9PSB0aGlzLmNoYWluSWQudmFsdWUsICdCcmlkZ2U6IHdyb25nIGRlc3RpbmF0aW9uIGNoYWluJyk7CiAgICBpbnRjXzEgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czo1NwogICAgLy8gY2hhaW5JZCA9IEdsb2JhbFN0YXRlPEJ5dGU+KCk7CiAgICBieXRlYyA1IC8vICJjaGFpbklkIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoxNTAKICAgIC8vIGFzc2VydChkZXN0aW5hdGlvbkNoYWluSWQgIT09IHRoaXMuY2hhaW5JZC52YWx1ZSwgJ0JyaWRnZTogd3JvbmcgZGVzdGluYXRpb24gY2hhaW4nKTsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICBmcmFtZV9kaWcgLTUKICAgIGRpZyAxCiAgICAhPQogICAgYXNzZXJ0IC8vIEJyaWRnZTogd3JvbmcgZGVzdGluYXRpb24gY2hhaW4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MzYxCiAgICAvLyByZXR1cm4gY2hhaW5JZC5ieXRlcy5jb25jYXQodG9rZW4uYnl0ZXMpOwogICAgZnJhbWVfZGlnIC01CiAgICBmcmFtZV9kaWcgLTQKICAgIGNvbmNhdAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czo2NwogICAgLy8gb3RoZXJCcmlkZ2VUb2tlbnMgPSBCb3hNYXA8Ynl0ZXMsIFN0YXRpY0J5dGVzPih7IGtleVByZWZpeDogJ3QnIH0pOwogICAgYnl0ZWMgNyAvLyAidCIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoxNTEKICAgIC8vIGFzc2VydCh0aGlzLm90aGVyQnJpZGdlVG9rZW5zKHRoaXMuX2dldE90aGVyQnJpZGdlVG9rZW5zS2V5KGRlc3RpbmF0aW9uQ2hhaW5JZCwgcmVjZWl2ZVRva2VuKSkuZXhpc3RzLCAnQnJpZGdlOiB1bmtub3duIGNoYWluIG9yIHRva2VuJyk7CiAgICBib3hfbGVuCiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBCcmlkZ2U6IHVua25vd24gY2hhaW4gb3IgdG9rZW4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MTUzCiAgICAvLyBjb25zdCBtZXNzYWdlID0gdGhpcy5oYXNoTWVzc2FnZShhbW91bnQsIHJlY2lwaWVudCwgdGhpcy5jaGFpbklkLnZhbHVlLCBkZXN0aW5hdGlvbkNoYWluSWQsIHJlY2VpdmVUb2tlbiwgbm9uY2UpOwogICAgZGlnIDEKICAgIGZyYW1lX2RpZyAtNgogICAgdW5jb3ZlciAyCiAgICBmcmFtZV9kaWcgLTUKICAgIGZyYW1lX2RpZyAtNAogICAgZnJhbWVfZGlnIC0zCiAgICBjYWxsc3ViIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6OkJyaWRnZS5oYXNoTWVzc2FnZQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czozNDEKICAgIC8vIHJldHVybiB0aGlzLmdldFRyYW5zYWN0aW9uUmVsYXllckNvc3QoY2hhaW5JZCkgKyB0aGlzLmdldFNlbmRUcmFuc2FjdGlvblN0b3JhZ2VDb3N0KCk7CiAgICBmcmFtZV9kaWcgLTUKICAgIGNhbGxzdWIgc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9nYXMtdXNhZ2UuYWxnby50czo6R2FzVXNhZ2UuZ2V0VHJhbnNhY3Rpb25SZWxheWVyQ29zdAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czozNTUKICAgIC8vIHJldHVybiAxNTcwMDsKICAgIGludGMgNCAvLyAxNTcwMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czozNDEKICAgIC8vIHJldHVybiB0aGlzLmdldFRyYW5zYWN0aW9uUmVsYXllckNvc3QoY2hhaW5JZCkgKyB0aGlzLmdldFNlbmRUcmFuc2FjdGlvblN0b3JhZ2VDb3N0KCk7CiAgICArCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjYyCiAgICAvLyBzZW50TWVzc2FnZXMgPSBCb3hNYXA8U3RhdGljQnl0ZXM8MzI+LCBTdGF0aWNCeXRlcz4oeyBrZXlQcmVmaXg6ICdzJyB9KTsKICAgIHB1c2hieXRlcyAicyIKICAgIGRpZyAyCiAgICBjb25jYXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MTcyCiAgICAvLyBhc3NlcnQoIXRoaXMuc2VudE1lc3NhZ2VzKG1lc3NhZ2UpLmV4aXN0cywgJ0JyaWRnZTogdG9rZW5zIGFscmVhZHkgc2VudCcpOwogICAgZHVwCiAgICBib3hfbGVuCiAgICBidXJ5IDEKICAgICEKICAgIGFzc2VydCAvLyBCcmlkZ2U6IHRva2VucyBhbHJlYWR5IHNlbnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MTc0CiAgICAvLyB0aGlzLnNlbnRNZXNzYWdlcyhtZXNzYWdlKS52YWx1ZSA9IG5ldyBTdGF0aWNCeXRlcygpOwogICAgcHVzaGJ5dGVzIDB4CiAgICBib3hfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjE3NgogICAgLy8gY29uc3QgZGVzdGluYXRpb25DaGFpbklkID0gbWVzc2FnZS5hdCgxKTsKICAgIGRpZyAxCiAgICBleHRyYWN0IDEgMSAvLyBvbiBlcnJvcjogaW5kZXggYWNjZXNzIGlzIG91dCBvZiBib3VuZHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MTc3LTE4MQogICAgLy8gY29uc3QgbWVzc2FnZUNvc3QgPSBhYmlDYWxsKHsKICAgIC8vICAgbWV0aG9kOiBNZXNzZW5nZXIucHJvdG90eXBlLmdldFRyYW5zYWN0aW9uQ29zdCwKICAgIC8vICAgYXBwSWQ6IHRoaXMubWVzc2VuZ2VyLnZhbHVlLmlkLAogICAgLy8gICBhcmdzOiBbZGVzdGluYXRpb25DaGFpbklkXSwKICAgIC8vIH0pLnJldHVyblZhbHVlOwogICAgaXR4bl9iZWdpbgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoxNzkKICAgIC8vIGFwcElkOiB0aGlzLm1lc3Nlbmdlci52YWx1ZS5pZCwKICAgIGludGNfMSAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjU4CiAgICAvLyBtZXNzZW5nZXIgPSBHbG9iYWxTdGF0ZTxBcHBsaWNhdGlvbj4oKTsKICAgIGJ5dGVjIDYgLy8gIm1lc3NlbmdlciIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MTc5CiAgICAvLyBhcHBJZDogdGhpcy5tZXNzZW5nZXIudmFsdWUuaWQsCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoxNzctMTgxCiAgICAvLyBjb25zdCBtZXNzYWdlQ29zdCA9IGFiaUNhbGwoewogICAgLy8gICBtZXRob2Q6IE1lc3Nlbmdlci5wcm90b3R5cGUuZ2V0VHJhbnNhY3Rpb25Db3N0LAogICAgLy8gICBhcHBJZDogdGhpcy5tZXNzZW5nZXIudmFsdWUuaWQsCiAgICAvLyAgIGFyZ3M6IFtkZXN0aW5hdGlvbkNoYWluSWRdLAogICAgLy8gfSkucmV0dXJuVmFsdWU7CiAgICBieXRlYyAxMyAvLyBtZXRob2QgImdldFRyYW5zYWN0aW9uQ29zdChieXRlKXVpbnQ2NCIKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBzd2FwCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgZHVwCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uSUQKICAgIHB1c2hpbnQgNiAvLyBhcHBsCiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnRjXzEgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKICAgIGl0eG5fc3VibWl0CiAgICBpdHhuIExhc3RMb2cKICAgIGR1cAogICAgZXh0cmFjdCA0IDAKICAgIHN3YXAKICAgIGV4dHJhY3QgMCA0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgID09CiAgICBhc3NlcnQgLy8gQnl0ZXMgaGFzIHZhbGlkIHByZWZpeAogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgYnRvaQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoxODUKICAgIC8vIHJlY2VpdmVyOiB0aGlzLm1lc3Nlbmdlci52YWx1ZS5hZGRyZXNzLAogICAgZGlnIDEKICAgIGFwcF9wYXJhbXNfZ2V0IEFwcEFkZHJlc3MKICAgIGFzc2VydCAvLyBhcHBsaWNhdGlvbiBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MTg3LTE4OQogICAgLy8gYWJpQ2FsbCh7CiAgICAvLyAgIG1ldGhvZDogTWVzc2VuZ2VyLnByb3RvdHlwZS5zZW5kTWVzc2FnZSwgYXBwSWQ6IHRoaXMubWVzc2VuZ2VyLnZhbHVlLmlkLCBhcmdzOiBbcGF5bWVudFBhcmFtcywgbWVzc2FnZV0sCiAgICAvLyB9KTsKICAgIGl0eG5fYmVnaW4KICAgIGl0eG5fZmllbGQgUmVjZWl2ZXIKICAgIGR1cAogICAgaXR4bl9maWVsZCBBbW91bnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MTgzLTE4NgogICAgLy8gY29uc3QgcGF5bWVudFBhcmFtcyA9IGl0eG4ucGF5bWVudCh7CiAgICAvLyAgIGFtb3VudDogbWVzc2FnZUNvc3QsCiAgICAvLyAgIHJlY2VpdmVyOiB0aGlzLm1lc3Nlbmdlci52YWx1ZS5hZGRyZXNzLAogICAgLy8gfSk7CiAgICBpbnRjXzAgLy8gMQogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18xIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjE4Ny0xODkKICAgIC8vIGFiaUNhbGwoewogICAgLy8gICBtZXRob2Q6IE1lc3Nlbmdlci5wcm90b3R5cGUuc2VuZE1lc3NhZ2UsIGFwcElkOiB0aGlzLm1lc3Nlbmdlci52YWx1ZS5pZCwgYXJnczogW3BheW1lbnRQYXJhbXMsIG1lc3NhZ2VdLAogICAgLy8gfSk7CiAgICBpdHhuX25leHQKICAgIHB1c2hieXRlcyAweGQwMmY1N2Y1IC8vIG1ldGhvZCAic2VuZE1lc3NhZ2UocGF5LGJ5dGVbMzJdKXZvaWQiCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgdW5jb3ZlciAzCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgc3dhcAogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbklECiAgICBwdXNoaW50IDYgLy8gYXBwbAogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18xIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICBpdHhuX3N1Ym1pdAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoxNTYKICAgIC8vIGVtaXQ8UmVjZWl2ZUZlZT4oeyBicmlkZ2VUcmFuc2FjdGlvbkNvc3QsIG1lc3NhZ2VUcmFuc2FjdGlvbkNvc3QgfSk7CiAgICBkaWcgMQogICAgaXRvYgogICAgZGlnIDEKICAgIGl0b2IKICAgIGNvbmNhdAogICAgcHVzaGJ5dGVzIDB4NGI1NTQxOWIgLy8gbWV0aG9kICJSZWNlaXZlRmVlKHVpbnQ2NCx1aW50NjQpIgogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MTU3CiAgICAvLyBhc3NlcnQoYnJpZGdpbmdGZWUgPj0gYnJpZGdlVHJhbnNhY3Rpb25Db3N0ICsgbWVzc2FnZVRyYW5zYWN0aW9uQ29zdCwgJ0JyaWRnZTogbm90IGVub3VnaCBmZWUnKTsKICAgICsKICAgIHVuY292ZXIgMgogICAgPD0KICAgIGFzc2VydCAvLyBCcmlkZ2U6IG5vdCBlbm91Z2ggZmVlCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjE1OC0xNjUKICAgIC8vIGVtaXQ8VG9rZW5zU2VudD4oewogICAgLy8gICAgIGFtb3VudCwKICAgIC8vICAgICByZWNpcGllbnQsCiAgICAvLyAgICAgZGVzdGluYXRpb25DaGFpbklkLAogICAgLy8gICAgIHJlY2VpdmVUb2tlbiwKICAgIC8vICAgICBub25jZSwKICAgIC8vICAgICBtZXNzZW5nZXI6IEFMTEJSSURHRV9NRVNTRU5HRVIsCiAgICAvLyAgIH0sCiAgICBpdG9iCiAgICBmcmFtZV9kaWcgLTYKICAgIGNvbmNhdAogICAgZnJhbWVfZGlnIC01CiAgICBjb25jYXQKICAgIGZyYW1lX2RpZyAtNAogICAgY29uY2F0CiAgICBmcmFtZV9kaWcgLTMKICAgIGNvbmNhdAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoxNjQKICAgIC8vIG1lc3NlbmdlcjogQUxMQlJJREdFX01FU1NFTkdFUiwKICAgIGJ5dGVjIDEwIC8vIDB4MDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MTU4LTE2NQogICAgLy8gZW1pdDxUb2tlbnNTZW50Pih7CiAgICAvLyAgICAgYW1vdW50LAogICAgLy8gICAgIHJlY2lwaWVudCwKICAgIC8vICAgICBkZXN0aW5hdGlvbkNoYWluSWQsCiAgICAvLyAgICAgcmVjZWl2ZVRva2VuLAogICAgLy8gICAgIG5vbmNlLAogICAgLy8gICAgIG1lc3NlbmdlcjogQUxMQlJJREdFX01FU1NFTkdFUiwKICAgIC8vICAgfSwKICAgIGNvbmNhdAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoxNTgtMTY2CiAgICAvLyBlbWl0PFRva2Vuc1NlbnQ+KHsKICAgIC8vICAgICBhbW91bnQsCiAgICAvLyAgICAgcmVjaXBpZW50LAogICAgLy8gICAgIGRlc3RpbmF0aW9uQ2hhaW5JZCwKICAgIC8vICAgICByZWNlaXZlVG9rZW4sCiAgICAvLyAgICAgbm9uY2UsCiAgICAvLyAgICAgbWVzc2VuZ2VyOiBBTExCUklER0VfTUVTU0VOR0VSLAogICAgLy8gICB9LAogICAgLy8gKTsKICAgIHB1c2hieXRlcyAweDIyOWZiYWVjIC8vIG1ldGhvZCAiVG9rZW5zU2VudCh1aW50NjQsYnl0ZVszMl0sYnl0ZSxieXRlWzMyXSxieXRlWzMyXSxieXRlKSIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICByZXRzdWIKCl9zd2FwQW5kQnJpZGdlX2FmdGVyX2lmX2Vsc2VAMzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MzY3CiAgICAvLyBjb25zdCBmZWU6IHVpbnQ2NCA9IHRoaXMuYnJpZGdpbmdGZWVDb252ZXJzaW9uU2NhbGluZ0ZhY3Rvcihhc3NldCkudmFsdWUgKiBmZWVUb2tlbkFtb3VudCAvIGFiaUNhbGwoewogICAgZnJhbWVfZGlnIDEKICAgIGl0b2IKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcm91dGVyLmFsZ28udHM6MzkKICAgIC8vIHByb3RlY3RlZCBicmlkZ2luZ0ZlZUNvbnZlcnNpb25TY2FsaW5nRmFjdG9yID0gQm94TWFwPEFzc2V0LCB1aW50NjQ+KHsga2V5UHJlZml4OiAnZicgfSk7CiAgICBwdXNoYnl0ZXMgImYiCiAgICBzd2FwCiAgICBjb25jYXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MzY3CiAgICAvLyBjb25zdCBmZWU6IHVpbnQ2NCA9IHRoaXMuYnJpZGdpbmdGZWVDb252ZXJzaW9uU2NhbGluZ0ZhY3Rvcihhc3NldCkudmFsdWUgKiBmZWVUb2tlbkFtb3VudCAvIGFiaUNhbGwoewogICAgYm94X2dldAogICAgYXNzZXJ0IC8vIEJveCBtdXN0IGhhdmUgdmFsdWUKICAgIGJ0b2kKICAgIGZyYW1lX2RpZyAtMgogICAgKgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czozNjctMzcxCiAgICAvLyBjb25zdCBmZWU6IHVpbnQ2NCA9IHRoaXMuYnJpZGdpbmdGZWVDb252ZXJzaW9uU2NhbGluZ0ZhY3Rvcihhc3NldCkudmFsdWUgKiBmZWVUb2tlbkFtb3VudCAvIGFiaUNhbGwoewogICAgLy8gICBtZXRob2Q6IEdhc09yYWNsZS5wcm90b3R5cGUuZ2V0UHJpY2UsCiAgICAvLyAgIGFwcElkOiB0aGlzLmdhc09yYWNsZS52YWx1ZS5pZCwKICAgIC8vICAgYXJnczogW3RoaXMuY2hhaW5JZC52YWx1ZV0sCiAgICAvLyB9KS5yZXR1cm5WYWx1ZTsKICAgIGl0eG5fYmVnaW4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MzY5CiAgICAvLyBhcHBJZDogdGhpcy5nYXNPcmFjbGUudmFsdWUuaWQsCiAgICBpbnRjXzEgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9nYXMtdXNhZ2UuYWxnby50czo5CiAgICAvLyBnYXNPcmFjbGUgPSBHbG9iYWxTdGF0ZTxBcHBsaWNhdGlvbj4oKTsKICAgIGJ5dGVjXzMgLy8gImdhc09yYWNsZSIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MzY5CiAgICAvLyBhcHBJZDogdGhpcy5nYXNPcmFjbGUudmFsdWUuaWQsCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czozNzAKICAgIC8vIGFyZ3M6IFt0aGlzLmNoYWluSWQudmFsdWVdLAogICAgaW50Y18xIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6NTcKICAgIC8vIGNoYWluSWQgPSBHbG9iYWxTdGF0ZTxCeXRlPigpOwogICAgYnl0ZWMgNSAvLyAiY2hhaW5JZCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MzcwCiAgICAvLyBhcmdzOiBbdGhpcy5jaGFpbklkLnZhbHVlXSwKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjM2Ny0zNzEKICAgIC8vIGNvbnN0IGZlZTogdWludDY0ID0gdGhpcy5icmlkZ2luZ0ZlZUNvbnZlcnNpb25TY2FsaW5nRmFjdG9yKGFzc2V0KS52YWx1ZSAqIGZlZVRva2VuQW1vdW50IC8gYWJpQ2FsbCh7CiAgICAvLyAgIG1ldGhvZDogR2FzT3JhY2xlLnByb3RvdHlwZS5nZXRQcmljZSwKICAgIC8vICAgYXBwSWQ6IHRoaXMuZ2FzT3JhY2xlLnZhbHVlLmlkLAogICAgLy8gICBhcmdzOiBbdGhpcy5jaGFpbklkLnZhbHVlXSwKICAgIC8vIH0pLnJldHVyblZhbHVlOwogICAgcHVzaGJ5dGVzIDB4MWRiNzBjZGQgLy8gbWV0aG9kICJnZXRQcmljZShieXRlKXVpbnQ2NCIKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbklECiAgICBwdXNoaW50IDYgLy8gYXBwbAogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18xIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICBpdHhuX3N1Ym1pdAogICAgaXR4biBMYXN0TG9nCiAgICBkdXAKICAgIGV4dHJhY3QgNCAwCiAgICBzd2FwCiAgICBleHRyYWN0IDAgNAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICA9PQogICAgYXNzZXJ0IC8vIEJ5dGVzIGhhcyB2YWxpZCBwcmVmaXgKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzIgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50NjQKICAgIGJ0b2kKICAgIC8KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MTMyCiAgICAvLyBjb25zdCBmZWVGcm9tU3RhYmxlOiB1aW50NjQgPSB0aGlzLl9jb252ZXJ0QnJpZGdpbmdGZWVJblRva2Vuc1RvTmF0aXZlVG9rZW4oYXNzZXRUcmFuc2ZlclJlZi54ZmVyQXNzZXQsIGZlZVRva2VuQW1vdW50KTsKICAgIGIgX3N3YXBBbmRCcmlkZ2VfYWZ0ZXJfaW5saW5lZF9zbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjpCcmlkZ2UuX2NvbnZlcnRCcmlkZ2luZ0ZlZUluVG9rZW5zVG9OYXRpdmVUb2tlbkA1CgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czo6QnJpZGdlLmhhc2hNZXNzYWdlKGFtb3VudDogdWludDY0LCByZWNpcGllbnQ6IGJ5dGVzLCBzb3VyY2VDaGFpbklkOiBieXRlcywgZGVzdGluYXRpb25DaGFpbklkOiBieXRlcywgcmVjZWl2ZVRva2VuOiBieXRlcywgbm9uY2U6IGJ5dGVzKSAtPiBieXRlczoKc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czo6QnJpZGdlLmhhc2hNZXNzYWdlOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czozMDctMzE1CiAgICAvLyBAYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUgfSkKICAgIC8vIGhhc2hNZXNzYWdlKAogICAgLy8gICBhbW91bnQ6IHVpbnQ2NCwKICAgIC8vICAgcmVjaXBpZW50OiBTdGF0aWNCeXRlczwzMj4sCiAgICAvLyAgIHNvdXJjZUNoYWluSWQ6IEJ5dGUsCiAgICAvLyAgIGRlc3RpbmF0aW9uQ2hhaW5JZDogQnl0ZSwKICAgIC8vICAgcmVjZWl2ZVRva2VuOiBTdGF0aWNCeXRlczwzMj4sCiAgICAvLyAgIG5vbmNlOiBTdGF0aWNCeXRlczwzMj4sCiAgICAvLyApOiBTdGF0aWNCeXRlczwzMj4gewogICAgcHJvdG8gNiAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjMxNgogICAgLy8gY29uc3QgYW1vdW50MzIgPSBiemVybygyNCkuY29uY2F0KG9wLml0b2IoYW1vdW50KSk7CiAgICBwdXNoaW50IDI0IC8vIDI0CiAgICBiemVybwogICAgZnJhbWVfZGlnIC02CiAgICBpdG9iCiAgICBjb25jYXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MzE3CiAgICAvLyBjb25zdCBzb3VyY2VDaGFpbklkMzIgPSBiemVybygzMSkuY29uY2F0KHNvdXJjZUNoYWluSWQuYnl0ZXMpOwogICAgcHVzaGludCAzMSAvLyAzMQogICAgYnplcm8KICAgIGZyYW1lX2RpZyAtNAogICAgY29uY2F0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjMxOC0zMTkKICAgIC8vIGNvbnN0IHBhY2tlZCA9IGFtb3VudDMyCiAgICAvLyAgIC5jb25jYXQocmVjaXBpZW50LmJ5dGVzKQogICAgc3dhcAogICAgZnJhbWVfZGlnIC01CiAgICBjb25jYXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MzE4LTMyMAogICAgLy8gY29uc3QgcGFja2VkID0gYW1vdW50MzIKICAgIC8vICAgLmNvbmNhdChyZWNpcGllbnQuYnl0ZXMpCiAgICAvLyAgIC5jb25jYXQoc291cmNlQ2hhaW5JZDMyKQogICAgc3dhcAogICAgY29uY2F0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjMxOC0zMjEKICAgIC8vIGNvbnN0IHBhY2tlZCA9IGFtb3VudDMyCiAgICAvLyAgIC5jb25jYXQocmVjaXBpZW50LmJ5dGVzKQogICAgLy8gICAuY29uY2F0KHNvdXJjZUNoYWluSWQzMikKICAgIC8vICAgLmNvbmNhdChyZWNlaXZlVG9rZW4uYnl0ZXMpCiAgICBmcmFtZV9kaWcgLTIKICAgIGNvbmNhdAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czozMTgtMzIyCiAgICAvLyBjb25zdCBwYWNrZWQgPSBhbW91bnQzMgogICAgLy8gICAuY29uY2F0KHJlY2lwaWVudC5ieXRlcykKICAgIC8vICAgLmNvbmNhdChzb3VyY2VDaGFpbklkMzIpCiAgICAvLyAgIC5jb25jYXQocmVjZWl2ZVRva2VuLmJ5dGVzKQogICAgLy8gICAuY29uY2F0KG5vbmNlLmJ5dGVzKQogICAgZnJhbWVfZGlnIC0xCiAgICBjb25jYXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MzIzCiAgICAvLyAuY29uY2F0KEFMTEJSSURHRV9NRVNTRU5HRVIuYnl0ZXMpOwogICAgYnl0ZWMgMTAgLy8gMHgwMQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czozMTgtMzIzCiAgICAvLyBjb25zdCBwYWNrZWQgPSBhbW91bnQzMgogICAgLy8gICAuY29uY2F0KHJlY2lwaWVudC5ieXRlcykKICAgIC8vICAgLmNvbmNhdChzb3VyY2VDaGFpbklkMzIpCiAgICAvLyAgIC5jb25jYXQocmVjZWl2ZVRva2VuLmJ5dGVzKQogICAgLy8gICAuY29uY2F0KG5vbmNlLmJ5dGVzKQogICAgLy8gICAuY29uY2F0KEFMTEJSSURHRV9NRVNTRU5HRVIuYnl0ZXMpOwogICAgY29uY2F0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjMyNQogICAgLy8gY29uc3QgaGFzaCA9IG9wLmtlY2NhazI1NihwYWNrZWQpOyAvLyAzMiBieXRlcwogICAga2VjY2FrMjU2CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjMyOAogICAgLy8gY29uc3Qgd2l0aFNyYyA9IG9wLnNldEJ5dGUoaGFzaCwgMCwgb3AuYnRvaShzb3VyY2VDaGFpbklkLmJ5dGVzKSk7CiAgICBmcmFtZV9kaWcgLTQKICAgIGJ0b2kKICAgIGludGNfMSAvLyAwCiAgICBzd2FwCiAgICBzZXRieXRlCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjMyOQogICAgLy8gY29uc3Qgd2l0aERzdCA9IG9wLnNldEJ5dGUod2l0aFNyYywgMSwgb3AuYnRvaShkZXN0aW5hdGlvbkNoYWluSWQuYnl0ZXMpKTsKICAgIGZyYW1lX2RpZyAtMwogICAgYnRvaQogICAgaW50Y18wIC8vIDEKICAgIHN3YXAKICAgIHNldGJ5dGUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MzMxCiAgICAvLyByZXR1cm4gbmV3IFN0YXRpY0J5dGVzPDMyPih3aXRoRHN0KTsKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzMgLy8gMzIKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBzaXplCiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjpSb3V0ZXIucmVjZWl2ZUFuZFN3YXBGcm9tVlVzZChhc3NldDogdWludDY0LCByZWNpcGllbnQ6IGJ5dGVzLCB2VXNkQW1vdW50OiB1aW50NjQsIHJlY2VpdmVBbW91bnRNaW46IHVpbnQ2NCkgLT4gdWludDY0OgpyZWNlaXZlQW5kU3dhcEZyb21WVXNkOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czoxNjMtMTY4CiAgICAvLyBwcm90ZWN0ZWQgcmVjZWl2ZUFuZFN3YXBGcm9tVlVzZCgKICAgIC8vICAgYXNzZXQ6IEFzc2V0LAogICAgLy8gICByZWNpcGllbnQ6IEFkZHJlc3MsCiAgICAvLyAgIHZVc2RBbW91bnQ6IHVpbnQ2NCwKICAgIC8vICAgcmVjZWl2ZUFtb3VudE1pbjogdWludDY0LAogICAgLy8gKTogdWludDY0IHsKICAgIHByb3RvIDQgMQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czoxNjkKICAgIC8vIGFzc2VydCh0aGlzLnBvb2xzKGFzc2V0KS5leGlzdHMsICdSb3V0ZXI6IG5vIHJlY2VpdmUgcG9vbCcpOwogICAgZnJhbWVfZGlnIC00CiAgICBpdG9iCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjM0CiAgICAvLyBwb29scyA9IEJveE1hcDxBc3NldCwgdWludDY0Pih7IGtleVByZWZpeDogJ3AnIH0pOwogICAgYnl0ZWMgOCAvLyAicCIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czoxNjkKICAgIC8vIGFzc2VydCh0aGlzLnBvb2xzKGFzc2V0KS5leGlzdHMsICdSb3V0ZXI6IG5vIHJlY2VpdmUgcG9vbCcpOwogICAgZHVwCiAgICBib3hfbGVuCiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBSb3V0ZXI6IG5vIHJlY2VpdmUgcG9vbAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czoxNzAKICAgIC8vIGNvbnN0IHBvb2xJZCA9IHRoaXMucG9vbHMoYXNzZXQpLnZhbHVlOwogICAgYm94X2dldAogICAgcG9wCiAgICBidG9pCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjE3MS0xNzUKICAgIC8vIHJldHVybiBhYmlDYWxsKHsKICAgIC8vICAgbWV0aG9kOiBQb29sLnByb3RvdHlwZS5zd2FwRnJvbVZVc2QsCiAgICAvLyAgIGFwcElkOiBwb29sSWQsCiAgICAvLyAgIGFyZ3M6IFtyZWNpcGllbnQsIHZVc2RBbW91bnQsIHJlY2VpdmVBbW91bnRNaW4sIHJlY2lwaWVudCA9PT0gdGhpcy5yZWJhbGFuY2VyLnZhbHVlXSwKICAgIC8vIH0pLnJldHVyblZhbHVlOwogICAgaXR4bl9iZWdpbgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czoxNzQKICAgIC8vIGFyZ3M6IFtyZWNpcGllbnQsIHZVc2RBbW91bnQsIHJlY2VpdmVBbW91bnRNaW4sIHJlY2lwaWVudCA9PT0gdGhpcy5yZWJhbGFuY2VyLnZhbHVlXSwKICAgIGZyYW1lX2RpZyAtMgogICAgaXRvYgogICAgZnJhbWVfZGlnIC0xCiAgICBpdG9iCiAgICBpbnRjXzEgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czo1MgogICAgLy8gcHJpdmF0ZSByZWJhbGFuY2VyID0gR2xvYmFsU3RhdGU8QWRkcmVzcz4oeyBpbml0aWFsVmFsdWU6IG5ldyBBZGRyZXNzKGJ6ZXJvKDApKSB9KTsvLyBjYW4gcmVzdHJpY3QgZGVwb3NpdCBvciB3aXRoZHJhdyBvcGVyYXRpb25zCiAgICBieXRlYyA0IC8vICJyZWJhbGFuY2VyIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czoxNzQKICAgIC8vIGFyZ3M6IFtyZWNpcGllbnQsIHZVc2RBbW91bnQsIHJlY2VpdmVBbW91bnRNaW4sIHJlY2lwaWVudCA9PT0gdGhpcy5yZWJhbGFuY2VyLnZhbHVlXSwKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICBmcmFtZV9kaWcgLTMKICAgID09CiAgICBieXRlYyAxMSAvLyAweDAwCiAgICBpbnRjXzEgLy8gMAogICAgdW5jb3ZlciAyCiAgICBzZXRiaXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcm91dGVyLmFsZ28udHM6MTcxLTE3NQogICAgLy8gcmV0dXJuIGFiaUNhbGwoewogICAgLy8gICBtZXRob2Q6IFBvb2wucHJvdG90eXBlLnN3YXBGcm9tVlVzZCwKICAgIC8vICAgYXBwSWQ6IHBvb2xJZCwKICAgIC8vICAgYXJnczogW3JlY2lwaWVudCwgdlVzZEFtb3VudCwgcmVjZWl2ZUFtb3VudE1pbiwgcmVjaXBpZW50ID09PSB0aGlzLnJlYmFsYW5jZXIudmFsdWVdLAogICAgLy8gfSkucmV0dXJuVmFsdWU7CiAgICBwdXNoYnl0ZXMgMHgwZDFiNGMwNiAvLyBtZXRob2QgInN3YXBGcm9tVlVzZChhZGRyZXNzLHVpbnQ2NCx1aW50NjQsYm9vbCl1aW50NjQiCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgZnJhbWVfZGlnIC0zCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgdW5jb3ZlciAyCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgc3dhcAogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uSUQKICAgIHB1c2hpbnQgNiAvLyBhcHBsCiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnRjXzEgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKICAgIGl0eG5fc3VibWl0CiAgICBpdHhuIExhc3RMb2cKICAgIGR1cAogICAgZXh0cmFjdCA0IDAKICAgIHN3YXAKICAgIGV4dHJhY3QgMCA0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgID09CiAgICBhc3NlcnQgLy8gQnl0ZXMgaGFzIHZhbGlkIHByZWZpeAogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgYnRvaQogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czo6Um91dGVyLnNlbmRBbmRTd2FwVG9WVXNkKGFzc2V0OiB1aW50NjQsIHVzZXI6IGJ5dGVzLCBhbW91bnQ6IHVpbnQ2NCkgLT4gdWludDY0OgpzZW5kQW5kU3dhcFRvVlVzZDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcm91dGVyLmFsZ28udHM6MTc5CiAgICAvLyBwcm90ZWN0ZWQgc2VuZEFuZFN3YXBUb1ZVc2QoYXNzZXQ6IEFzc2V0LCB1c2VyOiBBZGRyZXNzLCBhbW91bnQ6IHVpbnQ2NCk6IHVpbnQ2NCB7CiAgICBwcm90byAzIDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcm91dGVyLmFsZ28udHM6MTgwCiAgICAvLyBhc3NlcnQodGhpcy5wb29scyhhc3NldCkuZXhpc3RzLCAnUm91dGVyOiBubyBwb29sJyk7CiAgICBmcmFtZV9kaWcgLTMKICAgIGl0b2IKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcm91dGVyLmFsZ28udHM6MzQKICAgIC8vIHBvb2xzID0gQm94TWFwPEFzc2V0LCB1aW50NjQ+KHsga2V5UHJlZml4OiAncCcgfSk7CiAgICBieXRlYyA4IC8vICJwIgogICAgc3dhcAogICAgY29uY2F0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjE4MAogICAgLy8gYXNzZXJ0KHRoaXMucG9vbHMoYXNzZXQpLmV4aXN0cywgJ1JvdXRlcjogbm8gcG9vbCcpOwogICAgZHVwCiAgICBib3hfbGVuCiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBSb3V0ZXI6IG5vIHBvb2wKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcm91dGVyLmFsZ28udHM6MTgxCiAgICAvLyBjb25zdCBwb29sSWQgPSB0aGlzLnBvb2xzKGFzc2V0KS52YWx1ZTsKICAgIGJveF9nZXQKICAgIHBvcAogICAgYnRvaQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czoxODMtMTg4CiAgICAvLyBpdHhuLmFzc2V0VHJhbnNmZXIoewogICAgLy8gICB4ZmVyQXNzZXQ6IGFzc2V0LAogICAgLy8gICBhc3NldEFtb3VudDogYW1vdW50LAogICAgLy8gICBhc3NldFJlY2VpdmVyOiBBcHBsaWNhdGlvbihwb29sSWQpLmFkZHJlc3MsCiAgICAvLyB9KQogICAgLy8gICAuc3VibWl0KCk7CiAgICBpdHhuX2JlZ2luCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjE4NgogICAgLy8gYXNzZXRSZWNlaXZlcjogQXBwbGljYXRpb24ocG9vbElkKS5hZGRyZXNzLAogICAgZHVwCiAgICBhcHBfcGFyYW1zX2dldCBBcHBBZGRyZXNzCiAgICBhc3NlcnQgLy8gYXBwbGljYXRpb24gZXhpc3RzCiAgICBpdHhuX2ZpZWxkIEFzc2V0UmVjZWl2ZXIKICAgIGZyYW1lX2RpZyAtMQogICAgaXR4bl9maWVsZCBBc3NldEFtb3VudAogICAgZnJhbWVfZGlnIC0zCiAgICBpdHhuX2ZpZWxkIFhmZXJBc3NldAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czoxODMtMTg3CiAgICAvLyBpdHhuLmFzc2V0VHJhbnNmZXIoewogICAgLy8gICB4ZmVyQXNzZXQ6IGFzc2V0LAogICAgLy8gICBhc3NldEFtb3VudDogYW1vdW50LAogICAgLy8gICBhc3NldFJlY2VpdmVyOiBBcHBsaWNhdGlvbihwb29sSWQpLmFkZHJlc3MsCiAgICAvLyB9KQogICAgcHVzaGludCA0IC8vIDQKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludGNfMSAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czoxODMtMTg4CiAgICAvLyBpdHhuLmFzc2V0VHJhbnNmZXIoewogICAgLy8gICB4ZmVyQXNzZXQ6IGFzc2V0LAogICAgLy8gICBhc3NldEFtb3VudDogYW1vdW50LAogICAgLy8gICBhc3NldFJlY2VpdmVyOiBBcHBsaWNhdGlvbihwb29sSWQpLmFkZHJlc3MsCiAgICAvLyB9KQogICAgLy8gICAuc3VibWl0KCk7CiAgICBpdHhuX3N1Ym1pdAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czoxOTAtMTk0CiAgICAvLyByZXR1cm4gYWJpQ2FsbCh7CiAgICAvLyAgIG1ldGhvZDogUG9vbC5wcm90b3R5cGUuc3dhcFRvVlVzZCwKICAgIC8vICAgYXBwSWQ6IHBvb2xJZCwKICAgIC8vICAgYXJnczogW3VzZXIsIGFtb3VudCwgdXNlciA9PT0gdGhpcy5yZWJhbGFuY2VyLnZhbHVlXSwKICAgIC8vIH0pLnJldHVyblZhbHVlOwogICAgaXR4bl9iZWdpbgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czoxOTMKICAgIC8vIGFyZ3M6IFt1c2VyLCBhbW91bnQsIHVzZXIgPT09IHRoaXMucmViYWxhbmNlci52YWx1ZV0sCiAgICBmcmFtZV9kaWcgLTEKICAgIGl0b2IKICAgIGludGNfMSAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjUyCiAgICAvLyBwcml2YXRlIHJlYmFsYW5jZXIgPSBHbG9iYWxTdGF0ZTxBZGRyZXNzPih7IGluaXRpYWxWYWx1ZTogbmV3IEFkZHJlc3MoYnplcm8oMCkpIH0pOy8vIGNhbiByZXN0cmljdCBkZXBvc2l0IG9yIHdpdGhkcmF3IG9wZXJhdGlvbnMKICAgIGJ5dGVjIDQgLy8gInJlYmFsYW5jZXIiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjE5MwogICAgLy8gYXJnczogW3VzZXIsIGFtb3VudCwgdXNlciA9PT0gdGhpcy5yZWJhbGFuY2VyLnZhbHVlXSwKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICBmcmFtZV9kaWcgLTIKICAgID09CiAgICBieXRlYyAxMSAvLyAweDAwCiAgICBpbnRjXzEgLy8gMAogICAgdW5jb3ZlciAyCiAgICBzZXRiaXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcm91dGVyLmFsZ28udHM6MTkwLTE5NAogICAgLy8gcmV0dXJuIGFiaUNhbGwoewogICAgLy8gICBtZXRob2Q6IFBvb2wucHJvdG90eXBlLnN3YXBUb1ZVc2QsCiAgICAvLyAgIGFwcElkOiBwb29sSWQsCiAgICAvLyAgIGFyZ3M6IFt1c2VyLCBhbW91bnQsIHVzZXIgPT09IHRoaXMucmViYWxhbmNlci52YWx1ZV0sCiAgICAvLyB9KS5yZXR1cm5WYWx1ZTsKICAgIHB1c2hieXRlcyAweGQ5NzhhZDE0IC8vIG1ldGhvZCAic3dhcFRvVlVzZChhZGRyZXNzLHVpbnQ2NCxib29sKXVpbnQ2NCIKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBmcmFtZV9kaWcgLTIKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBzd2FwCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25JRAogICAgcHVzaGludCA2IC8vIGFwcGwKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludGNfMSAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgaXR4bl9zdWJtaXQKICAgIGl0eG4gTGFzdExvZwogICAgZHVwCiAgICBleHRyYWN0IDQgMAogICAgc3dhcAogICAgZXh0cmFjdCAwIDQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgPT0KICAgIGFzc2VydCAvLyBCeXRlcyBoYXMgdmFsaWQgcHJlZml4CiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2dhcy11c2FnZS5hbGdvLnRzOjpHYXNVc2FnZS5nZXRHYXNVc2FnZShjaGFpbklkOiBieXRlcykgLT4gdWludDY0OgpzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2dhcy11c2FnZS5hbGdvLnRzOjpHYXNVc2FnZS5nZXRHYXNVc2FnZToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvZ2FzLXVzYWdlLmFsZ28udHM6MTctMTgKICAgIC8vIEBhYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgLy8gZ2V0R2FzVXNhZ2UoY2hhaW5JZDogQnl0ZSk6IHVpbnQ2NCB7CiAgICBwcm90byAxIDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvZ2FzLXVzYWdlLmFsZ28udHM6MTAKICAgIC8vIGdhc1VzYWdlID0gQm94TWFwPEJ5dGUsIHVpbnQ2ND4oeyBrZXlQcmVmaXg6ICd1JyB9KTsKICAgIGJ5dGVjIDEyIC8vICJ1IgogICAgZnJhbWVfZGlnIC0xCiAgICBjb25jYXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvZ2FzLXVzYWdlLmFsZ28udHM6MTkKICAgIC8vIHJldHVybiB0aGlzLmdhc1VzYWdlKGNoYWluSWQpLnZhbHVlOwogICAgYm94X2dldAogICAgYXNzZXJ0IC8vIEJveCBtdXN0IGhhdmUgdmFsdWUKICAgIGJ0b2kKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvZ2FzLXVzYWdlLmFsZ28udHM6Okdhc1VzYWdlLmdldFRyYW5zYWN0aW9uUmVsYXllckNvc3QoY2hhaW5JZDogYnl0ZXMpIC0+IHVpbnQ2NDoKc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9nYXMtdXNhZ2UuYWxnby50czo6R2FzVXNhZ2UuZ2V0VHJhbnNhY3Rpb25SZWxheWVyQ29zdDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvZ2FzLXVzYWdlLmFsZ28udHM6MzQtMzUKICAgIC8vIEBhYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgLy8gZ2V0VHJhbnNhY3Rpb25SZWxheWVyQ29zdChjaGFpbklkOiBCeXRlKTogdWludDY0IHsKICAgIHByb3RvIDEgMQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9nYXMtdXNhZ2UuYWxnby50czoxMAogICAgLy8gZ2FzVXNhZ2UgPSBCb3hNYXA8Qnl0ZSwgdWludDY0Pih7IGtleVByZWZpeDogJ3UnIH0pOwogICAgYnl0ZWMgMTIgLy8gInUiCiAgICBmcmFtZV9kaWcgLTEKICAgIGNvbmNhdAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9nYXMtdXNhZ2UuYWxnby50czozNgogICAgLy8gY29uc3QgZ2FzQW1vdW50ID0gdGhpcy5nYXNVc2FnZShjaGFpbklkKS52YWx1ZTsKICAgIGJveF9nZXQKICAgIGFzc2VydCAvLyBCb3ggbXVzdCBoYXZlIHZhbHVlCiAgICBidG9pCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2dhcy11c2FnZS5hbGdvLnRzOjM3LTQxCiAgICAvLyByZXR1cm4gYWJpQ2FsbCh7CiAgICAvLyAgIG1ldGhvZDogR2FzT3JhY2xlLnByb3RvdHlwZS5nZXRUcmFuc2FjdGlvbkdhc0Nvc3RJbk5hdGl2ZVRva2VuLAogICAgLy8gICBhcHBJZDogdGhpcy5nYXNPcmFjbGUudmFsdWUuaWQsCiAgICAvLyAgIGFyZ3M6IFtjaGFpbklkLCBnYXNBbW91bnRdLAogICAgLy8gfSkucmV0dXJuVmFsdWU7CiAgICBpdHhuX2JlZ2luCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2dhcy11c2FnZS5hbGdvLnRzOjM5CiAgICAvLyBhcHBJZDogdGhpcy5nYXNPcmFjbGUudmFsdWUuaWQsCiAgICBpbnRjXzEgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9nYXMtdXNhZ2UuYWxnby50czo5CiAgICAvLyBnYXNPcmFjbGUgPSBHbG9iYWxTdGF0ZTxBcHBsaWNhdGlvbj4oKTsKICAgIGJ5dGVjXzMgLy8gImdhc09yYWNsZSIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvZ2FzLXVzYWdlLmFsZ28udHM6MzkKICAgIC8vIGFwcElkOiB0aGlzLmdhc09yYWNsZS52YWx1ZS5pZCwKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2dhcy11c2FnZS5hbGdvLnRzOjQwCiAgICAvLyBhcmdzOiBbY2hhaW5JZCwgZ2FzQW1vdW50XSwKICAgIHN3YXAKICAgIGl0b2IKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvZ2FzLXVzYWdlLmFsZ28udHM6MzctNDEKICAgIC8vIHJldHVybiBhYmlDYWxsKHsKICAgIC8vICAgbWV0aG9kOiBHYXNPcmFjbGUucHJvdG90eXBlLmdldFRyYW5zYWN0aW9uR2FzQ29zdEluTmF0aXZlVG9rZW4sCiAgICAvLyAgIGFwcElkOiB0aGlzLmdhc09yYWNsZS52YWx1ZS5pZCwKICAgIC8vICAgYXJnczogW2NoYWluSWQsIGdhc0Ftb3VudF0sCiAgICAvLyB9KS5yZXR1cm5WYWx1ZTsKICAgIHB1c2hieXRlcyAweGMyYWZjY2QxIC8vIG1ldGhvZCAiZ2V0VHJhbnNhY3Rpb25HYXNDb3N0SW5OYXRpdmVUb2tlbihieXRlLHVpbnQ2NCl1aW50NjQiCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgZnJhbWVfZGlnIC0xCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25JRAogICAgcHVzaGludCA2IC8vIGFwcGwKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludGNfMSAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgaXR4bl9zdWJtaXQKICAgIGl0eG4gTGFzdExvZwogICAgZHVwCiAgICBleHRyYWN0IDQgMAogICAgc3dhcAogICAgZXh0cmFjdCAwIDQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgPT0KICAgIGFzc2VydCAvLyBCeXRlcyBoYXMgdmFsaWQgcHJlZml4CiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL293bmFibGUuYWxnby50czo6T3duYWJsZS5vbmx5T3duZXIoKSAtPiB2b2lkOgpvbmx5T3duZXI6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL293bmFibGUuYWxnby50czoxMwogICAgLy8gYXNzZXJ0KG9wLlR4bi5zZW5kZXIuYnl0ZXMgPT09IHRoaXMub3duZXIudmFsdWUuYnl0ZXMsICdPbmx5IG93bmVyJyk7CiAgICB0eG4gU2VuZGVyCiAgICBpbnRjXzEgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9vd25hYmxlLmFsZ28udHM6NgogICAgLy8gcHJvdGVjdGVkIG93bmVyID0gR2xvYmFsU3RhdGU8QWRkcmVzcz4oKTsKICAgIGJ5dGVjXzIgLy8gIm93bmVyIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9vd25hYmxlLmFsZ28udHM6MTMKICAgIC8vIGFzc2VydChvcC5UeG4uc2VuZGVyLmJ5dGVzID09PSB0aGlzLm93bmVyLnZhbHVlLmJ5dGVzLCAnT25seSBvd25lcicpOwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgID09CiAgICBhc3NlcnQgLy8gT25seSBvd25lcgogICAgcmV0c3ViCg==",clear:"I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg=="},byteCode:{approval:"CyAFAQAIINR6JhEEFR98dQdjYW5Td2FwBW93bmVyCWdhc09yYWNsZQpyZWJhbGFuY2VyB2NoYWluSWQJbWVzc2VuZ2VyAXQBcA1zdG9wQXV0aG9yaXR5AQEBAAF1BENBeqME90dbggwVH3x1AAAAAAAAPVQDBoEBMRhAAAkjrycETGcpImcxGRREMRhBAM2CDARl9wVzBD44AnwEpGAK7QTeTK1KBE66ByEExhftcwRXUxVgBGOAgngEBlB8agT1+W6zBEsGLKAEw83ZKicNggkEB9+EKQSAxccPBEE00GgE7xX4VQRrHuIjBBhwpJIENVcyTQQEsWHxBNKzV+snDoIEBAylrnoEJ0cPBwTL/G0CBOF7r7Q2GgCOGwDZARQBZAGpArACzQLqAwYDJANdA+QEHgRCAAYAAQRXBMsFEwUoBTYFPgVPBWAFcgWQBaEFswAnD7AiQycPsCJDgARmTKQENhoAjgEAiACKAgCL/oEKCIsAMgwNQQAqsYEGshCBBbIZJxCyHicQsh+L/40CAAsABLNC/9syALIBQv/1I7IBQv/viYoBAYv/OBQyChJEi/84IDIDEkSL/zgVMgMSRIv/OBKJigEBi/84BzIKE0EAAiOJi/84IDIDE0EAAiOJi/84CTIDE0EAAiOJi/84CIk2GgFJFSUSRDYaAkkVIhJENhoDSRUkEkQXNhoESRUkEkQXKksEZytMZycJTwNnJwVPAmcnBkxnIkM2GgFJFSQSRBeIB3exMgqyFCOyErIRgQSyECOyAbOAGEJyaWRnZTogb3B0LWluIGNvbXBsZXRlZLAiQzEWgQIJSTgQIhJEMRYiCUk4EIEEEkQ2GgFJFSUSRDYaAkkVIhJENhoDSRUlEkQ2GgRJFSUSRDYaBUkVJBJEF08GiP8cTgZOBiNPB4gEYSJDMRYiCUk4EIEEEkQ2GgFJFSUSRDYaAkkVIhJENhoDSRUlEkQ2GgRJFSUSRDYaBUkVJBJEFzYaBkkVJBJEFyNOB4gEHCJDMRYiCUk4ECISRDYaAUkVJBJEFzYaAklOA0kVJRJENhoDSRUiEkQ2GgRJFSUSRDYaBUlOBkkVJRJENhoGSRUkEkQXIyllRESAAWJLBFBJvUUBRE8HiP50SSEED0QjJwVlREsISwhPCE8DSwhPCIgFA08CvkRLAUxQAkxRAAJMUQIgUElOBkkVJRJEgAFtSwFQSb1FARREgAC/sSMnBmVEgAQz4UeqshqyGLIagQayECOyAbO0PklXBABMVwAEKBJESRUiEkQjU0RPAoEYW08DTwRPBIgEz0whBAlJQQAPsUsEsgdJsggishAjsgGzSwEWSwVQSwRQJwpQSwNQgARFg2rWTFCwIkM2GgFJFSISRDYaAkkVJRJEiAWZgAFiTwJQTL8iQzYaAUkVIhJENhoCSRUlEkSIBXxQJwdMUIAAvyJDNhoBSRUiEkQ2GgJJFSUSRIgFX1AnB0xQvEgiQzYaAUkVJBJEF4gFSrEjKmVEsgeyCCKyECOyAbMiQzYaAUkVJBJEF0mIBSsyCklOAkxwAExJTwJEQQAasSMqZUSyFEmyEksCshFLAbIAgQSyECOyAbMiQzYaAUkVIhJENhoCSRUkEkQXSwGIBJ+xIycGZUQnDrIaSwOyGrIYgQayECOyAbO0PklXBABMVwAEKBJESRUkEkQXsSMrZUROAggWgAR799UMshpPA7IashqyGIEGshAjsgGztD5JVwQATFcABCgSREkVJBJEF0wWgAFlTFC+RBcKFihMULAiQzYaAUkVJBJEFzYaAkkVJRJENhoDSRUiEkQ2GgRJFSISRDYaBUkVJRJENhoGSRUlEkSIAwQoTFCwIkM2GgFJFSISRDYaAkkVJRJEUCcHTFC9RQEnCyNPAlQoTFCwIkM2GgFJFSISRIgD0SEECBYoTFCwIkMxFiIJSTgQgQQSRDYaAUkVJBJEFzYaAkkVJRJENhoDSRUkEkQXNhoESRUkEkQXI4j7kCMpZUREMQBLBIj7v08FOBFJSwNLA4gDB0sGSwZPAk8GiAKiTwNPBFBPAhZQTwMWUE8CFlBMFlCABBVARLNMULAiQzYaAUkVJBJEFzYaAkkVJBJEF4gDfEkWJwhLAVBPAxa/THEBRIEJTAlJgQYIgQpMlIABZksDUEwWv4EKTJSAAWVPAlBMFr8iQzYaAUkVJBJEF4gDPRYnCExQvEgiQzEAIycJZUQSRCkjZyJDiAMjKSJnIkM2GgFJFSUSRIgDEycJTGciQzYaAUkVJRJEiAMCJwRMZyJDNhoBSRUiEkSIAqcWKExQsCJDNhoBSRUiEkQ2GgJJFSQSRBeIAtYnDE8CUEwWvyJDNhoBSRUkEkQXiALAK0xnIkM2GgFJFSISRIgCchYoTFCwIkM2GgFJFSUSRIgCnipMZyJDiggAi/8jiPpNIyllRESL+Yj6fkmL/g1EJa+L+hIURIv5OBGL/kAA7iOL+EsBCIv4Fk8CFlCL/hZQgAQ2uvrdTFCwiwCL/gmLATEATwKIAZUjJwVlRIv7SwETRIv7i/xQJwdMUL1FAURLAYv6TwKL+4v8i/2IAOKL+4gB3yEECIABc0sCUEm9RQEURIAAv0sBVwEBsSMnBmVEJw2yGkyyGkmyGIEGshAjsgGztD5JVwQATFcABCgSREkVJBJEF0sBcghEsbIHSbIIIrIQI7IBtoAE0C9X9bIaTwOyGkyyGIEGshAjsgGzSwEWSwEWUIAES1VBm0xQsAhPAg5EFov6UIv7UIv8UIv9UCcKUIAEIp+67ExQsImLARaAAWZMUL5EF4v+C7EjK2VEIycFZUSABB23DN2yGrIashiBBrIQI7IBs7Q+SVcEAExXAAQoEkRJFSQSRBcKQv7QigYBgRivi/oWUIEfr4v8UEyL+1BMUIv+UIv/UCcKUAKL/BcjTFaL/RciTFZJFSUSRImKBAGL/BYnCExQSb1FAUS+SBexi/4Wi/8WIycEZUSL/RInCyNPAlSABA0bTAayGov9shpPArIaTLIashqyGIEGshAjsgGztD5JVwQATFcABCgSREkVJBJEF4mKAwGL/RYnCExQSb1FAUS+SBexSXIIRLIUi/+yEov9shGBBLIQI7IBs7GL/xYjJwRlRIv+EicLI08CVIAE2XitFLIai/6yGkyyGrIashiBBrIQI7IBs7Q+SVcEAExXAAQoEkRJFSQSRBeJigEBJwyL/1C+RBeJigEBJwyL/1C+RBexIytlREwWgATCr8zRshqL/7IashqyGIEGshAjsgGztD5JVwQATFcABCgSREkVJBJEF4kxACMqZUQSRIk=",clear:"C4EBQw=="},events:[{name:"BridgingFeeFromTokens",args:[{type:"uint64",name:"feeFromNative"},{type:"uint64",name:"feeFromStable"},{type:"uint64",name:"feeStableTokenAmount"}]},{name:"ReceiveFee",args:[{type:"uint64",name:"bridgeTransactionCost"},{type:"uint64",name:"messageTransactionCost"}]},{name:"TokensSent",args:[{type:"uint64",name:"amount"},{type:"byte[32]",name:"recipient"},{type:"byte",name:"destinationChainId"},{type:"byte[32]",name:"receiveToken"},{type:"byte[32]",name:"nonce"},{type:"byte",name:"messenger"}]},{name:"TokensReceived",args:[{type:"uint64",name:"receiveAmount"},{type:"address",name:"recipient"},{type:"byte[32]",name:"nonce"},{type:"byte",name:"messenger"},{type:"byte[32]",name:"message"}]},{name:"Swapped",args:[{type:"address",name:"sender"},{type:"address",name:"recipient"},{type:"uint64",name:"tokenId"},{type:"uint64",name:"receiveTokenId"},{type:"uint64",name:"amount"},{type:"uint64",name:"receivedAmount"}]}],templateVariables:{}};var W=class i{static get create(){return{_resolveByMethod(n){switch(n.method){case"createApplication":case"createApplication(address,byte,uint64,uint64)void":return i.create.createApplication(n)}throw new Error("Unknown ' + verb + ' method")},createApplication(n){return{...n,method:"createApplication(address,byte,uint64,uint64)void",args:Array.isArray(n.args)?n.args:[n.args.owner,n.args.chainId,n.args.messenger,n.args.gasOracle]}}}}static optInAsset(n){return{...n,method:"optInAsset(uint64)void",args:Array.isArray(n.args)?n.args:[n.args.asset]}}static swapAndBridge(n){return{...n,method:"swapAndBridge(pay,axfer,byte[32],byte,byte[32],byte[32],uint64)void",args:Array.isArray(n.args)?n.args:[n.args.paymentRef,n.args.assetTransferRef,n.args.recipient,n.args.destinationChainId,n.args.receiveToken,n.args.nonce,n.args.budget]}}static swapAndBridgeWithStable(n){return{...n,method:"swapAndBridgeWithStable(axfer,byte[32],byte,byte[32],byte[32],uint64,uint64)void",args:Array.isArray(n.args)?n.args:[n.args.assetTransferRef,n.args.recipient,n.args.destinationChainId,n.args.receiveToken,n.args.nonce,n.args.feeTokenAmount,n.args.budget]}}static receiveTokens(n){return{...n,method:"receiveTokens(pay,uint64,byte[32],byte,byte[32],byte[32],uint64)void",args:Array.isArray(n.args)?n.args:[n.args.paymentRef,n.args.amount,n.args.recipient,n.args.sourceChainId,n.args.receiveToken,n.args.nonce,n.args.receiveAmountMin]}}static registerBridge(n){return{...n,method:"registerBridge(byte,byte[32])void",args:Array.isArray(n.args)?n.args:[n.args.chainId,n.args.bridgeAddress]}}static addBridgeToken(n){return{...n,method:"addBridgeToken(byte,byte[32])void",args:Array.isArray(n.args)?n.args:[n.args.chainId,n.args.tokenAddress]}}static removeBridgeToken(n){return{...n,method:"removeBridgeToken(byte,byte[32])void",args:Array.isArray(n.args)?n.args:[n.args.chainId,n.args.tokenAddress]}}static withdrawGasTokens(n){return{...n,method:"withdrawGasTokens(uint64)void",args:Array.isArray(n.args)?n.args:[n.args.amount]}}static withdrawBridgingFeeInTokens(n){return{...n,method:"withdrawBridgingFeeInTokens(uint64)void",args:Array.isArray(n.args)?n.args:[n.args.asset]}}static getBridgingCostInTokens(n){return{...n,method:"getBridgingCostInTokens(byte,uint64)uint64",args:Array.isArray(n.args)?n.args:[n.args.destinationChainId,n.args.asset]}}static hashMessage(n){return{...n,method:"hashMessage(uint64,byte[32],byte,byte,byte[32],byte[32])byte[32]",args:Array.isArray(n.args)?n.args:[n.args.amount,n.args.recipient,n.args.sourceChainId,n.args.destinationChainId,n.args.receiveToken,n.args.nonce]}}static isOtherBridgeTokenSupported(n){return{...n,method:"isOtherBridgeTokenSupported(byte,byte[32])bool",args:Array.isArray(n.args)?n.args:[n.args.chainId,n.args.token]}}static getTransactionCost(n){return{...n,method:"getTransactionCost(byte)uint64",args:Array.isArray(n.args)?n.args:[n.args.chainId]}}static getReceiveTokensCost(n){return{...n,method:"getReceiveTokensCost()uint64",args:Array.isArray(n.args)?n.args:[]}}static getSendTransactionStorageCost(n){return{...n,method:"getSendTransactionStorageCost()uint64",args:Array.isArray(n.args)?n.args:[]}}static swap(n){return{...n,method:"swap(axfer,uint64,address,uint64,uint64)void",args:Array.isArray(n.args)?n.args:[n.args.assetTransferRef,n.args.receiveAsset,n.args.recipient,n.args.receiveAmountMin,n.args.budget]}}static addPool(n){return{...n,method:"addPool(uint64,uint64)void",args:Array.isArray(n.args)?n.args:[n.args.poolId,n.args.asset]}}static removePool(n){return{...n,method:"removePool(uint64)void",args:Array.isArray(n.args)?n.args:[n.args.tokenId]}}static stopSwap(n){return{...n,method:"stopSwap()void",args:Array.isArray(n.args)?n.args:[]}}static startSwap(n){return{...n,method:"startSwap()void",args:Array.isArray(n.args)?n.args:[]}}static setStopAuthority(n){return{...n,method:"setStopAuthority(address)void",args:Array.isArray(n.args)?n.args:[n.args.stopAuthority]}}static setRebalancer(n){return{...n,method:"setRebalancer(address)void",args:Array.isArray(n.args)?n.args:[n.args.rebalancer]}}static getGasUsage(n){return{...n,method:"getGasUsage(byte)uint64",args:Array.isArray(n.args)?n.args:[n.args.chainId]}}static setGasUsage(n){return{...n,method:"setGasUsage(byte,uint64)void",args:Array.isArray(n.args)?n.args:[n.args.chainId,n.args.gasAmount]}}static setGasOracle(n){return{...n,method:"setGasOracle(uint64)void",args:Array.isArray(n.args)?n.args:[n.args.gasOracle]}}static getTransactionRelayerCost(n){return{...n,method:"getTransactionRelayerCost(byte)uint64",args:Array.isArray(n.args)?n.args:[n.args.chainId]}}static transferOwnership(n){return{...n,method:"transferOwnership(address)void",args:Array.isArray(n.args)?n.args:[n.args.newOwner]}}};var wi=class i{appClient;constructor(n){this.appClient=n instanceof Fa.AppClient?n:new Fa.AppClient({...n,appSpec:Yi})}decodeReturnValue(n,a){return a!==void 0?(0,Ls.getArc56ReturnValue)(a,this.appClient.getABIMethod(n),Yi.structs):void 0}static async fromCreatorAndName(n){return new i(await Fa.AppClient.fromCreatorAndName({...n,appSpec:Yi}))}static async fromNetwork(n){return new i(await Fa.AppClient.fromNetwork({...n,appSpec:Yi}))}get appId(){return this.appClient.appId}get appAddress(){return this.appClient.appAddress}get appName(){return this.appClient.appName}get appSpec(){return this.appClient.appSpec}get algorand(){return this.appClient.algorand}params={clearState:n=>this.appClient.params.bare.clearState(n),optInAsset:n=>this.appClient.params.call(W.optInAsset(n)),swapAndBridge:n=>this.appClient.params.call(W.swapAndBridge(n)),swapAndBridgeWithStable:n=>this.appClient.params.call(W.swapAndBridgeWithStable(n)),receiveTokens:n=>this.appClient.params.call(W.receiveTokens(n)),registerBridge:n=>this.appClient.params.call(W.registerBridge(n)),addBridgeToken:n=>this.appClient.params.call(W.addBridgeToken(n)),removeBridgeToken:n=>this.appClient.params.call(W.removeBridgeToken(n)),withdrawGasTokens:n=>this.appClient.params.call(W.withdrawGasTokens(n)),withdrawBridgingFeeInTokens:n=>this.appClient.params.call(W.withdrawBridgingFeeInTokens(n)),getBridgingCostInTokens:n=>this.appClient.params.call(W.getBridgingCostInTokens(n)),hashMessage:n=>this.appClient.params.call(W.hashMessage(n)),isOtherBridgeTokenSupported:n=>this.appClient.params.call(W.isOtherBridgeTokenSupported(n)),getTransactionCost:n=>this.appClient.params.call(W.getTransactionCost(n)),getReceiveTokensCost:(n={args:[]})=>this.appClient.params.call(W.getReceiveTokensCost(n)),getSendTransactionStorageCost:(n={args:[]})=>this.appClient.params.call(W.getSendTransactionStorageCost(n)),swap:n=>this.appClient.params.call(W.swap(n)),addPool:n=>this.appClient.params.call(W.addPool(n)),removePool:n=>this.appClient.params.call(W.removePool(n)),stopSwap:(n={args:[]})=>this.appClient.params.call(W.stopSwap(n)),startSwap:(n={args:[]})=>this.appClient.params.call(W.startSwap(n)),setStopAuthority:n=>this.appClient.params.call(W.setStopAuthority(n)),setRebalancer:n=>this.appClient.params.call(W.setRebalancer(n)),getGasUsage:n=>this.appClient.params.call(W.getGasUsage(n)),setGasUsage:n=>this.appClient.params.call(W.setGasUsage(n)),setGasOracle:n=>this.appClient.params.call(W.setGasOracle(n)),getTransactionRelayerCost:n=>this.appClient.params.call(W.getTransactionRelayerCost(n)),transferOwnership:n=>this.appClient.params.call(W.transferOwnership(n))};createTransaction={clearState:n=>this.appClient.createTransaction.bare.clearState(n),optInAsset:n=>this.appClient.createTransaction.call(W.optInAsset(n)),swapAndBridge:n=>this.appClient.createTransaction.call(W.swapAndBridge(n)),swapAndBridgeWithStable:n=>this.appClient.createTransaction.call(W.swapAndBridgeWithStable(n)),receiveTokens:n=>this.appClient.createTransaction.call(W.receiveTokens(n)),registerBridge:n=>this.appClient.createTransaction.call(W.registerBridge(n)),addBridgeToken:n=>this.appClient.createTransaction.call(W.addBridgeToken(n)),removeBridgeToken:n=>this.appClient.createTransaction.call(W.removeBridgeToken(n)),withdrawGasTokens:n=>this.appClient.createTransaction.call(W.withdrawGasTokens(n)),withdrawBridgingFeeInTokens:n=>this.appClient.createTransaction.call(W.withdrawBridgingFeeInTokens(n)),getBridgingCostInTokens:n=>this.appClient.createTransaction.call(W.getBridgingCostInTokens(n)),hashMessage:n=>this.appClient.createTransaction.call(W.hashMessage(n)),isOtherBridgeTokenSupported:n=>this.appClient.createTransaction.call(W.isOtherBridgeTokenSupported(n)),getTransactionCost:n=>this.appClient.createTransaction.call(W.getTransactionCost(n)),getReceiveTokensCost:(n={args:[]})=>this.appClient.createTransaction.call(W.getReceiveTokensCost(n)),getSendTransactionStorageCost:(n={args:[]})=>this.appClient.createTransaction.call(W.getSendTransactionStorageCost(n)),swap:n=>this.appClient.createTransaction.call(W.swap(n)),addPool:n=>this.appClient.createTransaction.call(W.addPool(n)),removePool:n=>this.appClient.createTransaction.call(W.removePool(n)),stopSwap:(n={args:[]})=>this.appClient.createTransaction.call(W.stopSwap(n)),startSwap:(n={args:[]})=>this.appClient.createTransaction.call(W.startSwap(n)),setStopAuthority:n=>this.appClient.createTransaction.call(W.setStopAuthority(n)),setRebalancer:n=>this.appClient.createTransaction.call(W.setRebalancer(n)),getGasUsage:n=>this.appClient.createTransaction.call(W.getGasUsage(n)),setGasUsage:n=>this.appClient.createTransaction.call(W.setGasUsage(n)),setGasOracle:n=>this.appClient.createTransaction.call(W.setGasOracle(n)),getTransactionRelayerCost:n=>this.appClient.createTransaction.call(W.getTransactionRelayerCost(n)),transferOwnership:n=>this.appClient.createTransaction.call(W.transferOwnership(n))};send={clearState:n=>this.appClient.send.bare.clearState(n),optInAsset:async n=>{let a=await this.appClient.send.call(W.optInAsset(n));return{...a,return:a.return}},swapAndBridge:async n=>{let a=await this.appClient.send.call(W.swapAndBridge(n));return{...a,return:a.return}},swapAndBridgeWithStable:async n=>{let a=await this.appClient.send.call(W.swapAndBridgeWithStable(n));return{...a,return:a.return}},receiveTokens:async n=>{let a=await this.appClient.send.call(W.receiveTokens(n));return{...a,return:a.return}},registerBridge:async n=>{let a=await this.appClient.send.call(W.registerBridge(n));return{...a,return:a.return}},addBridgeToken:async n=>{let a=await this.appClient.send.call(W.addBridgeToken(n));return{...a,return:a.return}},removeBridgeToken:async n=>{let a=await this.appClient.send.call(W.removeBridgeToken(n));return{...a,return:a.return}},withdrawGasTokens:async n=>{let a=await this.appClient.send.call(W.withdrawGasTokens(n));return{...a,return:a.return}},withdrawBridgingFeeInTokens:async n=>{let a=await this.appClient.send.call(W.withdrawBridgingFeeInTokens(n));return{...a,return:a.return}},getBridgingCostInTokens:async n=>{let a=await this.appClient.send.call(W.getBridgingCostInTokens(n));return{...a,return:a.return}},hashMessage:async n=>{let a=await this.appClient.send.call(W.hashMessage(n));return{...a,return:a.return}},isOtherBridgeTokenSupported:async n=>{let a=await this.appClient.send.call(W.isOtherBridgeTokenSupported(n));return{...a,return:a.return}},getTransactionCost:async n=>{let a=await this.appClient.send.call(W.getTransactionCost(n));return{...a,return:a.return}},getReceiveTokensCost:async(n={args:[]})=>{let a=await this.appClient.send.call(W.getReceiveTokensCost(n));return{...a,return:a.return}},getSendTransactionStorageCost:async(n={args:[]})=>{let a=await this.appClient.send.call(W.getSendTransactionStorageCost(n));return{...a,return:a.return}},swap:async n=>{let a=await this.appClient.send.call(W.swap(n));return{...a,return:a.return}},addPool:async n=>{let a=await this.appClient.send.call(W.addPool(n));return{...a,return:a.return}},removePool:async n=>{let a=await this.appClient.send.call(W.removePool(n));return{...a,return:a.return}},stopSwap:async(n={args:[]})=>{let a=await this.appClient.send.call(W.stopSwap(n));return{...a,return:a.return}},startSwap:async(n={args:[]})=>{let a=await this.appClient.send.call(W.startSwap(n));return{...a,return:a.return}},setStopAuthority:async n=>{let a=await this.appClient.send.call(W.setStopAuthority(n));return{...a,return:a.return}},setRebalancer:async n=>{let a=await this.appClient.send.call(W.setRebalancer(n));return{...a,return:a.return}},getGasUsage:async n=>{let a=await this.appClient.send.call(W.getGasUsage(n));return{...a,return:a.return}},setGasUsage:async n=>{let a=await this.appClient.send.call(W.setGasUsage(n));return{...a,return:a.return}},setGasOracle:async n=>{let a=await this.appClient.send.call(W.setGasOracle(n));return{...a,return:a.return}},getTransactionRelayerCost:async n=>{let a=await this.appClient.send.call(W.getTransactionRelayerCost(n));return{...a,return:a.return}},transferOwnership:async n=>{let a=await this.appClient.send.call(W.transferOwnership(n));return{...a,return:a.return}}};clone(n){return new i(this.appClient.clone(n))}async getBridgingCostInTokens(n){return(await this.appClient.send.call(W.getBridgingCostInTokens(n))).return}async hashMessage(n){return(await this.appClient.send.call(W.hashMessage(n))).return}async isOtherBridgeTokenSupported(n){return(await this.appClient.send.call(W.isOtherBridgeTokenSupported(n))).return}async getTransactionCost(n){return(await this.appClient.send.call(W.getTransactionCost(n))).return}async getReceiveTokensCost(n={args:[]}){return(await this.appClient.send.call(W.getReceiveTokensCost(n))).return}async getSendTransactionStorageCost(n={args:[]}){return(await this.appClient.send.call(W.getSendTransactionStorageCost(n))).return}async getGasUsage(n){return(await this.appClient.send.call(W.getGasUsage(n))).return}async getTransactionRelayerCost(n){return(await this.appClient.send.call(W.getTransactionRelayerCost(n))).return}state={global:{getAll:async()=>{let n=await this.appClient.state.global.getAll();return{chainId:n.chainId,messenger:n.messenger,stopAuthority:n.stopAuthority,rebalancer:n.rebalancer,canSwap:n.canSwap,gasOracle:n.gasOracle,owner:n.owner}},chainId:async()=>await this.appClient.state.global.getValue("chainId"),messenger:async()=>await this.appClient.state.global.getValue("messenger"),stopAuthority:async()=>await this.appClient.state.global.getValue("stopAuthority"),rebalancer:async()=>await this.appClient.state.global.getValue("rebalancer"),canSwap:async()=>await this.appClient.state.global.getValue("canSwap"),gasOracle:async()=>await this.appClient.state.global.getValue("gasOracle"),owner:async()=>await this.appClient.state.global.getValue("owner")},box:{getAll:async()=>{let n=await this.appClient.state.box.getAll();return{}},processedMessages:{getMap:async()=>await this.appClient.state.box.getMap("processedMessages"),value:async n=>await this.appClient.state.box.getMapValue("processedMessages",n)},sentMessages:{getMap:async()=>await this.appClient.state.box.getMap("sentMessages"),value:async n=>await this.appClient.state.box.getMapValue("sentMessages",n)},otherBridges:{getMap:async()=>await this.appClient.state.box.getMap("otherBridges"),value:async n=>await this.appClient.state.box.getMapValue("otherBridges",n)},otherBridgeTokens:{getMap:async()=>await this.appClient.state.box.getMap("otherBridgeTokens"),value:async n=>await this.appClient.state.box.getMapValue("otherBridgeTokens",n)},pools:{getMap:async()=>await this.appClient.state.box.getMap("pools"),value:async n=>await this.appClient.state.box.getMapValue("pools",n)},fromGasOracleScalingFactor:{getMap:async()=>await this.appClient.state.box.getMap("fromGasOracleScalingFactor"),value:async n=>await this.appClient.state.box.getMapValue("fromGasOracleScalingFactor",n)},bridgingFeeConversionScalingFactor:{getMap:async()=>await this.appClient.state.box.getMap("bridgingFeeConversionScalingFactor"),value:async n=>await this.appClient.state.box.getMapValue("bridgingFeeConversionScalingFactor",n)},gasUsage:{getMap:async()=>await this.appClient.state.box.getMap("gasUsage"),value:async n=>await this.appClient.state.box.getMapValue("gasUsage",n)}}};newGroup(){let n=this,a=this.algorand.newGroup(),r=Promise.resolve(),o=[];return{optInAsset(s){return r=r.then(async()=>a.addAppCallMethodCall(await n.params.optInAsset(s))),o.push(void 0),this},swapAndBridge(s){return r=r.then(async()=>a.addAppCallMethodCall(await n.params.swapAndBridge(s))),o.push(void 0),this},swapAndBridgeWithStable(s){return r=r.then(async()=>a.addAppCallMethodCall(await n.params.swapAndBridgeWithStable(s))),o.push(void 0),this},receiveTokens(s){return r=r.then(async()=>a.addAppCallMethodCall(await n.params.receiveTokens(s))),o.push(void 0),this},registerBridge(s){return r=r.then(async()=>a.addAppCallMethodCall(await n.params.registerBridge(s))),o.push(void 0),this},addBridgeToken(s){return r=r.then(async()=>a.addAppCallMethodCall(await n.params.addBridgeToken(s))),o.push(void 0),this},removeBridgeToken(s){return r=r.then(async()=>a.addAppCallMethodCall(await n.params.removeBridgeToken(s))),o.push(void 0),this},withdrawGasTokens(s){return r=r.then(async()=>a.addAppCallMethodCall(await n.params.withdrawGasTokens(s))),o.push(void 0),this},withdrawBridgingFeeInTokens(s){return r=r.then(async()=>a.addAppCallMethodCall(await n.params.withdrawBridgingFeeInTokens(s))),o.push(void 0),this},getBridgingCostInTokens(s){return r=r.then(async()=>a.addAppCallMethodCall(await n.params.getBridgingCostInTokens(s))),o.push(c=>n.decodeReturnValue("getBridgingCostInTokens(byte,uint64)uint64",c)),this},hashMessage(s){return r=r.then(async()=>a.addAppCallMethodCall(await n.params.hashMessage(s))),o.push(c=>n.decodeReturnValue("hashMessage(uint64,byte[32],byte,byte,byte[32],byte[32])byte[32]",c)),this},isOtherBridgeTokenSupported(s){return r=r.then(async()=>a.addAppCallMethodCall(await n.params.isOtherBridgeTokenSupported(s))),o.push(c=>n.decodeReturnValue("isOtherBridgeTokenSupported(byte,byte[32])bool",c)),this},getTransactionCost(s){return r=r.then(async()=>a.addAppCallMethodCall(await n.params.getTransactionCost(s))),o.push(c=>n.decodeReturnValue("getTransactionCost(byte)uint64",c)),this},getReceiveTokensCost(s){return r=r.then(async()=>a.addAppCallMethodCall(await n.params.getReceiveTokensCost(s))),o.push(c=>n.decodeReturnValue("getReceiveTokensCost()uint64",c)),this},getSendTransactionStorageCost(s){return r=r.then(async()=>a.addAppCallMethodCall(await n.params.getSendTransactionStorageCost(s))),o.push(c=>n.decodeReturnValue("getSendTransactionStorageCost()uint64",c)),this},swap(s){return r=r.then(async()=>a.addAppCallMethodCall(await n.params.swap(s))),o.push(void 0),this},addPool(s){return r=r.then(async()=>a.addAppCallMethodCall(await n.params.addPool(s))),o.push(void 0),this},removePool(s){return r=r.then(async()=>a.addAppCallMethodCall(await n.params.removePool(s))),o.push(void 0),this},stopSwap(s){return r=r.then(async()=>a.addAppCallMethodCall(await n.params.stopSwap(s))),o.push(void 0),this},startSwap(s){return r=r.then(async()=>a.addAppCallMethodCall(await n.params.startSwap(s))),o.push(void 0),this},setStopAuthority(s){return r=r.then(async()=>a.addAppCallMethodCall(await n.params.setStopAuthority(s))),o.push(void 0),this},setRebalancer(s){return r=r.then(async()=>a.addAppCallMethodCall(await n.params.setRebalancer(s))),o.push(void 0),this},getGasUsage(s){return r=r.then(async()=>a.addAppCallMethodCall(await n.params.getGasUsage(s))),o.push(c=>n.decodeReturnValue("getGasUsage(byte)uint64",c)),this},setGasUsage(s){return r=r.then(async()=>a.addAppCallMethodCall(await n.params.setGasUsage(s))),o.push(void 0),this},setGasOracle(s){return r=r.then(async()=>a.addAppCallMethodCall(await n.params.setGasOracle(s))),o.push(void 0),this},getTransactionRelayerCost(s){return r=r.then(async()=>a.addAppCallMethodCall(await n.params.getTransactionRelayerCost(s))),o.push(c=>n.decodeReturnValue("getTransactionRelayerCost(byte)uint64",c)),this},transferOwnership(s){return r=r.then(async()=>a.addAppCallMethodCall(await n.params.transferOwnership(s))),o.push(void 0),this},clearState(s){return r=r.then(()=>a.addAppCall(n.params.clearState(s))),this},addTransaction(s,c){return r=r.then(()=>a.addTransaction(s,c)),this},async composer(){return await r,a},async simulate(s){await r;let c=await(s?a.simulate(s):a.simulate());return{...c,returns:c.returns?.map((d,g)=>o[g]!==void 0?o[g](d):d.returnValue)}},async send(s){await r;let c=await a.send(s);return{...c,returns:c.returns?.map((d,g)=>o[g]!==void 0?o[g](d):d.returnValue)}}}}};var xs=require("@algorandfoundation/algokit-utils/types/app-arc56"),Ga=require("@algorandfoundation/algokit-utils/types/app-client"),al=require("@algorandfoundation/algokit-utils/types/app-factory"),Wi={name:"PaddingUtil",structs:{},methods:[{name:"createApplication",args:[],returns:{type:"void"},actions:{create:["NoOp"],call:[]},readonly:!1,events:[],recommendations:{}}],arcs:[22,28],networks:{},state:{schema:{global:{ints:0,bytes:0},local:{ints:0,bytes:0}},keys:{global:{},local:{},box:{}},maps:{global:{},local:{},box:{}}},bareActions:{create:[],call:["NoOp"]},sourceInfo:{approval:{sourceInfo:[{pc:[27],errorMessage:"OnCompletion must be NoOp && can only call when creating"},{pc:[37],errorMessage:"OnCompletion must be NoOp && can only call when not creating"}],pcOffsetMethod:"none"},clear:{sourceInfo:[],pcOffsetMethod:"none"}},source:{approval:"I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3BhZGRpbmctdXRpbC5jb250cmFjdC5hbGdvLnRzOjQKICAgIC8vIGV4cG9ydCBjbGFzcyBQYWRkaW5nVXRpbCBleHRlbmRzIENvbnRyYWN0IGltcGxlbWVudHMgQ29udmVudGlvbmFsUm91dGluZyB7CiAgICB0eG4gTnVtQXBwQXJncwogICAgYnogbWFpbl9wYWRkaW5nQDUKICAgIHB1c2hieXRlcyAweGI4NDQ3YjM2IC8vIG1ldGhvZCAiY3JlYXRlQXBwbGljYXRpb24oKXZvaWQiCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAwCiAgICBtYXRjaCBtYWluX2NyZWF0ZUFwcGxpY2F0aW9uX3JvdXRlQDMKICAgIGVycgoKbWFpbl9jcmVhdGVBcHBsaWNhdGlvbl9yb3V0ZUAzOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wYWRkaW5nLXV0aWwuY29udHJhY3QuYWxnby50czo2CiAgICAvLyBjcmVhdGVBcHBsaWNhdGlvbigpOiB2b2lkIHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICAhCiAgICAmJgogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBtdXN0IGJlIE5vT3AgJiYgY2FuIG9ubHkgY2FsbCB3aGVuIGNyZWF0aW5nCiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCgptYWluX3BhZGRpbmdANToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcGFkZGluZy11dGlsLmNvbnRyYWN0LmFsZ28udHM6OQogICAgLy8gQGJhcmVtZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgICYmCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIG11c3QgYmUgTm9PcCAmJiBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg==",clear:"I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg=="},byteCode:{approval:"CzEbQQAZgAS4RHs2NhoAjgEAAQAxGRQxGBQQRIEBQzEZFDEYEESBAUM=",clear:"C4EBQw=="},events:[],templateVariables:{}};var Ni=class i{appClient;constructor(n){this.appClient=n instanceof Ga.AppClient?n:new Ga.AppClient({...n,appSpec:Wi})}decodeReturnValue(n,a){return a!==void 0?(0,xs.getArc56ReturnValue)(a,this.appClient.getABIMethod(n),Wi.structs):void 0}static async fromCreatorAndName(n){return new i(await Ga.AppClient.fromCreatorAndName({...n,appSpec:Wi}))}static async fromNetwork(n){return new i(await Ga.AppClient.fromNetwork({...n,appSpec:Wi}))}get appId(){return this.appClient.appId}get appAddress(){return this.appClient.appAddress}get appName(){return this.appClient.appName}get appSpec(){return this.appClient.appSpec}get algorand(){return this.appClient.algorand}params={clearState:n=>this.appClient.params.bare.clearState(n),bare:n=>this.appClient.params.bare.call(n)};createTransaction={clearState:n=>this.appClient.createTransaction.bare.clearState(n),bare:n=>this.appClient.createTransaction.bare.call(n)};send={clearState:n=>this.appClient.send.bare.clearState(n),bare:n=>this.appClient.send.bare.call(n)};clone(n){return new i(this.appClient.clone(n))}state={};newGroup(){let n=this,a=this.algorand.newGroup(),r=Promise.resolve(),o=[];return{bare(s){return r=r.then(()=>a.addAppCall(n.params.bare(s))),this},clearState(s){return r=r.then(()=>a.addAppCall(n.params.clearState(s))),this},addTransaction(s,c){return r=r.then(()=>a.addTransaction(s,c)),this},async composer(){return await r,a},async simulate(s){await r;let c=await(s?a.simulate(s):a.simulate());return{...c,returns:c.returns?.map((d,g)=>o[g]!==void 0?o[g](d):d.returnValue)}},async send(s){await r;let c=await a.send(s);return{...c,returns:c.returns?.map((d,g)=>o[g]!==void 0?o[g](d):d.returnValue)}}}}};var Hs=require("@algorandfoundation/algokit-utils"),Hn=Ft(require("algosdk"));function An(i){return(i*1e3).microAlgos()}async function io(i,n,a){let r=new Hn.AtomicTransactionComposer,o=(0,Hn.makeBasicAccountTransactionSigner)({addr:n,sk:new Uint8Array(64)});i.forEach(d=>{r.addTransaction({txn:d,signer:o})});let c=(await(0,Hs.populateAppCallResources)(r,a)).buildGroup().map(d=>d.txn);return un(...c)}function un(...i){return i.map(a=>Hn.default.encodeUnsignedTransaction(a)).map(a=>Buffer.from(a).toString("hex"))}async function Fi(i,n,a){typeof i=="string"&&(i=BigInt(i));let o=(await a.account.getInformation(n)).assets;return o?o.find(({assetId:c})=>c===i)!==void 0:!1}async function Gi(i,n,a){typeof i=="string"&&(i=BigInt(i));let o=(await a.account.getInformation(n)).appsLocalState;return o?o.find(({id:c})=>c===i)!==void 0:!1}var ke=class{};var Es=require("@solana/web3.js"),ka=require("@stacks/transactions"),_s=require("@stellar/stellar-sdk"),Si=Ft(require("algosdk")),Ne=require("big.js"),so=Ft(require("randombytes")),oo=require("tronweb"),$s=require("web3");var S=require("big.js"),Zi=Ft(require("bn.js"));function ro(i,n){return(0,S.Big)(100).minus((0,S.Big)(100).times(n).div(i)).toNumber()}function Dt(i,n){return Ve(i,n,3).round(0,S.Big.roundDown)}function Ke(i,n){return Ve(i,3,n)}function Ve(i,n,a){let r=(0,S.Big)(a).minus(n).toNumber();return(0,S.Big)(i).times(Za(r))}function Za(i){return(0,S.Big)(10).pow(i)}function j(i,n){return(0,S.Big)(i).times(Za(n))}function P(i,n){let a=(0,S.Big)(i);return a.eq(0)?(0,S.Big)(0):(0,S.Big)(a).div(Za(n))}function We(i){return P((0,S.Big)(i.tokenBalance).minus(i.vUsdBalance).toFixed(),3).div(2).toFixed()}function St(i,{feeShare:n,decimals:a},r){let o=(0,S.Big)(i);if(o.lte(0))return"0";let s=o.times(n),c=o.minus(s),d=Dt(c,a),g=(0,S.Big)(r.tokenBalance).plus(d),l=kt(g,r.aValue,r.dValue);return(0,S.Big)(r.vUsdBalance).minus(l).round(0,S.Big.roundDown).toFixed()}function Sa(i,{feeShare:n,decimals:a},r){let o=(0,S.Big)(i);if(o.lte(0))return(0,S.Big)(0).toFixed();let s=o.plus(r.vUsdBalance),c=kt(s,r.aValue,r.dValue),d=Ke((0,S.Big)(r.tokenBalance).minus(c),a),g=(0,S.Big)(d).times(n);return(0,S.Big)(d).minus(g).round(0,S.Big.roundDown).toFixed()}function Js(i,n){let a=(0,S.Big)(i);if(a.lte(0))return n;let r=a.plus(n.vUsdBalance),o=kt(r,n.aValue,n.dValue);return{aValue:n.aValue,dValue:n.dValue,tokenBalance:o.toFixed(0),vUsdBalance:r.toFixed(0)}}function Os(i,{feeShare:n,decimals:a},r){if((0,S.Big)(i).lte(0))return(0,S.Big)(0);let o=(0,S.Big)(r.vUsdBalance).minus(i);if(o.lte(0))throw new Zt;let s=kt(o,r.aValue,r.dValue),c=(0,S.Big)(s).minus(r.tokenBalance),d=Ke(c,a),g=(0,S.Big)(n).div((0,S.Big)(1).minus(n)),l=(0,S.Big)(d).times(g).round(0,S.Big.roundUp);return(0,S.Big)(d).plus(l).round(0,S.Big.roundDown)}function zs(i,{feeShare:n,decimals:a},r){if((0,S.Big)(i).lte(0))return(0,S.Big)(0);let o=(0,S.Big)(n).div((0,S.Big)(1).minus(n)),s=(0,S.Big)(i).times(o).round(0,S.Big.roundUp),c=(0,S.Big)(i).plus(s),d=Dt(c,a),g=(0,S.Big)(r.tokenBalance).minus(d);if(g.lte(0))throw new Zt;let l=kt(g,r.aValue,r.dValue);return(0,S.Big)(l).minus(r.vUsdBalance).round(0,S.Big.roundDown)}function kt(i,n,a){let r=(0,S.Big)(4).times(n).times((0,S.Big)(a).minus(i)).minus(a),o=(0,S.Big)(a).pow(3),s=r.pow(2),c=(0,S.Big)(i).times((0,S.Big)(i).times(s).plus((0,S.Big)(4).times(n).times(o))).sqrt().round(0,S.Big.roundDown),d=(0,S.Big)(8).times(n).times(i),g=r.times(i).plus(c).div(d).round(0,S.Big.roundDown);return g.eq(0)?(0,S.Big)(0):g.plus(1)}function Us(i,n,a,r){let o=new Zi.default(i),s=new Zi.default(a),c=new Zi.default(n);return o.mul(s).shrn(r).sub(c).toString()}function Ds(i){return(0,S.Big)(i).gt(0)?`${Number((0,S.Big)(i).times(100).toFixed(2)).toLocaleString()}%`:"N/A"}function Qs(i,n,a){let r=(0,S.Big)(n).times(a),o=(0,S.Big)(n).plus(a),s=(0,S.Big)(8).times(i).times(r).times(o),c=r.times((0,S.Big)(16).times(i).minus(4)).div(3),d=s.times(s),g=c.times(c).times(c),l=d.plus(g),A=(0,S.Big)(l).sqrt(),u=(0,S.Big)(Math.cbrt(+s.plus(A).toFixed())),m=(0,S.Big)(Math.cbrt(+s.minus(A).toFixed()));return u.plus(m).toFixed()}function Qt(i,n,a){let r;switch(n){case"EVM":{r=Ks(i);break}case"SOLANA":{r=new Es.PublicKey(i).toBuffer();break}case"TRX":{r=ol(i);break}case"SRB":{r=new _s.Address(i).toBuffer();break}case"SUI":{r=Ks(i);break}case"ALG":{r=il(i);break}case"STX":{r=rl(i);break}}switch(a){case"EVM":return"0x"+r.toString("hex");case"SOLANA":return Array.from(r);case"TRX":return r;case"SRB":return r.toJSON().data;case"SUI":return"0x"+r.toString("hex");case"ALG":return r;case"STX":return r}}function Ct(i){return i.replace(/^0x/i,"")}function co(i){return Buffer.from(i.replace(/^0x/i,""),"hex")}function Ks(i){let a=co(i);return Buffer.concat([Buffer.alloc(32-a.length,0),a],32)}function il(i){if(Si.default.isValidAddress(i))return Buffer.from(Si.Address.fromString(i).publicKey);if(/^\d+$/.test(i)){let n=BigInt(i).toString(16);return n=n.padStart(64,"0"),Buffer.from(n,"hex")}throw new f(`Unexpected Alg address: ${i}`)}function rl(i){if(i.includes(".")){let[a,r]=(0,ka.parseContractId)(i);if(!a||!r)throw new f(`Unexpected Alg address: ${i}`);let o=Buffer.from((0,ka.createAddress)(a).hash160,"hex"),s=$s.Web3.utils.keccak256(Buffer.concat([o,Buffer.from(r)]));return co(s)}let n=Buffer.from((0,ka.createAddress)(i).hash160,"hex");return ki(n,32)}function ol(i){let n=Va(i),a=co(n);return ki(a,32)}function Va(i){let n=oo.utils.crypto.decodeBase58Address(i);return n?oo.utils.bytes.byteArray2hexStr(n).replace(/^41/,"0x"):""}function ki(i,n){if(i.length>=n)return i;let a=Buffer.alloc(n,0);return i.copy(a,n-i.length),a}function Vt(){return(0,so.default)(32)}function Pt(){let i=(0,so.default)(32).readBigInt64BE();return i<0?i*-1n:i}function tt(i,n){let a={},r=n.sourceToken;switch(a.amount=j(n.amount,r.decimals).toFixed(),a.contractAddress=r.bridgeAddress,a.fromAccountAddress=n.fromAccountAddress,i){case"SUI":{if(!r.originTokenAddress)throw new f("SUI sourceToken must contain 'originTokenAddress'");a.fromTokenAddress=r.originTokenAddress;break}case"ALG":{a.fromTokenAddress=r.tokenAddress;break}default:a.fromTokenAddress=Qt(r.tokenAddress,i,i)}switch(a.toAccountAddress=n.toAccountAddress,i){case"SUI":{if(!n.destinationToken.originTokenAddress)throw new f("SUI destinationToken must contain 'originTokenAddress'");a.toTokenAddress=n.destinationToken.originTokenAddress;break}case"ALG":{a.toTokenAddress=n.destinationToken.tokenAddress;break}default:a.toTokenAddress=Qt(n.destinationToken.tokenAddress,i,i)}return a.minimumReceiveAmount=n.minimumReceiveAmount?j(n.minimumReceiveAmount,n.destinationToken.decimals).toFixed():"0",a}async function Ee(i,n,a){let r={};r.fromChainId=n.sourceToken.allbridgeChainId,r.fromChainSymbol=n.sourceToken.chainSymbol;let o=x.getChainProperty(n.destinationToken.chainSymbol).chainType;if(i==="SUI"){if(!n.sourceToken.originTokenAddress)throw new f("SUI token must contain 'originTokenAddress'");r.fromTokenAddress=n.sourceToken.originTokenAddress}else r.fromTokenAddress=n.sourceToken.tokenAddress;if(r.toChainId=n.destinationToken.allbridgeChainId,r.toTokenAddress=n.destinationToken.tokenAddress,r.gasFeePaymentMethod=n.gasFeePaymentMethod??"native",r.gasFeePaymentMethod==="abr"&&!n.sourceToken.abrPayer)throw new f("Source token must contain 'abrPayer' for ABR payment method");let s=n.sourceToken;switch(n.messenger){case 3:if(!s.cctpAddress||!n.destinationToken.cctpAddress)throw new we("Such route does not support CCTP protocol");r.contractAddress=s.cctpAddress;break;case 4:if(!s.cctpV2Address||!n.destinationToken.cctpV2Address)throw new we("Such route does not support CCTP V2 protocol");r.contractAddress=s.cctpV2Address;break;case 5:if(!s.oftBridgeAddress||!n.destinationToken.oftBridgeAddress||s.oftId!==n.destinationToken.oftId)throw new Ze("Such route does not support OFT protocol");r.contractAddress=s.oftBridgeAddress;break;case 6:if(!s.xReserve?.bridgeAddress||!n.destinationToken.xReserve)throw new f("Such route does not support xReserve protocol");r.contractAddress=s.xReserve.bridgeAddress;break;case 1:case 2:r.contractAddress=s.bridgeAddress;break}r.messenger=n.messenger,r.fromAccountAddress=n.fromAccountAddress,r.amount=j(n.amount,s.decimals).toFixed();let{fee:c,feeFormat:d}=n;if(!c){let u=(await go(n.sourceToken,r.toChainId,r.messenger,a))[r.gasFeePaymentMethod];if(!u)throw new Ut;c=u.int,d="int"}if(d=="float")switch(r.gasFeePaymentMethod){case"native":r.fee=j(c,x.getChainDecimalsByType(s.chainType)).toFixed(0);break;case"stablecoin":r.fee=j(c,s.decimals).toFixed(0);break;case"abr":if(!s.abrPayer)throw new f("Source token must contain 'abrPayer' for ABR payment method");r.fee=j(c,s.abrPayer.abrToken.decimals).toFixed(0);break;default:return se(r.gasFeePaymentMethod,"Unhandled FeePaymentMethod")}else r.fee=c;let{extraGas:g,extraGasFormat:l}=n;if(g&&+g>0){let A=await lo(s,n.destinationToken,r.messenger,a),u,m;switch(r.gasFeePaymentMethod){case"native":u=x.getChainDecimalsByType(s.chainType),m=(0,Ne.Big)(A.exchangeRate);break;case"stablecoin":u=s.decimals,m=(0,Ne.Big)(A.exchangeRate).div(A.sourceNativeTokenPrice);break;case"abr":if(!s.abrPayer)throw new f("Source token must contain 'abrPayer' for ABR payment method");if(!A.abrExchangeRate)throw new f("Cannot transfer WITH_ABR option");u=s.abrPayer.abrToken.decimals,m=(0,Ne.Big)(A.exchangeRate).div(A.abrExchangeRate);break;default:return se(r.gasFeePaymentMethod,"Unhandled FeePaymentMethod")}switch(l??"int"){case"float":{r.extraGas=j(g,u).toFixed(0);let y=m.mul(g);r.extraGasDest=j(y,x.getChainDecimalsByType(n.destinationToken.chainType)).toFixed(0,Ne.Big.roundDown);break}case"int":{r.extraGas=g;let y=P(r.extraGas,x.getChainDecimalsByType(s.chainType)),v=m.mul(y);r.extraGasDest=j(v,x.getChainDecimalsByType(n.destinationToken.chainType)).toFixed(0,Ne.Big.roundDown);break}}cl(r.extraGas,r.gasFeePaymentMethod,A)}switch(["SUI","ALG"].includes(i)||(r.fromTokenAddress=Qt(r.fromTokenAddress,i,i)),r.toAccountAddress=Qt(n.toAccountAddress,o,i),r.toTokenAddress=Qt(r.toTokenAddress,o,i),r.gasFeePaymentMethod){case"native":break;case"stablecoin":sl(r.amount,s.decimals,s.symbol,r.fee,r.extraGas);break;case"abr":{let{abrExchangeRate:A}=await a.getReceiveTransactionCost({sourceChainId:r.fromChainId,destinationChainId:r.toChainId,messenger:r.messenger,sourceToken:n.sourceToken.tokenAddress});r.abrExchangeRate=A;break}default:return se(r.gasFeePaymentMethod,"Unhandled FeePaymentMethod")}return r}function sl(i,n,a,r,o){let s=(0,Ne.Big)(i).minus(r).minus(o??0);if(s.lte(0))throw new Gt(`Amount not enough to pay fee, ${P((0,Ne.Big)(s).minus(1).neg(),n).toFixed()} ${a} is missing`)}async function go(i,n,a,r){let o=await r.getReceiveTransactionCost({sourceChainId:i.allbridgeChainId,destinationChainId:n,messenger:a,sourceToken:i.tokenAddress}),s={native:{int:o.fee,float:P(o.fee,x.getChainDecimalsByType(i.chainType)).toFixed()},adminFeeShareWithExtras:o.adminFeeShareWithExtras};if(o.sourceNativeTokenPrice){let c=Ve(new Ne.Big(o.fee).mul(o.sourceNativeTokenPrice),x.getChainDecimalsByType(i.chainType),i.decimals).toFixed(0,Ne.Big.roundUp);s.stablecoin={int:c,float:P(c,i.decimals).toFixed()}}if(o.abrExchangeRate&&i.abrPayer&&i.abrPayer.payerAvailability[a]){let c=Ve(new Ne.Big(o.fee).mul(o.abrExchangeRate),x.getChainDecimalsByType(i.chainType),i.abrPayer.abrToken.decimals).toFixed(0,Ne.Big.roundUp);s.abr={int:c,float:P(c,i.abrPayer.abrToken.decimals).toFixed()}}return s}function cl(i,n,a){let r=a.extraGasMax[n];if(!r)throw new Ut(`Impossible to pay extra gas by '${n}' payment method`);let o=r.int;if((0,Ne.Big)(i).gt(o))throw new Ba(`Extra gas ${i} in int format, exceeded limit ${o} for '${n}' payment method`)}async function lo(i,n,a,r){let o={},s=await r.getReceiveTransactionCost({sourceChainId:i.allbridgeChainId,destinationChainId:n.allbridgeChainId,messenger:a,sourceToken:i.tokenAddress}),c={int:n.txCostAmount.transfer,float:P(n.txCostAmount.transfer,x.getChainDecimalsByType(n.chainType)).toFixed()},d={int:n.txCostAmount.swap,float:P(n.txCostAmount.swap,x.getChainDecimalsByType(n.chainType)).toFixed()};if(a===6){let y=()=>({int:"0",float:"0"});return{extraGasMax:{native:y()},destinationChain:{gasAmountMax:y(),swap:d,transfer:c},exchangeRate:s.exchangeRate,sourceNativeTokenPrice:s.sourceNativeTokenPrice}}let g=n.txCostAmount.maxAmount,l=P(g,x.getChainDecimalsByType(n.chainType)).toFixed(),A=(0,Ne.Big)(l).div(s.exchangeRate).toFixed(x.getChainDecimalsByType(i.chainType),Ne.Big.roundDown),u=j(A,x.getChainDecimalsByType(i.chainType)).toFixed(0);if(o.native={int:u,float:A},s.sourceNativeTokenPrice){let y=(0,Ne.Big)(A).mul(s.sourceNativeTokenPrice).toFixed(i.decimals,Ne.Big.roundDown);o.stablecoin={int:j(y,i.decimals).toFixed(0),float:y}}let m;if(s.abrExchangeRate&&i.abrPayer&&i.abrPayer.payerAvailability[a]){m=!0;let y=(0,Ne.Big)(A).mul(s.abrExchangeRate).toFixed(i.abrPayer.abrToken.decimals,Ne.Big.roundDown);o.abr={int:j(y,i.abrPayer.abrToken.decimals).toFixed(0),float:y}}return{extraGasMax:o,destinationChain:{gasAmountMax:{int:g,float:l},swap:d,transfer:c},exchangeRate:s.exchangeRate,abrExchangeRate:m?s.abrExchangeRate:void 0,sourceNativeTokenPrice:s.sourceNativeTokenPrice}}function qs(i){return i.sourceToken.chainSymbol!==i.destinationToken.chainSymbol}var ja=class extends ke{constructor(a,r){super();this.algorand=a;this.api=r;let o=Xa.default.generateAccount(),s=new ec.SigningAccount(o,o.addr);a.setDefaultSigner(s),a.setDefaultValidityWindow(100)}algorand;api;chainType="ALG";send(a){throw new J}async buildRawTransactionSend(a){let r=await Ee(this.chainType,a,this.api);if(!a.sourceToken.bridgeId)throw new f("ALG sourceToken must contain 'bridgeId'");if(!a.sourceToken.paddingUtilId)throw new f("ALG sourceToken must contain 'paddingUtilId'");let o=BigInt(a.sourceToken.bridgeId),s=this.getBridge(o),c=BigInt(a.sourceToken.paddingUtilId),d=this.getPaddingUtil(c),g=Xa.Address.fromString(a.fromAccountAddress),l=BigInt(a.sourceToken.tokenAddress),A=r.toChainId,u=r.toAccountAddress,m=r.toTokenAddress,y=Vt(),v=BigInt(r.amount),C=BigInt(r.fee);r.extraGas&&(C=C+BigInt(r.extraGas));let R=this.algorand.newGroup(),Y=await this.algorand.createTransaction.assetTransfer({amount:v,assetId:l,receiver:s.appAddress,sender:g});switch(r.gasFeePaymentMethod){case"native":{let N=await this.algorand.createTransaction.payment({amount:tc.AlgoAmount.MicroAlgo(C),receiver:s.appAddress,sender:g});R.addAppCallMethodCall(await s.params.swapAndBridge({args:{paymentRef:N,assetTransferRef:Y,recipient:u,destinationChainId:A,receiveToken:m,nonce:y},sender:g,extraFee:An(8)}));break}case"stablecoin":{R.addAppCallMethodCall(await s.params.swapAndBridgeWithStable({args:{assetTransferRef:Y,recipient:u,destinationChainId:A,receiveToken:m,nonce:y,feeTokenAmount:C},sender:g,extraFee:An(9)}));break}case"abr":throw new f("ALG bridge does not support ABR payment method");default:return se(r.gasFeePaymentMethod,"Unhandled FeePaymentMethod")}let h=await this.algorand.createTransaction.appCall({appId:d.appId,sender:g,note:"padding1"});R.addTransaction(h);let F=await this.algorand.createTransaction.appCall({appId:d.appId,sender:g,note:"padding2"});R.addTransaction(F);let{transactions:G}=await R.buildTransactions();return io(G,g,this.algorand.client.algod)}async buildRawTransactionSwap(a){let r=tt(this.chainType,a),o=Xa.Address.fromString(a.fromAccountAddress),s=a.toAccountAddress,c=BigInt(a.sourceToken.tokenAddress),d=BigInt(a.destinationToken.tokenAddress),g=BigInt(r.minimumReceiveAmount),l=BigInt(r.amount);if(!a.sourceToken.bridgeId)throw new f("ALG sourceToken must contain 'bridgeId'");if(!a.sourceToken.paddingUtilId)throw new f("ALG sourceToken must contain 'paddingUtilId'");let A=BigInt(a.sourceToken.bridgeId),u=this.getBridge(A),m=BigInt(a.sourceToken.paddingUtilId),y=this.getPaddingUtil(m),v=this.algorand.newGroup();a.fromAccountAddress===s&&(await Fi(d,s,this.algorand)||v.addAssetOptIn({sender:o,assetId:d}));let C=this.algorand.createTransaction.assetTransfer({assetId:c,amount:l,sender:o,receiver:u.appAddress});v.addAppCallMethodCall(await u.params.swap({args:{assetTransferRef:C,recipient:s,receiveAsset:d,receiveAmountMin:g},sender:o,extraFee:An(4)}));let R=await this.algorand.createTransaction.appCall({appId:y.appId,sender:o});v.addTransaction(R);let{transactions:Y}=await v.buildTransactions();return io(Y,o,this.algorand.client.algod)}getBridge(a){return this.algorand.client.getTypedAppClientById(wi,{appId:a})}getPaddingUtil(a){return this.algorand.client.getTypedAppClientById(Ni,{appId:a})}};var lc=require("@stacks/transactions"),La=require("big.js");var dl={abi:[{inputs:[{internalType:"uint256",name:"_chainId",type:"uint256"},{internalType:"uint256",name:"_chainPrecision",type:"uint256"},{internalType:"contract Messenger",name:"_allbridgeMessenger",type:"address"},{internalType:"contract WormholeMessenger",name:"_wormholeMessenger",type:"address"},{internalType:"contract IGasOracle",name:"_gasOracle",type:"address"}],stateMutability:"nonpayable",type:"constructor"},{anonymous:!1,inputs:[{indexed:!1,internalType:"uint256",name:"gas",type:"uint256"}],name:"BridgingFeeFromTokens",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"previousOwner",type:"address"},{indexed:!0,internalType:"address",name:"newOwner",type:"address"}],name:"OwnershipTransferred",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"uint256",name:"bridgeTransactionCost",type:"uint256"},{indexed:!1,internalType:"uint256",name:"messageTransactionCost",type:"uint256"}],name:"ReceiveFee",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"sender",type:"address"},{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"}],name:"Received",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"sender",type:"address"},{indexed:!1,internalType:"address",name:"recipient",type:"address"},{indexed:!1,internalType:"bytes32",name:"sendToken",type:"bytes32"},{indexed:!1,internalType:"bytes32",name:"receiveToken",type:"bytes32"},{indexed:!1,internalType:"uint256",name:"sendAmount",type:"uint256"},{indexed:!1,internalType:"uint256",name:"receiveAmount",type:"uint256"}],name:"Swapped",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"},{indexed:!1,internalType:"bytes32",name:"recipient",type:"bytes32"},{indexed:!1,internalType:"uint256",name:"nonce",type:"uint256"},{indexed:!1,internalType:"enum MessengerProtocol",name:"messenger",type:"uint8"},{indexed:!1,internalType:"bytes32",name:"message",type:"bytes32"}],name:"TokensReceived",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"},{indexed:!1,internalType:"bytes32",name:"recipient",type:"bytes32"},{indexed:!1,internalType:"uint256",name:"destinationChainId",type:"uint256"},{indexed:!1,internalType:"bytes32",name:"receiveToken",type:"bytes32"},{indexed:!1,internalType:"uint256",name:"nonce",type:"uint256"},{indexed:!1,internalType:"enum MessengerProtocol",name:"messenger",type:"uint8"}],name:"TokensSent",type:"event"},{stateMutability:"payable",type:"fallback"},{inputs:[{internalType:"uint256",name:"_chainId",type:"uint256"},{internalType:"bytes32",name:"tokenAddress",type:"bytes32"}],name:"addBridgeToken",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"contract Pool",name:"pool",type:"address"},{internalType:"bytes32",name:"token",type:"bytes32"}],name:"addPool",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"canSwap",outputs:[{internalType:"uint8",name:"",type:"uint8"}],stateMutability:"view",type:"function"},{inputs:[],name:"chainId",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"chainId",type:"uint256"}],name:"gasUsage",outputs:[{internalType:"uint256",name:"amount",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"destinationChainId",type:"uint256"},{internalType:"enum MessengerProtocol",name:"messenger",type:"uint8"},{internalType:"address",name:"tokenAddress",type:"address"}],name:"getBridgingCostInTokens",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"chainId",type:"uint256"},{internalType:"enum MessengerProtocol",name:"protocol",type:"uint8"}],name:"getMessageCost",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"chainId",type:"uint256"},{internalType:"enum MessengerProtocol",name:"protocol",type:"uint8"}],name:"getMessageGasUsage",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"chainId",type:"uint256"}],name:"getTransactionCost",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes32",name:"message",type:"bytes32"},{internalType:"enum MessengerProtocol",name:"protocol",type:"uint8"}],name:"hasReceivedMessage",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes32",name:"message",type:"bytes32"}],name:"hasSentMessage",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"bytes32",name:"recipient",type:"bytes32"},{internalType:"uint256",name:"sourceChainId",type:"uint256"},{internalType:"uint256",name:"destinationChainId",type:"uint256"},{internalType:"bytes32",name:"receiveToken",type:"bytes32"},{internalType:"uint256",name:"nonce",type:"uint256"},{internalType:"enum MessengerProtocol",name:"messenger",type:"uint8"}],name:"hashMessage",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],stateMutability:"pure",type:"function"},{inputs:[{internalType:"uint256",name:"chainId",type:"uint256"},{internalType:"bytes32",name:"tokenAddress",type:"bytes32"}],name:"otherBridgeTokens",outputs:[{internalType:"bool",name:"isSupported",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"chainId",type:"uint256"}],name:"otherBridges",outputs:[{internalType:"bytes32",name:"bridgeAddress",type:"bytes32"}],stateMutability:"view",type:"function"},{inputs:[],name:"owner",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes32",name:"tokenId",type:"bytes32"}],name:"pools",outputs:[{internalType:"contract Pool",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes32",name:"messageHash",type:"bytes32"}],name:"processedMessages",outputs:[{internalType:"uint256",name:"isProcessed",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"bytes32",name:"recipient",type:"bytes32"},{internalType:"uint256",name:"sourceChainId",type:"uint256"},{internalType:"bytes32",name:"receiveToken",type:"bytes32"},{internalType:"uint256",name:"nonce",type:"uint256"},{internalType:"enum MessengerProtocol",name:"messenger",type:"uint8"},{internalType:"uint256",name:"receiveAmountMin",type:"uint256"}],name:"receiveTokens",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"uint256",name:"_chainId",type:"uint256"},{internalType:"bytes32",name:"bridgeAddress",type:"bytes32"}],name:"registerBridge",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"_chainId",type:"uint256"},{internalType:"bytes32",name:"tokenAddress",type:"bytes32"}],name:"removeBridgeToken",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"renounceOwnership",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes32",name:"messageHash",type:"bytes32"}],name:"sentMessages",outputs:[{internalType:"uint256",name:"isSent",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"contract Messenger",name:"_allbridgeMessenger",type:"address"}],name:"setAllbridgeMessenger",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"contract IGasOracle",name:"_gasOracle",type:"address"}],name:"setGasOracle",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"chainId",type:"uint256"},{internalType:"uint256",name:"gasAmount",type:"uint256"}],name:"setGasUsage",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"_rebalancer",type:"address"}],name:"setRebalancer",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"_stopAuthority",type:"address"}],name:"setStopAuthority",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"contract WormholeMessenger",name:"_wormholeMessenger",type:"address"}],name:"setWormholeMessenger",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"startSwap",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"stopSwap",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"bytes32",name:"token",type:"bytes32"},{internalType:"bytes32",name:"receiveToken",type:"bytes32"},{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256",name:"receiveAmountMin",type:"uint256"}],name:"swap",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes32",name:"token",type:"bytes32"},{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"bytes32",name:"recipient",type:"bytes32"},{internalType:"uint256",name:"destinationChainId",type:"uint256"},{internalType:"bytes32",name:"receiveToken",type:"bytes32"},{internalType:"uint256",name:"nonce",type:"uint256"},{internalType:"enum MessengerProtocol",name:"messenger",type:"uint8"},{internalType:"uint256",name:"feeTokenAmount",type:"uint256"}],name:"swapAndBridge",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"address",name:"newOwner",type:"address"}],name:"transferOwnership",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"contract IERC20",name:"token",type:"address"}],name:"withdrawBridgingFeeInTokens",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"amount",type:"uint256"}],name:"withdrawGasTokens",outputs:[],stateMutability:"nonpayable",type:"function"},{stateMutability:"payable",type:"receive"}]},nc=dl;var gl={abi:[{inputs:[{internalType:"uint256",name:"chainId_",type:"uint256"},{internalType:"uint256",name:"chainPrecision_",type:"uint256"},{internalType:"address",name:"tokenAddress",type:"address"},{internalType:"address",name:"cctpMessenger_",type:"address"},{internalType:"address",name:"cctpTransmitter_",type:"address"},{internalType:"contract IGasOracle",name:"gasOracle_",type:"address"}],stateMutability:"nonpayable",type:"constructor"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"previousOwner",type:"address"},{indexed:!0,internalType:"address",name:"newOwner",type:"address"}],name:"OwnershipTransferred",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"recipient",type:"address"},{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"}],name:"ReceivedExtraGas",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"sender",type:"address"},{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"}],name:"ReceivedGas",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"sender",type:"address"},{indexed:!1,internalType:"uint256",name:"nonce",type:"uint256"},{indexed:!1,internalType:"bytes32",name:"newRecipient",type:"bytes32"}],name:"RecipientReplaced",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"bytes32",name:"recipientWalletAddress",type:"bytes32"}],name:"TokensSentExtras",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"},{indexed:!1,internalType:"address",name:"sender",type:"address"},{indexed:!1,internalType:"bytes32",name:"recipient",type:"bytes32"},{indexed:!1,internalType:"uint256",name:"destinationChainId",type:"uint256"},{indexed:!1,internalType:"uint256",name:"nonce",type:"uint256"},{indexed:!1,internalType:"uint256",name:"receivedRelayerFeeFromGas",type:"uint256"},{indexed:!1,internalType:"uint256",name:"receivedRelayerFeeFromTokens",type:"uint256"},{indexed:!1,internalType:"uint256",name:"relayerFee",type:"uint256"},{indexed:!1,internalType:"uint256",name:"receivedRelayerFeeTokenAmount",type:"uint256"},{indexed:!1,internalType:"uint256",name:"adminFeeTokenAmount",type:"uint256"}],name:"TokensSent",type:"event"},{stateMutability:"payable",type:"fallback"},{inputs:[],name:"adminFeeShareBP",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"bytes32",name:"recipient",type:"bytes32"},{internalType:"uint256",name:"destinationChainId",type:"uint256"},{internalType:"uint256",name:"relayerFeeTokenAmount",type:"uint256"}],name:"bridge",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"bytes32",name:"recipient",type:"bytes32"},{internalType:"bytes32",name:"recipientWalletAddress",type:"bytes32"},{internalType:"uint256",name:"destinationChainId",type:"uint256"},{internalType:"uint256",name:"relayerFeeTokenAmount",type:"uint256"}],name:"bridgeWithWalletAddress",outputs:[],stateMutability:"payable",type:"function"},{inputs:[],name:"chainId",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes",name:"originalMessage",type:"bytes"},{internalType:"bytes",name:"originalAttestation",type:"bytes"},{internalType:"bytes32",name:"newRecipient",type:"bytes32"}],name:"changeRecipient",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"chainId",type:"uint256"}],name:"gasUsage",outputs:[{internalType:"uint256",name:"amount",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"destinationChainId",type:"uint256"}],name:"getBridgingCostInTokens",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"chainId_",type:"uint256"}],name:"getDomainByChainId",outputs:[{internalType:"uint32",name:"",type:"uint32"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"chainId",type:"uint256"}],name:"getTransactionCost",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"sourceChainId",type:"uint256"},{internalType:"uint64",name:"nonce",type:"uint64"}],name:"isMessageProcessed",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[],name:"owner",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"recipient",type:"address"},{internalType:"bytes",name:"message",type:"bytes"},{internalType:"bytes",name:"signature",type:"bytes"}],name:"receiveTokens",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"uint256",name:"chainId_",type:"uint256"},{internalType:"uint32",name:"domain",type:"uint32"}],name:"registerBridgeDestination",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"renounceOwnership",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"adminFeeShareBP_",type:"uint256"}],name:"setAdminFeeShare",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"contract IGasOracle",name:"gasOracle_",type:"address"}],name:"setGasOracle",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"chainId",type:"uint256"},{internalType:"uint256",name:"gasAmount",type:"uint256"}],name:"setGasUsage",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"newOwner",type:"address"}],name:"transferOwnership",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"chainId_",type:"uint256"}],name:"unregisterBridgeDestination",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"withdrawFeeInTokens",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"amount",type:"uint256"}],name:"withdrawGas",outputs:[],stateMutability:"nonpayable",type:"function"},{stateMutability:"payable",type:"receive"}]},ac=gl;var ll={abi:[{inputs:[{internalType:"uint256",name:"chainId_",type:"uint256"},{internalType:"uint256",name:"chainPrecision_",type:"uint256"},{internalType:"contract IGasOracle",name:"gasOracle_",type:"address"}],stateMutability:"nonpayable",type:"constructor"},{inputs:[{internalType:"uint16",name:"optionType",type:"uint16"}],name:"InvalidOptionType",type:"error"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"sender",type:"address"},{indexed:!1,internalType:"bytes32",name:"recipient",type:"bytes32"},{indexed:!1,internalType:"address",name:"tokenAddress",type:"address"},{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"},{indexed:!1,internalType:"uint256",name:"destinationChainId",type:"uint256"},{indexed:!1,internalType:"uint256",name:"receivedRelayerFeeFromGas",type:"uint256"},{indexed:!1,internalType:"uint256",name:"receivedRelayerFeeFromTokens",type:"uint256"},{indexed:!1,internalType:"uint256",name:"relayerFeeWithExtraGas",type:"uint256"},{indexed:!1,internalType:"uint256",name:"receivedRelayerFeeTokenAmount",type:"uint256"},{indexed:!1,internalType:"uint256",name:"adminFeeTokenAmount",type:"uint256"},{indexed:!1,internalType:"uint256",name:"extraGasDestinationToken",type:"uint256"}],name:"OftTokensSent",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"previousOwner",type:"address"},{indexed:!0,internalType:"address",name:"newOwner",type:"address"}],name:"OwnershipTransferred",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"sender",type:"address"},{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"}],name:"ReceivedGas",type:"event"},{stateMutability:"payable",type:"fallback"},{inputs:[{internalType:"address",name:"oft_",type:"address"}],name:"addToken",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"tokenAddress",type:"address"}],name:"adminFeeShareBP",outputs:[{internalType:"uint256",name:"feeShare",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"tokenAddress",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"bytes32",name:"recipient",type:"bytes32"},{internalType:"uint256",name:"destinationChainId",type:"uint256"},{internalType:"uint256",name:"relayerFeeTokenAmount",type:"uint256"},{internalType:"uint256",name:"extraGasInDestinationToken",type:"uint256"},{internalType:"uint256",name:"slippageBP",type:"uint256"}],name:"bridge",outputs:[],stateMutability:"payable",type:"function"},{inputs:[],name:"chainId",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"tokenAddress_",type:"address"},{internalType:"uint256",name:"destinationChainId_",type:"uint256"},{internalType:"uint128",name:"extraGasAmount_",type:"uint128"}],name:"extraGasPrice",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"chainId_",type:"uint256"}],name:"getEidByChainId",outputs:[{internalType:"uint32",name:"",type:"uint32"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"tokenAddress",type:"address"}],name:"oftAddress",outputs:[{internalType:"address",name:"oftAddress",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"owner",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"chainId_",type:"uint256"},{internalType:"uint32",name:"eid_",type:"uint32"},{internalType:"uint128",name:"lzGasLimit_",type:"uint128"}],name:"registerBridgeDestination",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"tokenAddress_",type:"address"},{internalType:"uint256",name:"destinationChainId_",type:"uint256"}],name:"relayerFee",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"oft_",type:"address"}],name:"removeToken",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"renounceOwnership",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"tokenAddress_",type:"address"},{internalType:"uint256",name:"adminFeeShareBP_",type:"uint256"}],name:"setAdminFeeShare",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"chainId_",type:"uint256"},{internalType:"uint128",name:"lzGasLimit_",type:"uint128"}],name:"setLzGasLimit",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"chainId_",type:"uint256"},{internalType:"uint256",name:"maxExtraGas_",type:"uint256"}],name:"setMaxExtraGas",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"newOwner",type:"address"}],name:"transferOwnership",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"chainId_",type:"uint256"}],name:"unregisterBridgeDestination",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"contract IERC20",name:"token_",type:"address"}],name:"withdrawFeeInTokens",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"amount_",type:"uint256"}],name:"withdrawGas",outputs:[],stateMutability:"nonpayable",type:"function"},{stateMutability:"payable",type:"receive"}]},ic=ll;var Al={abi:[{inputs:[{internalType:"address",name:"_abrTokenAddress",type:"address"},{internalType:"uint256",name:"_chainPrecision",type:"uint256"}],stateMutability:"nonpayable",type:"constructor"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"previousOwner",type:"address"},{indexed:!0,internalType:"address",name:"newOwner",type:"address"}],name:"OwnershipTransferred",type:"event"},{stateMutability:"payable",type:"fallback"},{inputs:[],name:"abrToken",outputs:[{internalType:"contract IERC20Metadata",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"_tokenAddress",type:"address"},{internalType:"address",name:"_bridge",type:"address"}],name:"approveBridgeToken",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"exchangeRate",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"_amount",type:"uint256"}],name:"nativeTokensToAbr",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"owner",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"_id",type:"uint256"},{internalType:"address",name:"_target",type:"address"},{internalType:"string",name:"_signature",type:"string"}],name:"registerTarget",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"renounceOwnership",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"_newExchangeRate",type:"uint256"}],name:"setExchangeRate",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"id",type:"uint256"}],name:"targets",outputs:[{internalType:"address",name:"target",type:"address"},{internalType:"bytes4",name:"selector",type:"bytes4"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"newOwner",type:"address"}],name:"transferOwnership",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"_token",type:"address"},{internalType:"uint256",name:"_amount",type:"uint256"},{internalType:"uint256",name:"_abrAmount",type:"uint256"},{internalType:"uint256",name:"_targetId",type:"uint256"},{internalType:"bytes",name:"_params",type:"bytes"}],name:"transferTokensAndCallTarget",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"uint256",name:"amount",type:"uint256"}],name:"withdrawGas",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"tokenAddress",type:"address"}],name:"withdrawTokens",outputs:[],stateMutability:"nonpayable",type:"function"},{stateMutability:"payable",type:"receive"}]},rc=Al;var ul={abi:[{inputs:[{internalType:"uint256",name:"chainId_",type:"uint256"},{internalType:"address",name:"tokenAddress",type:"address"},{internalType:"address",name:"xReserve_",type:"address"}],stateMutability:"nonpayable",type:"constructor"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"previousOwner",type:"address"},{indexed:!0,internalType:"address",name:"newOwner",type:"address"}],name:"OwnershipTransferred",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"sender",type:"address"},{indexed:!1,internalType:"bytes32",name:"recipient",type:"bytes32"},{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"},{indexed:!1,internalType:"uint256",name:"destinationChainId",type:"uint256"},{indexed:!1,internalType:"uint256",name:"adminFeeTokenAmount",type:"uint256"},{indexed:!1,internalType:"uint256",name:"maxFee",type:"uint256"}],name:"TokensSent",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"bytes32",name:"recipientWalletAddress",type:"bytes32"}],name:"TokensSentExtras",type:"event"},{stateMutability:"payable",type:"fallback"},{inputs:[],name:"adminFeeShareBP",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"bytes32",name:"recipient",type:"bytes32"},{internalType:"uint256",name:"destinationChainId",type:"uint256"}],name:"bridge",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"bytes32",name:"recipient",type:"bytes32"},{internalType:"bytes32",name:"recipientWalletAddress",type:"bytes32"},{internalType:"uint256",name:"destinationChainId",type:"uint256"}],name:"bridgeWithWalletAddress",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"chainId",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"chainId_",type:"uint256"}],name:"getDomainByChainId",outputs:[{internalType:"uint32",name:"",type:"uint32"}],stateMutability:"view",type:"function"},{inputs:[],name:"maxFeeShare",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"owner",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"chainId_",type:"uint256"},{internalType:"uint32",name:"domain",type:"uint32"}],name:"registerBridgeDestination",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"renounceOwnership",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"adminFeeShareBP_",type:"uint256"}],name:"setAdminFeeShare",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"maxFeeShare_",type:"uint256"}],name:"setMaxFeeShare",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"newOwner",type:"address"}],name:"transferOwnership",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"chainId_",type:"uint256"}],name:"unregisterBridgeDestination",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"withdrawFeeInTokens",outputs:[],stateMutability:"nonpayable",type:"function"},{stateMutability:"payable",type:"receive"}]},oc=ul;var dc=Ft(require("@coral-xyz/anchor")),gc=require("@solana/spl-token"),uo=require("@solana/web3.js");var Pe=Ft(require("@coral-xyz/anchor")),Xe=require("@solana/web3.js");function _e(i,n){return Pe.utils.token.associatedAddress({mint:n,owner:i})}async function lt(i){let[n]=await Xe.PublicKey.findProgramAddress([Pe.utils.bytes.utf8.encode("config")],i);return n}async function Vi(i,n){let[a]=await Xe.PublicKey.findProgramAddress([Pe.utils.bytes.utf8.encode("lock"),Uint8Array.from(i)],n);return a}async function Xt(i,n){let[a]=await Xe.PublicKey.findProgramAddress([Pe.utils.bytes.utf8.encode("price_v2"),Uint8Array.from([i])],n);return a}async function pn(i){let n=await lt(i),[a]=await Xe.PublicKey.findProgramAddress([n.toBuffer()],i);return a}async function Pi(i,n){let[a]=await Xe.PublicKey.findProgramAddress([i.toBuffer()],n);return a}async function Kt(i,n){let[a]=await Xe.PublicKey.findProgramAddress([Pe.utils.bytes.utf8.encode("token"),i.toBytes()],n);return a}async function Xi(i,n,a){let[r]=await Xe.PublicKey.findProgramAddress([Pe.utils.bytes.utf8.encode("other_bridge_token"),Buffer.from([i]),n],a);return r}async function Bn(i,n){let[a]=await Xe.PublicKey.findProgramAddress([Pe.utils.bytes.utf8.encode("chain_bridge"),Uint8Array.from([i])],n);return a}async function Jn(i,n){let[a]=await Xe.PublicKey.findProgramAddress([Pe.utils.bytes.utf8.encode("gas_usage"),Uint8Array.from([i])],n);return a}async function ji(i,n){let[a]=await Xe.PublicKey.findProgramAddress([Pe.utils.bytes.utf8.encode("sent_message"),i],n);return a}async function Ao(i,n,a){let[r]=await Xe.PublicKey.findProgramAddress([Pe.utils.bytes.utf8.encode("user_deposit"),n.toBytes(),i.toBytes()],a);return r}async function Mi(i,n){let[a]=await Xe.PublicKey.findProgramAddress([Pe.utils.bytes.utf8.encode("cctp_bridge"),i.toBytes()],n);return a}function Li(i,n){let[a]=Xe.PublicKey.findProgramAddressSync([Pe.utils.bytes.utf8.encode("config"),i.toBytes()],n);return a}async function sc(i,n){let[a]=await Xe.PublicKey.findProgramAddress([Pe.utils.bytes.utf8.encode("token"),i.toBytes()],n);return a}function xi(i,n){let[a]=Xe.PublicKey.findProgramAddressSync([Pe.utils.bytes.utf8.encode("lock"),n.toBuffer()],i);return a}function Ma(i,n,a,r){let o=Tn("message_transmitter",a),s=Tn("token_messenger",r),c=Tn("__event_authority",r),d=Tn("token_minter",r),g=Tn("local_token",r,[n]),l=Tn("remote_token_messenger",r,[i.toString()]),A=Tn("sender_authority",r);return{messageTransmitterAccount:o,tokenMessenger:s,tokenMessengerEventAuthority:c,tokenMinter:d,localToken:g,remoteTokenMessengerKey:l,authorityPda:A}}function Tn(i,n,a=[]){let r=[Buffer.from(Pe.utils.bytes.utf8.encode(i))];for(let s of a)typeof s=="string"?r.push(Buffer.from(Pe.utils.bytes.utf8.encode(s))):Array.isArray(s)||Buffer.isBuffer(s)?r.push(Buffer.from(Uint8Array.from(s))):r.push(Buffer.from(Uint8Array.from(s.toBuffer())));return Xe.PublicKey.findProgramAddressSync(r,n)[0]}var cc=require("@coral-xyz/anchor"),Hi=require("@solana/web3.js");function It(i,n){let a=new Hi.Connection(i,"confirmed"),r=new Hi.PublicKey(n);return new cc.AnchorProvider(a,{publicKey:r},{preflightCommitment:"confirmed",commitment:"confirmed"})}async function Ji(i,n,a,r){let o,s=new uo.PublicKey(n),c=new uo.PublicKey(a),d=_e(s,c),g=It(r,n);dc.setProvider(g);let l=await(0,gc.getAccount)(g.connection,d);if(l?.owner.equals(s))o=Qt(d.toBase58(),"SOLANA",i);else{let A=await g.connection.getTokenAccountsByOwner(s,{mint:c});if(A.value.length===0&&!l)o=Qt(d.toBase58(),"SOLANA",i);else if(A.value.length>0){let u=A.value[0];if(!u?.pubkey)throw new f("First token account or its public key is undefined");o=Qt(u.pubkey.toBase58(),"SOLANA",i)}else throw new f("Associated account has wrong owner")}return o}var xa=class extends ke{constructor(a,r,o){super();this.web3=a;this.api=r;this.nodeRpcUrlsConfig=o}web3;api;nodeRpcUrlsConfig;chainType="EVM";async send(a){let r=await this.buildRawTransactionSend(a);return this.sendRawTransaction(r)}async buildRawTransactionSwap(a){let r=tt(this.chainType,a);return await this.buildRawTransactionSwapFromParams(r)}async buildRawTransactionSwapFromParams(a){let{amount:r,contractAddress:o,fromAccountAddress:s,fromTokenAddress:c,toAccountAddress:d,toTokenAddress:g,minimumReceiveAmount:l}=a,u=this.getBridgeContract(o).methods.swap(r,c,g,d,l);return Promise.resolve({from:s,to:o,data:u.encodeABI()})}async buildRawTransactionSend(a){let r=await Ee(this.chainType,a,this.api),{amount:o,contractAddress:s,fromAccountAddress:c,fromTokenAddress:d,toChainId:g,toAccountAddress:l,toTokenAddress:A,messenger:u,fee:m,gasFeePaymentMethod:y,extraGas:v,extraGasDest:C,abrExchangeRate:R}=r,Y="0x"+Vt().toString("hex"),h,F,G=m;v&&(G=(0,La.Big)(G).plus(v).toFixed());let N;if(y==="abr"){if(!R)throw new f("Cannot find 'abrExchangeRate' for ABR payment method");if(!a.sourceToken.abrPayer)throw new f("Source token must contain 'abrPayer' for ABR payment method");N=G;let k=(0,La.Big)(G).div(R);G=Ve(k,a.sourceToken.abrPayer.abrToken.decimals,x.getChainDecimalsByType(a.sourceToken.chainType)).toFixed()}switch(u){case 3:case 4:{let k=await this.buildRawTransactionCctpSend(a,r,G);h=k.sendMethod,F=k.value;break}case 5:{let k=this.buildRawTransactionOftSend(a,r,G,C);h=k.sendMethod,F=k.value;break}case 6:{let k=this.buildRawTransactionXReserveSend(a,r,G,C);h=k.sendMethod,F=k.value;break}case 1:case 2:{let k=this.getBridgeContract(s);switch(y){case"abr":case"native":{h=k.methods.swapAndBridge(d,o,l,g,A,Y,u,0),F=G;break}case"stablecoin":{h=k.methods.swapAndBridge(d,o,l,g,A,Y,u,G),F="0";break}default:return se(y,"Unhandled FeePaymentMethod")}}break}if(y==="abr"){if(!a.sourceToken.abrPayer)throw new f("Source token must contain 'abrPayer' for ABR payment method");let k=a.sourceToken.abrPayer.payerAddress;if(!N)throw new f("Failed to calculate totalFeeInAbr");let H=this.getAbrPayerContract(k),re="0x"+h.encodeABI().slice(10),E=u;return a.destinationToken.chainType==="SOLANA"&&(u===3&&(E=6),u===4&&(E=7)),h=H.methods.transferTokensAndCallTarget(a.sourceToken.tokenAddress,o,N,E,re),Promise.resolve({from:c,to:k,value:"0",data:h.encodeABI()})}return Promise.resolve({from:c,to:s,value:F,data:h.encodeABI()})}async buildRawTransactionCctpSend(a,r,o){let{amount:s,contractAddress:c,toChainId:d,toAccountAddress:g,gasFeePaymentMethod:l}=r,A=this.getCctpBridgeContract(c),u,m;if(a.destinationToken.chainType==="SOLANA"){let y=await Ji(this.chainType,a.toAccountAddress,a.destinationToken.tokenAddress,this.nodeRpcUrlsConfig.getNodeRpcUrl("SOL"));switch(l){case"abr":case"native":{u=A.methods.bridgeWithWalletAddress(s,y,g,d,0),m=o;break}case"stablecoin":{u=A.methods.bridgeWithWalletAddress(s,y,g,d,o),m="0";break}default:return se(l,"Unhandled FeePaymentMethod")}}else switch(l){case"abr":case"native":{u=A.methods.bridge(s,g,d,0),m=o;break}case"stablecoin":{u=A.methods.bridge(s,g,d,o),m="0";break}default:return se(l,"Unhandled FeePaymentMethod")}return{sendMethod:u,value:m}}buildRawTransactionOftSend(a,r,o,s){let{amount:c,contractAddress:d,toChainId:g,toAccountAddress:l,gasFeePaymentMethod:A}=r,u=this.getOftBridgeContract(d),m,y;switch(A){case"abr":case"native":{m=u.methods.bridge(a.sourceToken.tokenAddress,c,l,g,0,s??"0","10"),y=o;break}case"stablecoin":{m=u.methods.bridge(a.sourceToken.tokenAddress,c,l,g,o,s??"0","10"),y="0";break}default:return se(A,"Unhandled FeePaymentMethod")}return{sendMethod:m,value:y}}buildRawTransactionXReserveSend(a,r,o,s){let{amount:c,contractAddress:d,toChainId:g,toAccountAddress:l,gasFeePaymentMethod:A}=r;if(A!=="native")throw new f("xReserve bridge supports only WITH_NATIVE_CURRENCY payment method");if((0,La.Big)(o).gt(0)||s&&(0,La.Big)(s).gt(0))throw new f("xReserve bridge does not support additional bridge fee or extra gas");let u=l;if(a.destinationToken.chainType=="STX"){let{version:y,hash160:v}=(0,lc.createAddress)(a.toAccountAddress),C=Number(y).toString(16),R=Buffer.from(`${C}${v}`,"hex");u="0x"+ki(R,32).toString("hex")}return{sendMethod:this.getXReserveBridgeContract(d).methods.bridge(c,u,g),value:"0"}}async sendRawTransaction(a){let r=await this.web3.eth.estimateGas(a),o={maxPriorityFeePerGas:null,maxFeePerGas:null},{transactionHash:s}=await this.web3.eth.sendTransaction({...a,gas:r,...o});return{txId:s.toString()}}getBridgeContract(a){return new this.web3.eth.Contract(nc.abi,a)}getCctpBridgeContract(a){return new this.web3.eth.Contract(ac.abi,a)}getOftBridgeContract(a){return new this.web3.eth.Contract(ic.abi,a)}getAbrPayerContract(a){return new this.web3.eth.Contract(rc.abi,a)}getXReserveBridgeContract(a){return new this.web3.eth.Contract(oc.abi,a)}};var Oi=class{constructor(n,a,r,o){this.api=n;this.nodeRpcUrlsConfig=a;this.params=r;this.tokenService=o}api;nodeRpcUrlsConfig;params;tokenService;async approve(n,a){let r,o;a?(r=n,o=a):o=n;let s=Ha(o.token,o.messenger,o.gasFeePaymentMethod);return this.tokenService.buildRawTransactionApprove({...o,spender:s},r)}async send(n,a){return D(n.amount),O("amount",n.amount,n.sourceToken.decimals),qs(n)?zi(n.sourceToken.chainSymbol,this.api,this.nodeRpcUrlsConfig,this.params,a).buildRawTransactionSend(n):zi(n.sourceToken.chainSymbol,this.api,this.nodeRpcUrlsConfig,this.params,a).buildRawTransactionSwap(n)}};var hc=require("@solana/web3.js");var ot=require("@solana/web3.js"),Ac=require("big.js");var po=require("@solana/web3.js");async function Yn(i,n){return await Promise.all(i.message.addressTableLookups.map(async a=>new po.AddressLookupTableAccount({key:a.accountKey,state:po.AddressLookupTableAccount.deserialize(await n.getAccountInfo(a.accountKey).then(r=>{if(!r)throw new f("Cannot get AccountInfo");return r.data}))})))}var Ui="AUTO";async function On(i,n,a){let r=new ot.Connection(a,"confirmed"),o=(await r.simulateTransaction(i)).value.unitsConsumed;await pc(i.instructions,o,n,r)}async function uc(i,n,a){let r=new ot.Connection(a,"confirmed"),o=await Yn(i,r),s=ot.TransactionMessage.decompile(i.message,{addressLookupTableAccounts:o});if(i.serialize().length>1232)throw new Na;await pc(s.instructions,769230,n,r),i.message=s.compileToV0Message(o)}async function pc(i,n,a,r){if(n<=0)return;let o=pl(n,i),c=bo(a?.solana)?.fee;if(!c||c===Ui){await mo(i,r);return}if("pricePerUnitInMicroLamports"in c){await mo(i,r,c.pricePerUnitInMicroLamports);return}let d=(0,Ac.Big)(c.extraFeeInLamports).div(o).mul(Za(6)).toFixed(0);await mo(i,r,d)}function bo(i){return i?typeof i!="object"?{fee:i}:"pricePerUnitInMicroLamports"in i||"extraFeeInLamports"in i?{fee:i}:"fee"in i||"payTxFeeWithStablecoinSwap"in i?i:{}:{}}function pl(i,n){let a=n.findIndex(s=>s.programId.equals(ot.ComputeBudgetProgram.programId)&&ot.ComputeBudgetInstruction.decodeInstructionType(s)==="SetComputeUnitLimit"),r=Number((i*1.3).toFixed(0)),o=ot.ComputeBudgetProgram.setComputeUnitLimit({units:r});return a>=0?n[a]=o:n.push(o),r.toString()}async function mo(i,n,a){let r=i.findIndex(c=>c.programId.equals(ot.ComputeBudgetProgram.programId)&&ot.ComputeBudgetInstruction.decodeInstructionType(c)==="SetComputeUnitPrice"),o=BigInt(a||await ml(n)),s=ot.ComputeBudgetProgram.setComputeUnitPrice({microLamports:o});return r>=0?i[r]=s:i.push(s),o.toString()}async function ml(i){let n=await i.getRecentPrioritizationFees(),a=0;for(let r of n)a+=r.prioritizationFee;return(a/n.length).toFixed(0)}var Re=require("@coral-xyz/anchor"),Ei=require("@solana/spl-token"),te=require("@solana/web3.js");var mn={};fa(mn,{accounts:()=>Il,address:()=>bl,default:()=>fl,errors:()=>hl,instructions:()=>Cl,metadata:()=>yl,types:()=>vl});var bl="EmLt85sXNvqjzZo3C6BCq55ZzSuvSNFomVnf6b1PgY8R",yl={name:"bridge",version:"0.1.0",spec:"0.1.0",description:"Created with Anchor"},Cl=[{name:"add_other_bridge_token",discriminator:[103,180,1,186,219,156,185,114],accounts:[{name:"admin",signer:!0},{name:"payer",writable:!0,signer:!0},{name:"config",pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]}]}},{name:"other_bridge_token",writable:!0},{name:"system_program",address:"11111111111111111111111111111111"}],args:[{name:"_chain_id",type:"u8"},{name:"_token_address",type:{array:["u8",32]}}]},{name:"adjust_total_lp_amount",discriminator:[8,190,6,31,121,124,62,241],accounts:[{name:"admin",signer:!0},{name:"mint"},{name:"config",pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]}]}},{name:"pool",writable:!0,pda:{seeds:[{kind:"const",value:[112,111,111,108]},{kind:"account",path:"mint"}]}},{name:"bridge_token",writable:!0,pda:{seeds:[{kind:"const",value:[116,111,107,101,110]},{kind:"account",path:"mint"}]}},{name:"user_token",writable:!0},{name:"user_deposit",writable:!0,pda:{seeds:[{kind:"const",value:[117,115,101,114,95,100,101,112,111,115,105,116]},{kind:"account",path:"mint"},{kind:"account",path:"admin"}]}},{name:"bridge_authority",pda:{seeds:[{kind:"account",path:"config"}]}},{name:"token_program",address:"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"}],args:[]},{name:"claim_rewards",discriminator:[4,144,132,71,116,23,151,80],accounts:[{name:"user",writable:!0,signer:!0},{name:"mint"},{name:"config",pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]}]}},{name:"pool",writable:!0,pda:{seeds:[{kind:"const",value:[112,111,111,108]},{kind:"account",path:"mint"}]}},{name:"bridge_token",writable:!0,pda:{seeds:[{kind:"const",value:[116,111,107,101,110]},{kind:"account",path:"mint"}]}},{name:"user_token",writable:!0},{name:"user_deposit",writable:!0,pda:{seeds:[{kind:"const",value:[117,115,101,114,95,100,101,112,111,115,105,116]},{kind:"account",path:"mint"},{kind:"account",path:"user"}]}},{name:"bridge_authority",pda:{seeds:[{kind:"account",path:"config"}]}},{name:"token_program",address:"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"},{name:"system_program",address:"11111111111111111111111111111111"}],args:[]},{name:"deposit",discriminator:[242,35,198,137,82,225,242,182],accounts:[{name:"user",writable:!0,signer:!0},{name:"mint"},{name:"config",pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]}]}},{name:"pool",writable:!0,pda:{seeds:[{kind:"const",value:[112,111,111,108]},{kind:"account",path:"mint"}]}},{name:"bridge_token",writable:!0,pda:{seeds:[{kind:"const",value:[116,111,107,101,110]},{kind:"account",path:"mint"}]}},{name:"user_token",writable:!0},{name:"user_deposit",writable:!0,pda:{seeds:[{kind:"const",value:[117,115,101,114,95,100,101,112,111,115,105,116]},{kind:"account",path:"mint"},{kind:"account",path:"user"}]}},{name:"bridge_authority",pda:{seeds:[{kind:"account",path:"config"}]}},{name:"token_program",address:"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"},{name:"system_program",address:"11111111111111111111111111111111"}],args:[{name:"amount",type:"u64"}]},{name:"init_deposit_account",discriminator:[136,79,202,206,211,146,182,158],accounts:[{name:"user",writable:!0,signer:!0},{name:"payer",writable:!0,signer:!0},{name:"mint"},{name:"user_deposit",writable:!0,pda:{seeds:[{kind:"const",value:[117,115,101,114,95,100,101,112,111,115,105,116]},{kind:"account",path:"mint"},{kind:"account",path:"user"}]}},{name:"system_program",address:"11111111111111111111111111111111"}],args:[]},{name:"initialize",discriminator:[175,175,109,31,13,152,155,237],accounts:[{name:"admin",writable:!0,signer:!0},{name:"config",writable:!0,pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]}]}},{name:"system_program",address:"11111111111111111111111111111111"}],args:[{name:"args",type:{defined:{name:"InitializeArgs"}}}]},{name:"initialize_pool",discriminator:[95,180,10,172,84,174,232,40],accounts:[{name:"payer",writable:!0,signer:!0},{name:"admin",signer:!0},{name:"config",pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]}]}},{name:"pool",writable:!0,pda:{seeds:[{kind:"const",value:[112,111,111,108]},{kind:"account",path:"mint"}]}},{name:"bridge_authority",pda:{seeds:[{kind:"account",path:"config"}]}},{name:"mint"},{name:"token",writable:!0,pda:{seeds:[{kind:"const",value:[116,111,107,101,110]},{kind:"account",path:"mint"}]}},{name:"token_program",address:"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"},{name:"system_program",address:"11111111111111111111111111111111"},{name:"rent",address:"SysvarRent111111111111111111111111111111111"}],args:[{name:"args",type:{defined:{name:"InitializePoolArgs"}}}]},{name:"receive_and_swap",discriminator:[49,243,231,17,38,214,140,225],accounts:[{name:"user",writable:!0},{name:"payer",writable:!0,signer:!0},{name:"mint"},{name:"config",pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]}]}},{name:"pool",writable:!0,pda:{seeds:[{kind:"const",value:[112,111,111,108]},{kind:"account",path:"mint"}]}},{name:"bridge_token",writable:!0,pda:{seeds:[{kind:"const",value:[116,111,107,101,110]},{kind:"account",path:"mint"}]}},{name:"received_message_account"},{name:"unlock",writable:!0,pda:{seeds:[{kind:"const",value:[117,110,108,111,99,107]},{kind:"arg",path:"args.hash"}]}},{name:"chain_bridge"},{name:"user_token",writable:!0},{name:"bridge_authority",pda:{seeds:[{kind:"account",path:"config"}]}},{name:"token_program",address:"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"},{name:"system_program",address:"11111111111111111111111111111111"},{name:"messenger_program"}],args:[{name:"args",type:{defined:{name:"UnlockArgs"}}}]},{name:"receive_and_swap_wormhole",discriminator:[53,141,209,156,114,7,54,229],accounts:[{name:"user",writable:!0},{name:"payer",writable:!0,signer:!0},{name:"mint"},{name:"config",pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]}]}},{name:"pool",writable:!0,pda:{seeds:[{kind:"const",value:[112,111,111,108]},{kind:"account",path:"mint"}]}},{name:"bridge_token",writable:!0,pda:{seeds:[{kind:"const",value:[116,111,107,101,110]},{kind:"account",path:"mint"}]}},{name:"received_message_account"},{name:"unlock",writable:!0,pda:{seeds:[{kind:"const",value:[117,110,108,111,99,107]},{kind:"arg",path:"args.hash"}]}},{name:"chain_bridge"},{name:"user_token",writable:!0},{name:"bridge_authority",pda:{seeds:[{kind:"account",path:"config"}]}},{name:"token_program",address:"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"},{name:"system_program",address:"11111111111111111111111111111111"},{name:"messenger_program"}],args:[{name:"args",type:{defined:{name:"UnlockArgs"}}}]},{name:"register_chain_bridge",discriminator:[239,66,180,165,175,10,49,233],accounts:[{name:"admin",signer:!0},{name:"payer",writable:!0,signer:!0},{name:"config",pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]}]}},{name:"chain_bridge",writable:!0},{name:"system_program",address:"11111111111111111111111111111111"}],args:[{name:"args",type:{defined:{name:"RegisterChainBridgeArgs"}}}]},{name:"remove_other_bridge_token",discriminator:[149,232,199,145,241,219,24,154],accounts:[{name:"admin",signer:!0},{name:"payer",writable:!0,signer:!0},{name:"config",writable:!0,pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]}]}},{name:"other_bridge_token",writable:!0},{name:"system_program",address:"11111111111111111111111111111111"}],args:[{name:"_chain_id",type:"u8"},{name:"_token_address",type:{array:["u8",32]}}]},{name:"set_admin",discriminator:[251,163,0,52,91,194,187,92],accounts:[{name:"admin",signer:!0},{name:"new_admin"},{name:"config",writable:!0,pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]}]}}],args:[]},{name:"set_allbridge_messenger_program_id",discriminator:[168,21,145,139,97,252,84,77],accounts:[{name:"admin",signer:!0},{name:"config",writable:!0,pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]}]}}],args:[{name:"new_program_id",type:"pubkey"}]},{name:"set_balance_ratio_min",discriminator:[210,171,132,168,93,237,9,201],accounts:[{name:"admin",signer:!0},{name:"config",pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]}]}},{name:"pool",writable:!0}],args:[{name:"balance_ratio_min_bp",type:"u16"}]},{name:"set_gas_oracle_program_id",discriminator:[172,152,29,206,112,239,205,83],accounts:[{name:"admin",signer:!0},{name:"config",writable:!0,pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]}]}}],args:[{name:"new_program_id",type:"pubkey"}]},{name:"set_pool_admin_fee_share",discriminator:[235,219,45,195,124,82,164,230],accounts:[{name:"admin",signer:!0},{name:"config",pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]}]}},{name:"pool",writable:!0}],args:[{name:"fee_share_bp",type:"u64"}]},{name:"set_pool_fee_share",discriminator:[151,35,220,215,38,227,226,9],accounts:[{name:"admin",signer:!0},{name:"config",pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]}]}},{name:"pool",writable:!0}],args:[{name:"fee_share_bp",type:"u64"}]},{name:"set_rebalancer",discriminator:[28,161,168,250,215,4,144,154],accounts:[{name:"admin",signer:!0},{name:"config",writable:!0,pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]}]}},{name:"rebalancer"}],args:[]},{name:"set_stop_authority",discriminator:[238,229,235,32,221,191,227,43],accounts:[{name:"admin",signer:!0},{name:"new_authority"},{name:"config",writable:!0,pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]}]}}],args:[]},{name:"set_wormhole_messenger_program_id",discriminator:[215,127,198,117,43,17,36,24],accounts:[{name:"admin",signer:!0},{name:"config",writable:!0,pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]}]}}],args:[{name:"new_program_id",type:"pubkey"}]},{name:"start_bridge",discriminator:[213,146,40,152,47,121,85,18],accounts:[{name:"admin",signer:!0},{name:"config",writable:!0,pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]}]}}],args:[{name:"action_type",type:{defined:{name:"ActionType"}}}]},{name:"stop_bridge",discriminator:[187,52,235,53,245,59,218,1],accounts:[{name:"stop_authority",signer:!0},{name:"config",writable:!0,pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]}]}}],args:[{name:"action_type",type:{defined:{name:"ActionType"}}}]},{name:"swap",discriminator:[248,198,158,145,225,117,135,200],accounts:[{name:"user",writable:!0,signer:!0},{name:"payer",writable:!0,signer:!0},{name:"send_mint"},{name:"receive_mint"},{name:"config",writable:!0,pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]}]}},{name:"send_pool",writable:!0,pda:{seeds:[{kind:"const",value:[112,111,111,108]},{kind:"account",path:"send_mint"}]}},{name:"receive_pool",writable:!0,pda:{seeds:[{kind:"const",value:[112,111,111,108]},{kind:"account",path:"receive_mint"}]}},{name:"send_bridge_token",writable:!0,pda:{seeds:[{kind:"const",value:[116,111,107,101,110]},{kind:"account",path:"send_mint"}]}},{name:"receive_bridge_token",writable:!0,pda:{seeds:[{kind:"const",value:[116,111,107,101,110]},{kind:"account",path:"receive_mint"}]}},{name:"send_user_token",writable:!0},{name:"receive_user_token",writable:!0},{name:"bridge_authority",pda:{seeds:[{kind:"account",path:"config"}]}},{name:"token_program",address:"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"}],args:[{name:"amount",type:"u64"},{name:"receive_amount_min",type:"u64"}]},{name:"swap_and_bridge",discriminator:[204,63,169,171,186,125,86,159],accounts:[{name:"user",writable:!0,signer:!0},{name:"payer",writable:!0,signer:!0},{name:"lock",writable:!0,pda:{seeds:[{kind:"const",value:[108,111,99,107]},{kind:"arg",path:"args.nonce"}]}},{name:"mint"},{name:"config",writable:!0,pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]}]}},{name:"other_bridge_token",writable:!0},{name:"messenger"},{name:"messenger_config",writable:!0},{name:"sent_message_account",writable:!0},{name:"messenger_gas_usage"},{name:"pool",writable:!0,pda:{seeds:[{kind:"const",value:[112,111,111,108]},{kind:"account",path:"mint"}]}},{name:"bridge_token",writable:!0,pda:{seeds:[{kind:"const",value:[116,111,107,101,110]},{kind:"account",path:"mint"}]}},{name:"gas_price"},{name:"this_gas_price"},{name:"chain_bridge"},{name:"user_token",writable:!0},{name:"bridge_authority",pda:{seeds:[{kind:"account",path:"config"}]}},{name:"token_program",address:"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"},{name:"system_program",address:"11111111111111111111111111111111"}],args:[{name:"args",type:{defined:{name:"BridgeArgs"}}}]},{name:"swap_and_bridge_wormhole",discriminator:[41,91,201,180,150,117,154,65],accounts:[{name:"user",signer:!0},{name:"payer",writable:!0,signer:!0},{name:"lock",writable:!0,pda:{seeds:[{kind:"const",value:[108,111,99,107]},{kind:"arg",path:"args.nonce"}]}},{name:"mint"},{name:"config",writable:!0,pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]}]}},{name:"other_bridge_token",writable:!0},{name:"pool",writable:!0,pda:{seeds:[{kind:"const",value:[112,111,111,108]},{kind:"account",path:"mint"}]}},{name:"bridge_token",writable:!0,pda:{seeds:[{kind:"const",value:[116,111,107,101,110]},{kind:"account",path:"mint"}]}},{name:"gas_price"},{name:"this_gas_price"},{name:"chain_bridge"},{name:"user_token",writable:!0},{name:"bridge_authority",pda:{seeds:[{kind:"account",path:"config"}]}},{name:"wormhole_messenger"},{name:"wormhole_messenger_config",writable:!0},{name:"wormhole_program"},{name:"bridge",writable:!0},{name:"message",writable:!0,signer:!0},{name:"sequence",writable:!0},{name:"fee_collector",writable:!0},{name:"messenger_gas_usage"},{name:"clock",address:"SysvarC1ock11111111111111111111111111111111"},{name:"rent",address:"SysvarRent111111111111111111111111111111111"},{name:"token_program",address:"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"},{name:"system_program",address:"11111111111111111111111111111111"}],args:[{name:"args",type:{defined:{name:"BridgeArgs"}}}]},{name:"update_chain_bridge",discriminator:[227,4,133,105,230,88,226,173],accounts:[{name:"admin",signer:!0},{name:"config",pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]}]}},{name:"chain_bridge",writable:!0}],args:[{name:"args",type:{defined:{name:"UpdateChainBridgeArgs"}}}]},{name:"withdraw",discriminator:[183,18,70,156,148,109,161,34],accounts:[{name:"user",writable:!0,signer:!0},{name:"mint"},{name:"config",pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]}]}},{name:"pool",writable:!0,pda:{seeds:[{kind:"const",value:[112,111,111,108]},{kind:"account",path:"mint"}]}},{name:"bridge_token",writable:!0,pda:{seeds:[{kind:"const",value:[116,111,107,101,110]},{kind:"account",path:"mint"}]}},{name:"user_token",writable:!0},{name:"user_deposit",writable:!0,pda:{seeds:[{kind:"const",value:[117,115,101,114,95,100,101,112,111,115,105,116]},{kind:"account",path:"mint"},{kind:"account",path:"user"}]}},{name:"bridge_authority",pda:{seeds:[{kind:"account",path:"config"}]}},{name:"token_program",address:"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"},{name:"system_program",address:"11111111111111111111111111111111"}],args:[{name:"amount_lp",type:"u64"}]},{name:"withdraw_admin_fee",discriminator:[176,135,230,197,163,130,60,252],accounts:[{name:"admin",signer:!0},{name:"mint"},{name:"config",pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]}]}},{name:"pool",writable:!0,pda:{seeds:[{kind:"const",value:[112,111,111,108]},{kind:"account",path:"mint"}]}},{name:"bridge_token",writable:!0,pda:{seeds:[{kind:"const",value:[116,111,107,101,110]},{kind:"account",path:"mint"}]}},{name:"admin_token",writable:!0},{name:"bridge_authority",pda:{seeds:[{kind:"account",path:"config"}]}},{name:"token_program",address:"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"},{name:"system_program",address:"11111111111111111111111111111111"}],args:[]},{name:"withdraw_gas_token",discriminator:[109,117,140,223,117,175,2,139],accounts:[{name:"admin",signer:!0},{name:"recipient",writable:!0},{name:"config",writable:!0,pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]}]}}],args:[{name:"amount",type:"u64"}]}],Il=[{name:"ChainBridge",discriminator:[25,216,147,218,140,42,98,49]},{name:"Config",discriminator:[155,12,170,224,30,250,204,130]},{name:"Lock",discriminator:[8,255,36,202,210,22,57,137]},{name:"OtherBridgeToken",discriminator:[27,112,167,155,2,141,52,167]},{name:"Pool",discriminator:[241,154,109,4,17,177,109,188]},{name:"Price",discriminator:[50,107,127,61,83,36,39,75]},{name:"Unlock",discriminator:[187,122,21,254,7,157,241,10]},{name:"UserDeposit",discriminator:[69,238,23,217,255,137,185,35]}],hl=[{code:6e3,name:"AccountAlreadyInitialized",msg:"This account has already been initialized"},{code:6001,name:"AdminAuthorityInvalid",msg:"This instruction requires admin authority"},{code:6002,name:"InvalidSignature",msg:"Provided signature has wrong signer or message"},{code:6003,name:"InvalidHash",msg:"Wrong unlock message hash"},{code:6004,name:"PoolOverflow",msg:"Pool overflow"},{code:6005,name:"ReservesExhausted",msg:"Reserves exhausted"},{code:6006,name:"ZeroAmount",msg:"Zero amount"},{code:6007,name:"ZeroChanges",msg:"Zero changes"},{code:6008,name:"HighVusdAmount",msg:"vUSD amount is too high"},{code:6009,name:"BalanceRatioExceeded",msg:"Balance ratio exceeded"},{code:6010,name:"InsufficientReceivedAmount",msg:"Received insufficient amount"},{code:6011,name:"ForbiddenAction",msg:"ForbiddenAction"},{code:6012,name:"ValueTooHigh",msg:"Value is too high"},{code:6013,name:"EmptyRecipient",msg:"Empty recipient"}],vl=[{name:"ActionType",type:{kind:"enum",variants:[{name:"Deposit"},{name:"Withdraw"},{name:"Swap"}]}},{name:"BridgeArgs",type:{kind:"struct",fields:[{name:"nonce",type:{array:["u8",32]}},{name:"recipient",type:{array:["u8",32]}},{name:"destination_chain_id",type:"u8"},{name:"receive_token",type:{array:["u8",32]}},{name:"vusd_amount",type:"u64"}]}},{name:"ChainBridge",type:{kind:"struct",fields:[{name:"address",type:{array:["u8",32]}},{name:"chain_id",type:"u8"},{name:"gas_usage",type:"u64"}]}},{name:"Config",type:{kind:"struct",fields:[{name:"admin",type:"pubkey"},{name:"allbridge_messenger_program_id",type:"pubkey"},{name:"wormhole_messenger_program_id",type:"pubkey"},{name:"gas_oracle_program_id",type:"pubkey"},{name:"rebalancer",type:"pubkey"},{name:"stop_authority",type:"pubkey"},{name:"authority_bump_seed",type:"u8"},{name:"can_swap",type:"bool"},{name:"can_deposit",type:"bool"},{name:"can_withdraw",type:"bool"}]}},{name:"InitializeArgs",type:{kind:"struct",fields:[{name:"allbridge_messenger_program_id",type:"pubkey"},{name:"wormhole_messenger_program_id",type:"pubkey"},{name:"gas_oracle_program_id",type:"pubkey"}]}},{name:"InitializePoolArgs",type:{kind:"struct",fields:[{name:"a",type:"u64"},{name:"fee_share_bp",type:"u64"},{name:"admin_fee_share_bp",type:"u64"},{name:"balance_ratio_min_bp",type:"u16"}]}},{name:"Lock",type:{kind:"struct",fields:[{name:"sender",type:"pubkey"},{name:"sent_token_address",type:"pubkey"},{name:"amount",type:"u64"},{name:"vusd_amount",type:"u64"},{name:"recipient",type:{array:["u8",32]}},{name:"destination_chain_id",type:"u8"},{name:"receive_token",type:{array:["u8",32]}},{name:"nonce",type:{array:["u8",32]}},{name:"messenger",type:{defined:{name:"Messenger"}}},{name:"slot",type:"u64"},{name:"fee",type:"u64"}]}},{name:"Messenger",type:{kind:"enum",variants:[{name:"None"},{name:"Allbridge"},{name:"Wormhole"}]}},{name:"OtherBridgeToken",type:{kind:"struct",fields:[]}},{name:"Pool",type:{kind:"struct",fields:[{name:"mint",type:"pubkey"},{name:"a",type:"u64"},{name:"d",type:"u64"},{name:"token_balance",type:"u64"},{name:"v_usd_balance",type:"u64"},{name:"reserves",type:"u64"},{name:"decimals",type:"u8"},{name:"total_lp_amount",type:"u64"},{name:"fee_share_bp",type:"u64"},{name:"admin_fee_share_bp",type:"u64"},{name:"acc_reward_per_share_p",type:"u128"},{name:"admin_fee_amount",type:"u64"},{name:"balance_ratio_min_bp",type:"u16"}]}},{name:"Price",type:{kind:"struct",fields:[{name:"chain_id",type:"u8"},{name:"price",type:"u64"},{name:"gas_price",type:"u64"}]}},{name:"RegisterChainBridgeArgs",type:{kind:"struct",fields:[{name:"chain_bridge_address",type:{array:["u8",32]}},{name:"chain_id",type:"u8"},{name:"gas_usage",type:"u64"}]}},{name:"Unlock",type:{kind:"struct",fields:[{name:"hash",type:{array:["u8",32]}},{name:"amount",type:"u64"},{name:"fee",type:"u64"},{name:"v_usd_amount",type:"u64"},{name:"slot",type:"u64"}]}},{name:"UnlockArgs",type:{kind:"struct",fields:[{name:"nonce",type:{array:["u8",32]}},{name:"amount",type:"u64"},{name:"recipient",type:"pubkey"},{name:"source_chain_id",type:"u8"},{name:"receive_token",type:"pubkey"},{name:"messenger",type:{defined:{name:"Messenger"}}},{name:"hash",type:{array:["u8",32]}},{name:"receive_amount_min",type:"u64"}]}},{name:"UpdateChainBridgeArgs",type:{kind:"struct",fields:[{name:"chain_bridge_address",type:{array:["u8",32]}},{name:"chain_id",type:"u8"},{name:"gas_usage",type:"u64"}]}},{name:"UserDeposit",type:{kind:"struct",fields:[{name:"user_address",type:"pubkey"},{name:"mint",type:"pubkey"},{name:"lp_amount",type:"u64"},{name:"reward_debt",type:"u64"}]}}],fl={address:bl,metadata:yl,instructions:Cl,accounts:Il,errors:hl,types:vl};var yo={};fa(yo,{accounts:()=>Yl,address:()=>Rl,default:()=>Nl,errors:()=>wl,instructions:()=>Bl,metadata:()=>Tl,types:()=>Wl});var Rl="XHXBA5WK4PTaLjjVfhPLttXwjeiq18yLdPsBL42YKaY",Tl={name:"cctp_bridge",version:"0.1.0",spec:"0.1.0",description:"Created with Anchor"},Bl=[{name:"bridge",discriminator:[174,41,120,146,98,218,169,25],accounts:[{name:"user",writable:!0,signer:!0},{name:"payer",writable:!0,signer:!0},{name:"message_sent_event_data",writable:!0,signer:!0},{name:"lock",writable:!0,pda:{seeds:[{kind:"const",value:[108,111,99,107]},{kind:"account",path:"message_sent_event_data"}]}},{name:"mint",writable:!0},{name:"cctp_bridge",writable:!0,pda:{seeds:[{kind:"const",value:[99,99,116,112,95,98,114,105,100,103,101]},{kind:"account",path:"mint"}]}},{name:"cctp_messenger"},{name:"message_transmitter_program"},{name:"message_transmitter_account",writable:!0},{name:"token_messenger"},{name:"token_minter"},{name:"local_token",writable:!0},{name:"remote_token_messenger_key"},{name:"authority_pda"},{name:"event_authority"},{name:"bridge_token",writable:!0,pda:{seeds:[{kind:"const",value:[116,111,107,101,110]},{kind:"account",path:"mint"}]}},{name:"gas_price"},{name:"this_gas_price"},{name:"chain_bridge"},{name:"user_token",writable:!0},{name:"bridge_authority",pda:{seeds:[{kind:"account",path:"cctp_bridge"}]}},{name:"token_program",address:"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"},{name:"system_program",address:"11111111111111111111111111111111"}],args:[{name:"args",type:{defined:{name:"BridgeArgs"}}}]},{name:"initialize",discriminator:[175,175,109,31,13,152,155,237],accounts:[{name:"payer",writable:!0,signer:!0},{name:"admin",writable:!0,signer:!0},{name:"mint"},{name:"cctp_bridge",writable:!0,pda:{seeds:[{kind:"const",value:[99,99,116,112,95,98,114,105,100,103,101]},{kind:"account",path:"mint"}]}},{name:"bridge_authority",pda:{seeds:[{kind:"account",path:"cctp_bridge"}]}},{name:"bridge_token",writable:!0,pda:{seeds:[{kind:"const",value:[116,111,107,101,110]},{kind:"account",path:"mint"}]}},{name:"system_program",address:"11111111111111111111111111111111"},{name:"token_program",address:"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"},{name:"rent",address:"SysvarRent111111111111111111111111111111111"}],args:[{name:"args",type:{defined:{name:"InitializeArgs"}}}]},{name:"register_chain_bridge",discriminator:[239,66,180,165,175,10,49,233],accounts:[{name:"admin",signer:!0},{name:"payer",writable:!0,signer:!0},{name:"cctp_bridge",pda:{seeds:[{kind:"const",value:[99,99,116,112,95,98,114,105,100,103,101]},{kind:"arg",path:"args.mint"}]}},{name:"chain_bridge",writable:!0},{name:"system_program",address:"11111111111111111111111111111111"}],args:[{name:"args",type:{defined:{name:"RegisterChainBridgeArgs"}}}]},{name:"set_admin",discriminator:[251,163,0,52,91,194,187,92],accounts:[{name:"admin",signer:!0},{name:"mint"},{name:"new_admin"},{name:"cctp_bridge",writable:!0,pda:{seeds:[{kind:"const",value:[99,99,116,112,95,98,114,105,100,103,101]},{kind:"account",path:"mint"}]}}],args:[]},{name:"set_admin_fee_share",discriminator:[34,2,1,74,101,120,39,19],accounts:[{name:"admin",signer:!0},{name:"mint"},{name:"cctp_bridge",writable:!0,pda:{seeds:[{kind:"const",value:[99,99,116,112,95,98,114,105,100,103,101]},{kind:"account",path:"mint"}]}}],args:[{name:"fee_share_bp",type:"u64"}]},{name:"set_cctp_token_messenger_minter",discriminator:[7,23,157,231,197,83,45,203],accounts:[{name:"admin",signer:!0},{name:"mint"},{name:"cctp_bridge",writable:!0,pda:{seeds:[{kind:"const",value:[99,99,116,112,95,98,114,105,100,103,101]},{kind:"account",path:"mint"}]}}],args:[{name:"new_program_id",type:"pubkey"}]},{name:"set_gas_oracle_program_id",discriminator:[172,152,29,206,112,239,205,83],accounts:[{name:"admin",signer:!0},{name:"mint"},{name:"cctp_bridge",writable:!0,pda:{seeds:[{kind:"const",value:[99,99,116,112,95,98,114,105,100,103,101]},{kind:"account",path:"mint"}]}}],args:[{name:"new_program_id",type:"pubkey"}]},{name:"update_chain_bridge",discriminator:[227,4,133,105,230,88,226,173],accounts:[{name:"admin",signer:!0},{name:"cctp_bridge",pda:{seeds:[{kind:"const",value:[99,99,116,112,95,98,114,105,100,103,101]},{kind:"arg",path:"args.mint"}]}},{name:"chain_bridge",writable:!0}],args:[{name:"args",type:{defined:{name:"UpdateChainBridgeArgs"}}}]},{name:"withdraw_admin_fee",discriminator:[176,135,230,197,163,130,60,252],accounts:[{name:"admin",signer:!0},{name:"mint"},{name:"cctp_bridge",writable:!0,pda:{seeds:[{kind:"const",value:[99,99,116,112,95,98,114,105,100,103,101]},{kind:"account",path:"mint"}]}},{name:"bridge_token",writable:!0,pda:{seeds:[{kind:"const",value:[116,111,107,101,110]},{kind:"account",path:"mint"}]}},{name:"admin_token",writable:!0},{name:"bridge_authority",pda:{seeds:[{kind:"account",path:"cctp_bridge"}]}},{name:"token_program",address:"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"},{name:"system_program",address:"11111111111111111111111111111111"}],args:[]},{name:"withdraw_gas_token",discriminator:[109,117,140,223,117,175,2,139],accounts:[{name:"admin",signer:!0},{name:"recipient",writable:!0},{name:"mint"},{name:"cctp_bridge",writable:!0,pda:{seeds:[{kind:"const",value:[99,99,116,112,95,98,114,105,100,103,101]},{kind:"account",path:"mint"}]}}],args:[{name:"amount",type:"u64"}]}],Yl=[{name:"CctpBridge",discriminator:[164,2,216,77,99,83,161,159]},{name:"ChainBridge",discriminator:[25,216,147,218,140,42,98,49]},{name:"Lock",discriminator:[8,255,36,202,210,22,57,137]},{name:"Price",discriminator:[50,107,127,61,83,36,39,75]}],wl=[{code:6e3,name:"ValueTooHigh",msg:"Value is too high"}],Wl=[{name:"BridgeArgs",type:{kind:"struct",fields:[{name:"recipient",type:{array:["u8",32]}},{name:"destination_chain_id",type:"u8"},{name:"receive_token",type:{array:["u8",32]}},{name:"amount",type:"u64"}]}},{name:"CctpBridge",type:{kind:"struct",fields:[{name:"mint",type:"pubkey"},{name:"admin",type:"pubkey"},{name:"cctp_token_messenger_minter",type:"pubkey"},{name:"gas_oracle_program_id",type:"pubkey"},{name:"authority_bump_seed",type:"u8"},{name:"admin_fee_share_bp",type:"u64"},{name:"admin_fee_amount",type:"u64"}]}},{name:"ChainBridge",type:{kind:"struct",fields:[{name:"chain_id",type:"u8"},{name:"gas_usage",type:"u64"},{name:"domain",type:"u32"}]}},{name:"InitializeArgs",type:{kind:"struct",fields:[{name:"gas_oracle_program_id",type:"pubkey"},{name:"cctp_token_messenger_minter",type:"pubkey"},{name:"admin_fee_share_bp",type:"u64"}]}},{name:"Lock",type:{kind:"struct",fields:[{name:"sender",type:"pubkey"},{name:"amount",type:"u64"},{name:"admin_fee",type:"u64"},{name:"relayer_fee",type:"u64"},{name:"recipient",type:{array:["u8",32]}},{name:"destination_chain_id",type:"u8"},{name:"slot",type:"u64"}]}},{name:"Price",type:{kind:"struct",fields:[{name:"chain_id",type:"u8"},{name:"price",type:"u64"},{name:"gas_price",type:"u64"}]}},{name:"RegisterChainBridgeArgs",type:{kind:"struct",fields:[{name:"chain_id",type:"u8"},{name:"gas_usage",type:"u64"},{name:"domain",type:"u32"},{name:"mint",type:"pubkey"}]}},{name:"UpdateChainBridgeArgs",type:{kind:"struct",fields:[{name:"chain_id",type:"u8"},{name:"gas_usage",type:"u64"},{name:"domain",type:"u32"},{name:"mint",type:"pubkey"}]}}],Nl={address:Rl,metadata:Tl,instructions:Bl,accounts:Yl,errors:wl,types:Wl};var Co={};fa(Co,{accounts:()=>Sl,address:()=>Fl,default:()=>Pl,errors:()=>kl,instructions:()=>Zl,metadata:()=>Gl,types:()=>Vl});var Fl="jUK1TcugDebbLdEdxzZqrChtFGbnR8Sigkqdw4QdRSJ",Gl={name:"cctp_v2_bridge",version:"0.1.0",spec:"0.1.0",description:"Created with Anchor"},Zl=[{name:"bridge",discriminator:[174,41,120,146,98,218,169,25],accounts:[{name:"user",writable:!0,signer:!0},{name:"payer",writable:!0,signer:!0},{name:"message_sent_event_data",writable:!0,signer:!0},{name:"lock",writable:!0,pda:{seeds:[{kind:"const",value:[108,111,99,107]},{kind:"account",path:"message_sent_event_data"}]}},{name:"mint",writable:!0},{name:"config",writable:!0,pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]},{kind:"account",path:"mint"}]}},{name:"token_messenger_minter_program"},{name:"message_transmitter_program"},{name:"message_transmitter_account",writable:!0},{name:"token_messenger"},{name:"token_minter"},{name:"local_token",writable:!0},{name:"remote_token_messenger"},{name:"authority_pda"},{name:"denylist_account",pda:{seeds:[{kind:"const",value:[100,101,110,121,108,105,115,116,95,97,99,99,111,117,110,116]},{kind:"account",path:"user"}],program:{kind:"account",path:"token_messenger_minter_program"}}},{name:"event_authority"},{name:"bridge_token",writable:!0,pda:{seeds:[{kind:"const",value:[116,111,107,101,110]},{kind:"account",path:"mint"}]}},{name:"gas_price"},{name:"this_gas_price"},{name:"chain_bridge"},{name:"user_token",writable:!0},{name:"bridge_authority",pda:{seeds:[{kind:"account",path:"config"}]}},{name:"token_program",address:"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"},{name:"system_program",address:"11111111111111111111111111111111"}],args:[{name:"args",type:{defined:{name:"BridgeArgs"}}}]},{name:"initialize",discriminator:[175,175,109,31,13,152,155,237],accounts:[{name:"payer",writable:!0,signer:!0},{name:"admin",writable:!0,signer:!0},{name:"mint"},{name:"config",writable:!0,pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]},{kind:"account",path:"mint"}]}},{name:"bridge_authority",pda:{seeds:[{kind:"account",path:"config"}]}},{name:"bridge_token",writable:!0,pda:{seeds:[{kind:"const",value:[116,111,107,101,110]},{kind:"account",path:"mint"}]}},{name:"system_program",address:"11111111111111111111111111111111"},{name:"token_program",address:"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"},{name:"rent",address:"SysvarRent111111111111111111111111111111111"}],args:[{name:"args",type:{defined:{name:"InitializeArgs"}}}]},{name:"receive_tokens",discriminator:[229,73,222,185,57,227,213,67],accounts:[{name:"payer",writable:!0,signer:!0},{name:"mint",writable:!0},{name:"config",writable:!0,pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]},{kind:"account",path:"mint"}]}},{name:"bridge_authority",pda:{seeds:[{kind:"account",path:"config"}]}},{name:"recipient",writable:!0},{name:"message_transmitter_program"},{name:"authority_pda"},{name:"message_transmitter_account"},{name:"used_nonce",writable:!0},{name:"token_messenger_minter_program"},{name:"message_transmitter_event_authority"},{name:"token_messenger"},{name:"remote_token_messenger"},{name:"token_minter"},{name:"local_token",writable:!0},{name:"token_pair"},{name:"fee_recipient_token_account",writable:!0},{name:"recipient_token_account",writable:!0,pda:{seeds:[{kind:"account",path:"recipient"},{kind:"const",value:[6,221,246,225,215,101,161,147,217,203,225,70,206,235,121,172,28,180,133,237,95,91,55,145,58,140,245,133,126,255,0,169]},{kind:"account",path:"mint"}],program:{kind:"const",value:[140,151,37,143,78,36,137,241,187,61,16,41,20,142,13,131,11,90,19,153,218,255,16,132,4,142,123,216,219,233,248,89]}}},{name:"custody_token_account",writable:!0},{name:"token_messenger_event_authority"},{name:"token_program",address:"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"},{name:"system_program",address:"11111111111111111111111111111111"}],args:[{name:"args",type:{defined:{name:"ReceiveTokensArgs"}}}]},{name:"register_chain_bridge",discriminator:[239,66,180,165,175,10,49,233],accounts:[{name:"admin",signer:!0},{name:"payer",writable:!0,signer:!0},{name:"config",pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]},{kind:"arg",path:"args.mint"}]}},{name:"chain_bridge",writable:!0},{name:"system_program",address:"11111111111111111111111111111111"}],args:[{name:"args",type:{defined:{name:"RegisterChainBridgeArgs"}}}]},{name:"set_admin",discriminator:[251,163,0,52,91,194,187,92],accounts:[{name:"admin",signer:!0},{name:"mint"},{name:"new_admin"},{name:"config",writable:!0,pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]},{kind:"account",path:"mint"}]}}],args:[]},{name:"set_admin_fee_share",discriminator:[34,2,1,74,101,120,39,19],accounts:[{name:"admin",signer:!0},{name:"mint"},{name:"config",writable:!0,pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]},{kind:"account",path:"mint"}]}}],args:[{name:"fee_share_bp",type:"u64"}]},{name:"set_gas_oracle_program_id",discriminator:[172,152,29,206,112,239,205,83],accounts:[{name:"admin",signer:!0},{name:"mint"},{name:"config",writable:!0,pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]},{kind:"account",path:"mint"}]}}],args:[{name:"new_program_id",type:"pubkey"}]},{name:"set_max_fee_share",discriminator:[120,202,93,18,32,173,77,155],accounts:[{name:"admin",signer:!0},{name:"mint"},{name:"config",writable:!0,pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]},{kind:"account",path:"mint"}]}}],args:[{name:"max_fee_share",type:"u64"}]},{name:"set_min_finality_threshold",discriminator:[143,83,132,23,202,153,26,103],accounts:[{name:"admin",signer:!0},{name:"mint"},{name:"config",writable:!0,pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]},{kind:"account",path:"mint"}]}}],args:[{name:"min_finality_threshold",type:"u32"}]},{name:"set_token_messenger_minter",discriminator:[136,50,92,91,209,211,206,234],accounts:[{name:"admin",signer:!0},{name:"mint"},{name:"config",writable:!0,pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]},{kind:"account",path:"mint"}]}}],args:[{name:"new_program_id",type:"pubkey"}]},{name:"update_chain_bridge",discriminator:[227,4,133,105,230,88,226,173],accounts:[{name:"admin",signer:!0},{name:"config",pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]},{kind:"arg",path:"args.mint"}]}},{name:"chain_bridge",writable:!0}],args:[{name:"args",type:{defined:{name:"UpdateChainBridgeArgs"}}}]},{name:"withdraw_admin_fee",discriminator:[176,135,230,197,163,130,60,252],accounts:[{name:"admin",signer:!0},{name:"mint"},{name:"config",writable:!0,pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]},{kind:"account",path:"mint"}]}},{name:"bridge_token",writable:!0,pda:{seeds:[{kind:"const",value:[116,111,107,101,110]},{kind:"account",path:"mint"}]}},{name:"admin_token",writable:!0},{name:"bridge_authority",pda:{seeds:[{kind:"account",path:"config"}]}},{name:"token_program",address:"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"},{name:"system_program",address:"11111111111111111111111111111111"}],args:[]},{name:"withdraw_gas_token",discriminator:[109,117,140,223,117,175,2,139],accounts:[{name:"admin",signer:!0},{name:"recipient",writable:!0},{name:"mint"},{name:"config",writable:!0,pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]},{kind:"account",path:"mint"}]}}],args:[{name:"amount",type:"u64"}]}],Sl=[{name:"ChainBridge",discriminator:[25,216,147,218,140,42,98,49]},{name:"Config",discriminator:[155,12,170,224,30,250,204,130]},{name:"Lock",discriminator:[8,255,36,202,210,22,57,137]},{name:"Price",discriminator:[50,107,127,61,83,36,39,75]}],kl=[{code:6e3,name:"ValueTooHigh",msg:"Value is too high"}],Vl=[{name:"BridgeArgs",type:{kind:"struct",fields:[{name:"recipient",type:{array:["u8",32]}},{name:"destination_chain_id",type:"u8"},{name:"receive_token",type:{array:["u8",32]}},{name:"amount",type:"u64"}]}},{name:"ChainBridge",type:{kind:"struct",fields:[{name:"chain_id",type:"u8"},{name:"gas_usage",type:"u64"},{name:"domain",type:"u32"},{name:"other_bridge",type:"pubkey"}]}},{name:"Config",type:{kind:"struct",fields:[{name:"mint",type:"pubkey"},{name:"admin",type:"pubkey"},{name:"token_messenger_minter",type:"pubkey"},{name:"message_transmitter",type:"pubkey"},{name:"gas_oracle_program_id",type:"pubkey"},{name:"authority_bump_seed",type:"u8"},{name:"admin_fee_share_bp",type:"u64"},{name:"admin_fee_amount",type:"u64"},{name:"max_fee_share",type:"u64"},{name:"min_finality_threshold",type:"u32"}]}},{name:"InitializeArgs",type:{kind:"struct",fields:[{name:"gas_oracle_program_id",type:"pubkey"},{name:"token_messenger_minter",type:"pubkey"},{name:"message_transmitter",type:"pubkey"},{name:"admin_fee_share_bp",type:"u64"},{name:"max_fee_share",type:"u64"},{name:"min_finality_threshold",type:"u32"}]}},{name:"Lock",type:{kind:"struct",fields:[{name:"sender",type:"pubkey"},{name:"amount",type:"u64"},{name:"admin_fee",type:"u64"},{name:"relayer_fee",type:"u64"},{name:"recipient",type:{array:["u8",32]}},{name:"destination_chain_id",type:"u8"},{name:"slot",type:"u64"}]}},{name:"Price",type:{kind:"struct",fields:[{name:"chain_id",type:"u8"},{name:"price",type:"u64"},{name:"gas_price",type:"u64"}]}},{name:"ReceiveTokensArgs",type:{kind:"struct",fields:[{name:"message",type:"bytes"},{name:"attestation",type:"bytes"},{name:"extra_gas_amount",type:"u64"}]}},{name:"RegisterChainBridgeArgs",type:{kind:"struct",fields:[{name:"chain_id",type:"u8"},{name:"mint",type:"pubkey"},{name:"gas_usage",type:"u64"},{name:"domain",type:"u32"},{name:"other_bridge",type:"pubkey"}]}},{name:"UpdateChainBridgeArgs",type:{kind:"struct",fields:[{name:"chain_id",type:"u8"},{name:"mint",type:"pubkey"},{name:"gas_usage",type:"u64"},{name:"domain",type:"u32"},{name:"other_bridge",type:"pubkey"}]}}],Pl={address:Fl,metadata:Gl,instructions:Zl,accounts:Sl,errors:kl,types:Vl};var mc=require("@solana/spl-token"),bc=Ft(require("big.js")),Ja=require("web3");async function zn(i,n){return await(0,mc.getAccount)(n.connection,i)}async function Di(i,n,a){let r=await n.account.pool.fetch(a),o=r.decimals,s=(0,bc.default)(r.feeShareBp.toString()).div(1e4).toFixed(),c={aValue:r.a.toString(),dValue:r.d.toString(),totalLpAmount:r.totalLpAmount.toString(),tokenBalance:r.tokenBalance.toString(),vUsdBalance:r.vUsdBalance.toString(),accRewardPerShareP:r.accRewardPerShareP.toString()};if(Dt(i,o).lte(0))throw new Gt(`Swap amount ${P(i,o).toFixed()} is too small for the liquidity pool. Minimum required amount is 0.001.`);return St(i,{decimals:o,feeShare:s},c)}function Qi(i){let n=i.amount,a="0x"+i.recipient.toString("hex"),r=i.sourceChainId,o=i.destinationChainId,s="0x"+i.receiveToken.toString("hex"),c="0x"+i.nonce.toString("hex"),d=1,g="0x"+i.chainBridge.toString("hex"),l=Ja.Web3.utils.encodePacked({t:"uint256",v:n},{t:"bytes32",v:a},{t:"uint256",v:r},{t:"bytes32",v:s},{t:"uint256",v:c},{t:"uint8",v:d});if(!l)throw new f("message cannot be undefined");let A=Ja.Web3.utils.keccak256(Buffer.from(l.replace("0x",""),"hex")),u=Buffer.from(A.replace("0x",""),"hex");u[0]=r,u[1]=o;let m=Ja.Web3.utils.encodePacked({t:"bytes32",v:"0x"+u.toString("hex")},{t:"bytes32",v:g});if(!m)throw new Rn("messageWithSigner cannot be undefined");let y=Ja.Web3.utils.keccak256(Buffer.from(m.replace("0x",""),"hex")),v=Buffer.from(y.replace("0x",""),"hex");return v[0]=u[0],v[1]=u[1],v}var Io=require("@coral-xyz/anchor"),Oa=require("@solana/web3.js");async function yc(i,n,a){try{let r=await Yn(n,i),o=await Yn(a,i),s=Oa.TransactionMessage.decompile(n.message,{addressLookupTableAccounts:r}),c=Oa.TransactionMessage.decompile(a.message,{addressLookupTableAccounts:o});if(c.instructions.shift(),s.instructions.push(...c.instructions),r.push(...o),n.message=s.compileToV0Message(r),a.message.header.numRequiredSignatures===2&&n.signatures.length===1){let d=a.signatures[0];if(!d)throw new f("Signature is undefined");n.signatures.push(d)}return n}catch(r){throw r instanceof Error&&r.message?new Ge(`Some error occurred during creation final swap and bridge transaction. ${r.message}`):new Ge("Some error occurred during creation final swap and bridge transaction")}}async function bn(i,n,a){let r=await n.getAddressLookupTable(new Oa.PublicKey(a)).then(s=>s.value);if(!r)throw new f("Cannot find allbridgeLookupTableAccount");let o=new Io.web3.TransactionMessage({payerKey:i.feePayer,recentBlockhash:i.recentBlockhash,instructions:i.instructions}).compileToV0Message([r]);return new Io.web3.VersionedTransaction(o)}var ho=1e6,Ki=class{constructor(n,a,r){this.solanaRpcUrl=n;this.params=a;this.api=r}solanaRpcUrl;params;api;chainType="SOLANA";async buildRawTransactionSwap(n){let a=tt(this.chainType,n);return await this.buildSwapTransaction(a,n.sourceToken.poolAddress,n.destinationToken.poolAddress,n.txFeeParams)}async buildSwapTransaction(n,a,r,o){let{fromAccountAddress:s,amount:c,contractAddress:d,fromTokenAddress:g,toTokenAddress:l,toAccountAddress:A,minimumReceiveAmount:u}=n,m=s,y=d,v=g,C=l,R=r,Y=A,h=new te.PublicKey(m),F=It(this.solanaRpcUrl,h.toString()),G=new Re.Program({...mn,address:y},F),N=await pn(G.programId),k=await lt(G.programId),H=new te.PublicKey(v),ae=await Kt(H,G.programId),re=new te.PublicKey(a),E=_e(h,H),_=new te.PublicKey(Y),$=new te.PublicKey(C),be=await Kt($,G.programId),ue=new te.PublicKey(R),q=_e(_,$),le=[Re.web3.ComputeBudgetProgram.setComputeUnitLimit({units:ho})];try{await zn(q,F)}catch{let Og=(0,Ei.getAssociatedTokenAddressSync)($,_),zg=(0,Ei.createAssociatedTokenAccountInstruction)(h,Og,_,$);le.push(zg)}let fe=await G.methods.swap(new Re.BN(c),new Re.BN(u||0)).accountsPartial({payer:h,config:k,bridgeAuthority:N,user:h,sendBridgeToken:ae,sendMint:H,sendPool:re,sendUserToken:E,receiveBridgeToken:be,receiveMint:$,receivePool:ue,receiveUserToken:q}).preInstructions(le).transaction(),Fe=F.connection;return fe.recentBlockhash=(await Fe.getLatestBlockhash()).blockhash,fe.feePayer=h,await On(fe,o,this.solanaRpcUrl),await bn(fe,Fe,this.params.solanaLookUpTable)}async buildRawTransactionSend(n,a){let r,o;switch(n.messenger){case 1:{let s=await this.prepareSwapAndBridgeData(a);r=await this.buildSwapAndBridgeAllbridgeTransaction(s);break}case 2:{let s=await this.prepareSwapAndBridgeData(a),{transaction:c,messageAccount:d}=await this.buildSwapAndBridgeWormholeTransaction(s);r=c,o=d;break}case 3:{let s=await this.prepareSwapAndBridgeCctpData(a),{transaction:c,messageSentEventDataKeypair:d}=await this.buildSwapAndBridgeCctpTransaction(n.destinationToken.chainSymbol,s);r=c,o=d;break}case 4:{let s=await this.prepareSwapAndBridgeCctpV2Data(a),{transaction:c,messageSentEventDataKeypair:d}=await this.buildSwapAndBridgeCctpV2Transaction(n.destinationToken.chainSymbol,s);r=c,o=d;break}case 6:throw new f("Messenger xReserve is not supported yet.");case 5:throw new Ze("Messenger OFT is not supported yet.");default:return se(n.messenger,"Unhandled Messenger type")}return{tx:r,requiredMessageSigner:o}}getExtraGasInstruction(n,a,r){return Re.web3.SystemProgram.transfer({fromPubkey:a,toPubkey:r,lamports:+n})}async prepareSwapAndBridgeData(n){let{amount:a,contractAddress:r,fromChainId:o,fromAccountAddress:s,fromTokenAddress:c,toChainId:d,toAccountAddress:g,toTokenAddress:l,poolAddress:A,extraGas:u}=n,m=c,y=s,v=d,C=l,R=g,Y=r,h=o,F=It(this.solanaRpcUrl,y),G=new Re.Program({...mn,address:Y},F),N=Array.from(Vt()),k=new te.PublicKey(A),H=await Di(a,G,k),ae=await Vi(N,G.programId),re=await pn(G.programId),E=_e(new te.PublicKey(y),new te.PublicKey(m)),_=await Kt(new te.PublicKey(m),G.programId),$=await Bn(v,G.programId),be=await Xi(v,Buffer.from(C),G.programId),ue=await lt(G.programId),q=await G.account.config.fetch(ue),le=await Xt(v,q.gasOracleProgramId),fe=await Xt(h,q.gasOracleProgramId),Fe=Qi({amount:H,recipient:Buffer.from(R),nonce:Buffer.from(N),receiveToken:Buffer.from(C),destinationChainId:v,sourceChainId:h,chainBridge:(await pn(G.programId)).toBuffer()}),z={};return z.bridge=G,z.amount=new Re.BN(a),z.vusdAmount=new Re.BN(H),z.nonce=N,z.recipient=Array.from(R),z.receiveToken=Array.from(C),z.poolAccount=k,z.lockAccount=ae,z.bridgeAuthority=re,z.userToken=E,z.bridgeTokenAccount=_,z.chainBridgeAccount=$,z.otherBridgeTokenAccount=be,z.userAccount=new te.PublicKey(y),z.destinationChainId=v,z.mint=new te.PublicKey(m),z.config=ue,z.configAccountInfo=q,z.gasPrice=le,z.thisGasPrice=fe,z.message=Fe,u&&(z.extraGasInstruction=this.getExtraGasInstruction(u,z.userAccount,ue)),z}async buildSwapAndBridgeAllbridgeTransaction(n){let{bridge:a,vusdAmount:r,nonce:o,recipient:s,receiveToken:c,poolAccount:d,lockAccount:g,bridgeAuthority:l,userToken:A,bridgeTokenAccount:u,chainBridgeAccount:m,otherBridgeTokenAccount:y,userAccount:v,destinationChainId:C,mint:R,config:Y,configAccountInfo:h,gasPrice:F,thisGasPrice:G,message:N,extraGasInstruction:k}=n,H=h.allbridgeMessengerProgramId,ae=await Jn(C,H),re=await lt(H),E=await ji(N,H),_=[];k&&_.push(k);let $=await a.methods.swapAndBridge({vusdAmount:r,nonce:o,destinationChainId:C,recipient:s,receiveToken:c}).accountsPartial({payer:v,mint:R,user:v,config:Y,lock:g,pool:d,gasPrice:F,thisGasPrice:G,bridgeAuthority:l,userToken:A,bridgeToken:u,chainBridge:m,messenger:H,messengerGasUsage:ae,messengerConfig:re,sentMessageAccount:E,otherBridgeToken:y}).preInstructions([Re.web3.ComputeBudgetProgram.setComputeUnitLimit({units:ho})]).postInstructions(_).transaction(),be=It(this.solanaRpcUrl,v.toString()).connection;return $.recentBlockhash=(await be.getLatestBlockhash()).blockhash,$.feePayer=v,await bn($,be,this.params.solanaLookUpTable)}async buildSwapAndBridgeWormholeTransaction(n){let{bridge:a,vusdAmount:r,nonce:o,recipient:s,receiveToken:c,poolAccount:d,lockAccount:g,bridgeAuthority:l,userToken:A,bridgeTokenAccount:u,chainBridgeAccount:m,otherBridgeTokenAccount:y,userAccount:v,destinationChainId:C,mint:R,config:Y,configAccountInfo:h,gasPrice:F,thisGasPrice:G,extraGasInstruction:N}=n,k=this.params.wormholeMessengerProgramId,[H]=te.PublicKey.findProgramAddressSync([Buffer.from("Bridge")],new te.PublicKey(k)),[ae]=te.PublicKey.findProgramAddressSync([Buffer.from("fee_collector")],new te.PublicKey(k)),[re]=te.PublicKey.findProgramAddressSync([Buffer.from("Sequence"),l.toBuffer()],new te.PublicKey(k)),E=await Jn(C,h.wormholeMessengerProgramId),_=await lt(h.wormholeMessengerProgramId),$=te.Keypair.generate(),be=It(this.solanaRpcUrl,v.toString()),ue=await be.connection.getAccountInfo(H);if(ue==null)throw new f("Cannot fetch wormhole bridge account info");let q=new Re.BN(ue.data.slice(16,24),"le").toString(),le=te.SystemProgram.transfer({fromPubkey:v,toPubkey:ae,lamports:+q}),fe=[];N&&fe.push(N);let Fe={payer:v,mint:R,user:v,config:Y,lock:g,pool:d,gasPrice:F,thisGasPrice:G,bridgeAuthority:l,userToken:A,bridgeToken:u,chainBridge:m,otherBridgeToken:y,messengerGasUsage:E,wormholeProgram:k,bridge:H,message:$.publicKey,wormholeMessenger:h.wormholeMessengerProgramId,sequence:re,feeCollector:ae,wormholeMessengerConfig:_,clock:Re.web3.SYSVAR_CLOCK_PUBKEY},z=await a.methods.swapAndBridgeWormhole({vusdAmount:r,nonce:o,destinationChainId:C,recipient:s,receiveToken:c}).accounts(Fe).preInstructions([Re.web3.ComputeBudgetProgram.setComputeUnitLimit({units:ho}),le]).postInstructions(fe).signers([$]).transaction();return z.recentBlockhash=(await be.connection.getLatestBlockhash()).blockhash,z.feePayer=v,{transaction:await bn(z,be.connection,this.params.solanaLookUpTable),messageAccount:$}}async prepareSwapAndBridgeCctpData(n){let{contractAddress:a,amount:r,fromAccountAddress:o,fromTokenAddress:s,toChainId:c,toAccountAddress:d,toTokenAddress:g,extraGas:l}=n,A=a;if(!A)throw new we("Such route does not support CCTP protocol");let u=4,m=o,y=g,v=d,C=It(this.solanaRpcUrl,m),R=new Re.Program({...yo,address:A},C),Y=new te.PublicKey(s),h=await Mi(Y,R.programId),F=new te.PublicKey(m),G=await R.account.cctpBridge.fetch(h),N={};return N.cctpBridge=R,N.cctpBridgeAccount=h,N.cctpAddressAccount=new te.PublicKey(A),N.amount=new Re.BN(r),N.recipient=Array.from(v),N.receiveToken=Array.from(y),N.userToken=_e(F,Y),N.bridgeAuthority=await Pi(h,R.programId),N.bridgeTokenAccount=await sc(Y,R.programId),N.chainBridgeAccount=await Bn(c,R.programId),N.userAccount=F,N.destinationChainId=c,N.mint=Y,N.gasPrice=await Xt(c,G.gasOracleProgramId),N.thisGasPrice=await Xt(u,G.gasOracleProgramId),N.provider=C,l&&(N.extraGasInstruction=this.getExtraGasInstruction(l,N.userAccount,h)),N}async buildSwapAndBridgeCctpTransaction(n,a){let{cctpBridge:r,cctpBridgeAccount:o,amount:s,recipient:c,receiveToken:d,bridgeAuthority:g,userToken:l,bridgeTokenAccount:A,chainBridgeAccount:u,userAccount:m,destinationChainId:y,mint:v,gasPrice:C,thisGasPrice:R,extraGasInstruction:Y,provider:h}=a,F=this.params.cctpParams.cctpDomains[n],G=this.params.cctpParams.cctpTransmitterProgramId,N=this.params.cctpParams.cctpTokenMessengerMinter;if(F==null||!G||!N)throw new f("CCTP is not configured");let k=new te.PublicKey(G),H=new te.PublicKey(N),{messageTransmitterAccount:ae,tokenMessenger:re,tokenMessengerEventAuthority:E,tokenMinter:_,localToken:$,remoteTokenMessengerKey:be,authorityPda:ue}=Ma(F,v,k,H),q=[];Y&&q.push(Y);let le=te.Keypair.generate(),fe=xi(r.programId,le.publicKey),Fe=await r.methods.bridge({amount:s,destinationChainId:y,recipient:c,receiveToken:d}).accountsPartial({mint:v,user:m,cctpBridge:o,payer:m,messageSentEventData:le.publicKey,lock:fe,cctpMessenger:H,messageTransmitterProgram:k,messageTransmitterAccount:ae,tokenMessenger:re,tokenMinter:_,localToken:$,remoteTokenMessengerKey:be,authorityPda:ue,eventAuthority:E,bridgeToken:A,gasPrice:C,thisGasPrice:R,chainBridge:u,userToken:l,bridgeAuthority:g}).preInstructions([Re.web3.ComputeBudgetProgram.setComputeUnitLimit({units:2e6})]).postInstructions(q).transaction(),z=h.connection;return Fe.recentBlockhash=(await z.getLatestBlockhash()).blockhash,Fe.feePayer=m,{transaction:await bn(Fe,z,this.params.solanaLookUpTable),messageSentEventDataKeypair:le}}async prepareSwapAndBridgeCctpV2Data(n){let{contractAddress:a,amount:r,fromAccountAddress:o,fromTokenAddress:s,toChainId:c,toAccountAddress:d,toTokenAddress:g,extraGas:l}=n,A=a;if(!A)throw new we("The route does not support CCTPv2 protocol");let u=4,m=o,y=g,v=d,C=It(this.solanaRpcUrl,m),R=new Re.Program({...Co,address:A},C),Y=new te.PublicKey(s),h=Li(Y,R.programId),F=new te.PublicKey(m),G=await R.account.config.fetch(h),N={};return N.cctpBridge=R,N.amount=new Re.BN(r),N.recipient=Array.from(v),N.receiveToken=Array.from(y),N.userToken=_e(F,Y),N.chainBridgeAccount=await Bn(c,R.programId),N.userAccount=F,N.destinationChainId=c,N.mint=Y,N.gasPrice=await Xt(c,G.gasOracleProgramId),N.thisGasPrice=await Xt(u,G.gasOracleProgramId),N.provider=C,l&&(N.extraGasInstruction=this.getExtraGasInstruction(l,N.userAccount,h)),N}async buildSwapAndBridgeCctpV2Transaction(n,a){let{amount:r,cctpBridge:o,chainBridgeAccount:s,destinationChainId:c,extraGasInstruction:d,gasPrice:g,mint:l,provider:A,receiveToken:u,recipient:m,thisGasPrice:y,userAccount:v,userToken:C}=a,R=this.params.cctpParams.cctpDomains[n],Y=this.params.cctpParams.cctpV2TransmitterProgramId,h=this.params.cctpParams.cctpV2TokenMessengerMinter;if(R==null||!Y||!h)throw new f("CCTPv2 is not configured");let F=new te.PublicKey(Y),G=new te.PublicKey(h),{messageTransmitterAccount:N,tokenMessenger:k,tokenMessengerEventAuthority:H,tokenMinter:ae,localToken:re,remoteTokenMessengerKey:E,authorityPda:_}=Ma(R,l,F,G),$=[];d&&$.push(d);let be=te.Keypair.generate(),ue=await o.methods.bridge({amount:r,destinationChainId:c,recipient:m,receiveToken:u}).accounts({mint:l,user:v,messageSentEventData:be.publicKey,tokenMessengerMinterProgram:G,messageTransmitterProgram:F,messageTransmitterAccount:N,tokenMessenger:k,tokenMinter:ae,localToken:re,remoteTokenMessenger:E,authorityPda:_,eventAuthority:H,gasPrice:g,thisGasPrice:y,chainBridge:s,userToken:C}).preInstructions([Re.web3.ComputeBudgetProgram.setComputeUnitLimit({units:2e6})]).postInstructions($).transaction(),q=A.connection;return ue.recentBlockhash=(await q.getLatestBlockhash()).blockhash,ue.feePayer=v,{transaction:await bn(ue,q,this.params.solanaLookUpTable),messageSentEventDataKeypair:be}}};var Cc=require("@solana/spl-token"),Ic=require("@solana/web3.js"),Un=Ft(require("axios")),$e=require("big.js");var Xl=1.1,jl=1.01,_i=class{constructor(n,a){this.api=n;this.jupiterUrl=a.jupiterUrl.replace(/\/$/,""),this.apiKeyHeader=a.jupiterApiKeyHeader,this.maxAccounts=a.jupiterMaxAccounts}api;jupiterUrl;apiKeyHeader;maxAccounts;async buildJupAndUpdateTxSendParams(n,a){let r=bo(n.txFeeParams?.solana);try{let{tx:o,solTxSendUpdatedParams:s}=await this.processJup(a,n,r,!0);return{jupTx:o,solTxSendParams:{...a,...s}}}catch(o){if(o instanceof Gt)throw o;try{let{tx:s,solTxSendUpdatedParams:c}=await this.processJup(a,n,r,!1);return{jupTx:s,solTxSendParams:{...a,...c}}}catch(s){throw s instanceof Ce?s:s instanceof Error&&s.message?new Ge(`Some error occurred during creation Jupiter swap transaction. ${s.message}`):new Ge("Some error occurred during creation Jupiter swap transaction")}}}async processJup(n,a,r,o){let{fee:s,extraGas:c,gasFeePaymentMethod:d,sourceNativeTokenPrice:g}=await this.convertStableCoinFeeAndExtraGasToNativeCurrency(a.sourceToken,n),l=o?(0,$e.Big)(s):(0,$e.Big)(n.fee);if(c&&(o?l=l.plus(c):n.extraGas&&(l=l.plus(n.extraGas))),r?.payTxFeeWithStablecoinSwap)if(o)l=l.plus(3526760);else{if(!g)throw new f("sourceNativeTokenPrice is undefined.");let R=(0,$e.Big)(3526760).mul(g).div((0,$e.Big)(10).pow(x.getChainDecimalsByType("SOLANA")-a.sourceToken.decimals)).toFixed(0);l=l.plus(R)}o||(l=l.mul(Xl));let{tx:A,amountIn:u}=await this.getJupiterSwapTx(a.fromAccountAddress,a.sourceToken.tokenAddress,l.toFixed(0),o),m;if(o){if(!u)throw new Ge("Cannot get inAmount");m=(0,$e.Big)(n.amount).minus((0,$e.Big)(u).mul(jl).toFixed(0,$e.Big.roundUp)).toFixed(0)}else m=(0,$e.Big)(n.amount).minus(l).toFixed(0);if((0,$e.Big)(m).lte(0))throw new Gt(`Amount not enough to pay fee, ${P((0,$e.Big)(m).minus(1).neg(),a.sourceToken.decimals).toFixed()} ${a.sourceToken.symbol} is missing`);return{tx:A,solTxSendUpdatedParams:{amount:m,fee:s,extraGas:c,gasFeePaymentMethod:d}}}async convertStableCoinFeeAndExtraGasToNativeCurrency(n,a){if(a.gasFeePaymentMethod=="stablecoin"){let r=(await this.api.getReceiveTransactionCost({sourceChainId:a.fromChainId,destinationChainId:a.toChainId,messenger:a.messenger,sourceToken:n.tokenAddress})).sourceNativeTokenPrice,o=(0,$e.Big)(a.fee).div(r).mul((0,$e.Big)(10).pow(x.getChainDecimalsByType("SOLANA")-n.decimals)).toFixed(0),s;return a.extraGas&&(s=(0,$e.Big)(a.extraGas).div(r).mul((0,$e.Big)(10).pow(x.getChainDecimalsByType("SOLANA")-n.decimals)).toFixed(0)),{fee:o,extraGas:s,gasFeePaymentMethod:"native",sourceNativeTokenPrice:r}}return{fee:a.fee,extraGas:a.extraGas,gasFeePaymentMethod:"native"}}async getJupiterSwapTx(n,a,r,o){let s;try{let u=o?"ExactOut":"ExactIn",m=`${this.jupiterUrl}/quote?inputMint=${a}&outputMint=${Cc.NATIVE_MINT.toString()}&amount=${r}&swapMode=${u}&slippageBps=100&onlyDirectRoutes=true`;this.maxAccounts&&(m+=`&maxAccounts=${this.maxAccounts}`),s=await Un.default.get(m,{headers:this.apiKeyHeader?{"x-api-key":this.apiKeyHeader}:void 0})}catch(u){throw u instanceof Un.AxiosError&&u.response&&u.response.data&&u.response.data.error?new Ge(u.response.data.error):new Ge("Cannot get route")}let c;if(o&&s?.data?.inAmount)c=s.data.inAmount;else if(o)throw new Ge("Cannot get inAmount");let d;try{d=await Un.default.post(`${this.jupiterUrl}/swap`,{quoteResponse:s.data,userPublicKey:n,wrapAndUnwrapSol:!0},{headers:this.apiKeyHeader?{"x-api-key":this.apiKeyHeader}:void 0})}catch(u){throw u instanceof Un.AxiosError&&u.response&&u.response.data&&u.response.data.error?new Ge(u.response.data.error):new Ge("Cannot get swap transaction")}let g;if(d?.data?.swapTransaction)g=d.data.swapTransaction;else throw new Ge("Cannot get swap transaction");let l=Buffer.from(g,"base64"),A=Ic.VersionedTransaction.deserialize(l);return o?{tx:A,amountIn:c}:{tx:A}}};var ht=require("@coral-xyz/anchor"),je=require("@solana/web3.js");var vo={};fa(vo,{accounts:()=>Hl,address:()=>Ml,default:()=>Ul,errors:()=>Ol,events:()=>Jl,instructions:()=>xl,metadata:()=>Ll,types:()=>zl});var Ml="DfB5pJSykRUuUT2ViG8V382R6RB5CQ3GTMVFajoyxXn1",Ll={name:"payer_with_token",version:"0.1.0",spec:"0.1.0",description:"Created with Anchor"},xl=[{name:"add_fee_token",discriminator:[171,6,150,97,69,55,13,136],accounts:[{name:"initializer",writable:!0,signer:!0},{name:"admin",signer:!0},{name:"fee_token_mint"},{name:"config",pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]}]}},{name:"fee_token_config",writable:!0,pda:{seeds:[{kind:"const",value:[102,101,101,95,116,111,107,101,110]},{kind:"account",path:"fee_token_mint"}]}},{name:"contract_fee_token_account",writable:!0,pda:{seeds:[{kind:"const",value:[116,111,107,101,110]},{kind:"account",path:"fee_token_mint"}]}},{name:"system_program",address:"11111111111111111111111111111111"},{name:"token_program",address:"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"},{name:"rent",address:"SysvarRent111111111111111111111111111111111"}],args:[{name:"args",type:{defined:{name:"AddFeeTokenArgs"}}}]},{name:"bridge_cctp",discriminator:[35,114,66,117,122,78,225,186],accounts:[{name:"user",writable:!0,signer:!0},{name:"mint",writable:!0},{name:"fee_token_mint"},{name:"config",writable:!0,pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]}]}},{name:"fee_token_config",writable:!0,pda:{seeds:[{kind:"const",value:[102,101,101,95,116,111,107,101,110]},{kind:"account",path:"fee_token_mint"}]}},{name:"user_fee_token_account",writable:!0},{name:"contract_fee_token_account",writable:!0,pda:{seeds:[{kind:"const",value:[116,111,107,101,110]},{kind:"account",path:"fee_token_mint"}]}},{name:"payer_authority",writable:!0,pda:{seeds:[{kind:"account",path:"config"}]}},{name:"cctp_bridge"},{name:"bridge_token",writable:!0},{name:"cctp_messenger"},{name:"message_transmitter_program"},{name:"message_transmitter_account",writable:!0},{name:"token_messenger"},{name:"token_minter"},{name:"local_token",writable:!0},{name:"remote_token_messenger_key"},{name:"authority_pda"},{name:"event_authority"},{name:"message_sent_event_data",writable:!0,signer:!0},{name:"lock",writable:!0},{name:"cctp_bridge_config",writable:!0},{name:"gas_price"},{name:"this_gas_price"},{name:"chain_bridge"},{name:"bridge_authority"},{name:"user_token_account",writable:!0},{name:"token_program",address:"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"},{name:"system_program",address:"11111111111111111111111111111111"}],args:[{name:"args",type:{defined:{name:"PayerCctpBridgeArgs"}}}]},{name:"bridge_cctp_v2",discriminator:[237,74,221,146,95,161,136,197],accounts:[{name:"user",writable:!0,signer:!0},{name:"mint",writable:!0},{name:"fee_token_mint"},{name:"config",writable:!0,pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]}]}},{name:"fee_token_config",writable:!0,pda:{seeds:[{kind:"const",value:[102,101,101,95,116,111,107,101,110]},{kind:"account",path:"fee_token_mint"}]}},{name:"user_fee_token_account",writable:!0},{name:"contract_fee_token_account",writable:!0,pda:{seeds:[{kind:"const",value:[116,111,107,101,110]},{kind:"account",path:"fee_token_mint"}]}},{name:"payer_authority",writable:!0,pda:{seeds:[{kind:"account",path:"config"}]}},{name:"cctp_bridge"},{name:"bridge_token",writable:!0},{name:"token_messenger_minter_program"},{name:"message_transmitter_program"},{name:"message_transmitter_account",writable:!0},{name:"token_messenger"},{name:"token_minter"},{name:"local_token",writable:!0},{name:"remote_token_messenger"},{name:"authority_pda"},{name:"denylist_account",pda:{seeds:[{kind:"const",value:[100,101,110,121,108,105,115,116,95,97,99,99,111,117,110,116]},{kind:"account",path:"user"}],program:{kind:"account",path:"token_messenger_minter_program"}}},{name:"event_authority"},{name:"message_sent_event_data",writable:!0,signer:!0},{name:"lock",writable:!0},{name:"cctp_bridge_config",writable:!0},{name:"gas_price"},{name:"this_gas_price"},{name:"chain_bridge"},{name:"bridge_authority"},{name:"user_token_account",writable:!0},{name:"token_program",address:"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"},{name:"system_program",address:"11111111111111111111111111111111"}],args:[{name:"args",type:{defined:{name:"PayerCctpV2BridgeArgs"}}}]},{name:"initialize",discriminator:[175,175,109,31,13,152,155,237],accounts:[{name:"initializer",writable:!0,signer:!0},{name:"admin",writable:!0,signer:!0},{name:"config",writable:!0,pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]}]}},{name:"payer_authority",writable:!0,pda:{seeds:[{kind:"account",path:"config"}]}},{name:"system_program",address:"11111111111111111111111111111111"},{name:"token_program",address:"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"},{name:"rent",address:"SysvarRent111111111111111111111111111111111"}],args:[{name:"args",type:{defined:{name:"InitializeArgs"}}}]},{name:"remove_fee_token",discriminator:[46,96,240,63,28,173,62,131],accounts:[{name:"admin",writable:!0,signer:!0},{name:"fee_token_mint"},{name:"config",pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]}]}},{name:"fee_token_config",writable:!0,pda:{seeds:[{kind:"const",value:[102,101,101,95,116,111,107,101,110]},{kind:"account",path:"fee_token_mint"}]}},{name:"contract_fee_token_account",writable:!0,pda:{seeds:[{kind:"const",value:[116,111,107,101,110]},{kind:"account",path:"fee_token_mint"}]}},{name:"token_program",address:"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"}],args:[]},{name:"set_admin",discriminator:[251,163,0,52,91,194,187,92],accounts:[{name:"admin",writable:!0,signer:!0},{name:"new_admin"},{name:"config",writable:!0,pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]}]}}],args:[]},{name:"set_bridge_program_id",discriminator:[59,191,249,155,146,73,202,139],accounts:[{name:"admin",writable:!0,signer:!0},{name:"config",writable:!0,pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]}]}}],args:[{name:"new_program_id",type:"pubkey"}]},{name:"set_cctp_bridge_program_id",discriminator:[164,36,75,241,35,30,47,159],accounts:[{name:"admin",writable:!0,signer:!0},{name:"config",writable:!0,pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]}]}}],args:[{name:"new_program_id",type:"pubkey"}]},{name:"set_cctp_v2_bridge_program_id",discriminator:[98,190,8,24,135,12,117,249],accounts:[{name:"admin",writable:!0,signer:!0},{name:"config",writable:!0,pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]}]}}],args:[{name:"new_program_id",type:"pubkey"}]},{name:"set_fee_token_price",discriminator:[116,201,189,21,190,10,242,241],accounts:[{name:"price_authority",signer:!0},{name:"config",writable:!0,pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]}]}},{name:"fee_token_mint"},{name:"fee_token_config",writable:!0,pda:{seeds:[{kind:"const",value:[102,101,101,95,116,111,107,101,110]},{kind:"account",path:"fee_token_mint"}]}}],args:[{name:"new_price",type:"u64"}]},{name:"set_price_authority",discriminator:[51,241,68,137,206,207,244,107],accounts:[{name:"admin",writable:!0,signer:!0},{name:"config",writable:!0,pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]}]}}],args:[{name:"new_address",type:"pubkey"}]},{name:"swap_and_bridge",discriminator:[204,63,169,171,186,125,86,159],accounts:[{name:"user",writable:!0,signer:!0},{name:"mint"},{name:"fee_token_mint"},{name:"config",writable:!0,pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]}]}},{name:"fee_token_config",writable:!0,pda:{seeds:[{kind:"const",value:[102,101,101,95,116,111,107,101,110]},{kind:"account",path:"fee_token_mint"}]}},{name:"user_fee_token_account",writable:!0},{name:"contract_fee_token_account",writable:!0,pda:{seeds:[{kind:"const",value:[116,111,107,101,110]},{kind:"account",path:"fee_token_mint"}]}},{name:"payer_authority",writable:!0,pda:{seeds:[{kind:"account",path:"config"}]}},{name:"bridge"},{name:"bridge_token",writable:!0},{name:"messenger"},{name:"messenger_config",writable:!0},{name:"sent_message_account",writable:!0},{name:"messenger_gas_usage"},{name:"lock",writable:!0},{name:"bridge_config",writable:!0},{name:"other_bridge_token",writable:!0},{name:"pool",writable:!0},{name:"gas_price"},{name:"this_gas_price"},{name:"chain_bridge"},{name:"bridge_authority"},{name:"user_token_account",writable:!0},{name:"token_program",address:"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"},{name:"system_program",address:"11111111111111111111111111111111"}],args:[{name:"args",type:{defined:{name:"PayerSwapAndBridgeArgs"}}}]},{name:"swap_and_bridge_wormhole",discriminator:[41,91,201,180,150,117,154,65],accounts:[{name:"user",writable:!0,signer:!0},{name:"mint"},{name:"fee_token_mint"},{name:"config",writable:!0,pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]}]}},{name:"fee_token_config",writable:!0,pda:{seeds:[{kind:"const",value:[102,101,101,95,116,111,107,101,110]},{kind:"account",path:"fee_token_mint"}]}},{name:"user_fee_token_account",writable:!0},{name:"contract_fee_token_account",writable:!0,pda:{seeds:[{kind:"const",value:[116,111,107,101,110]},{kind:"account",path:"fee_token_mint"}]}},{name:"payer_authority",writable:!0,pda:{seeds:[{kind:"account",path:"config"}]}},{name:"bridge"},{name:"bridge_token",writable:!0},{name:"lock",writable:!0},{name:"bridge_config",writable:!0},{name:"other_bridge_token",writable:!0},{name:"pool",writable:!0},{name:"gas_price"},{name:"this_gas_price"},{name:"chain_bridge"},{name:"user_token_account",writable:!0},{name:"bridge_authority"},{name:"wormhole_messenger"},{name:"wormhole_messenger_config",writable:!0},{name:"wormhole_program"},{name:"wormhole_bridge",writable:!0},{name:"message",writable:!0,signer:!0},{name:"sequence",writable:!0},{name:"fee_collector",writable:!0},{name:"messenger_gas_usage"},{name:"clock",address:"SysvarC1ock11111111111111111111111111111111"},{name:"rent",address:"SysvarRent111111111111111111111111111111111"},{name:"token_program",address:"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"},{name:"system_program",address:"11111111111111111111111111111111"}],args:[{name:"args",type:{defined:{name:"PayerSwapAndBridgeArgs"}}}]},{name:"upgrade_config",discriminator:[129,185,25,221,96,63,251,97],accounts:[{name:"payer",writable:!0,signer:!0},{name:"admin",writable:!0,signer:!0},{name:"config",writable:!0,pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]}]}},{name:"system_program",address:"11111111111111111111111111111111"}],args:[]},{name:"withdraw_fee_token",discriminator:[131,103,89,216,53,78,255,118],accounts:[{name:"admin",signer:!0},{name:"config",writable:!0,pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]}]}},{name:"fee_token_mint"},{name:"fee_token_config",writable:!0,pda:{seeds:[{kind:"const",value:[102,101,101,95,116,111,107,101,110]},{kind:"account",path:"fee_token_mint"}]}},{name:"contract_fee_token_account",writable:!0,pda:{seeds:[{kind:"const",value:[116,111,107,101,110]},{kind:"account",path:"fee_token_mint"}]}},{name:"admin_fee_token_account",writable:!0},{name:"token_program",address:"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"},{name:"system_program",address:"11111111111111111111111111111111"}],args:[{name:"amount",type:"u64"}]},{name:"withdraw_gas_token",discriminator:[109,117,140,223,117,175,2,139],accounts:[{name:"admin",signer:!0},{name:"recipient",writable:!0},{name:"payer_authority",writable:!0,pda:{seeds:[{kind:"account",path:"config"}]}},{name:"config",pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]}]}},{name:"system_program",address:"11111111111111111111111111111111"}],args:[{name:"amount",type:"u64"}]}],Hl=[{name:"ChainBridge",discriminator:[25,216,147,218,140,42,98,49]},{name:"Config",discriminator:[155,12,170,224,30,250,204,130]},{name:"FeeTokenConfig",discriminator:[226,113,31,124,53,31,222,222]}],Jl=[{name:"ExtraGasSentEvent",discriminator:[111,21,139,73,113,95,104,52]}],Ol=[{code:6e3,name:"PayerFeeSlippage",msg:"Payer fee slippage"},{code:6001,name:"InvalidData",msg:"Invalid data"}],zl=[{name:"AddFeeTokenArgs",type:{kind:"struct",fields:[{name:"price",type:"u64"}]}},{name:"ChainBridge",type:{kind:"struct",fields:[{name:"address",type:{array:["u8",32]}},{name:"chain_id",type:"u8"},{name:"gas_usage",type:"u64"}]}},{name:"Config",type:{kind:"struct",fields:[{name:"admin",type:"pubkey"},{name:"authority_bump_seed",type:"u8"},{name:"bridge_program_id",type:"pubkey"},{name:"cctp_bridge_program_id",type:"pubkey"},{name:"price_authority",type:"pubkey"},{name:"cctp_v2_bridge_program_id",type:"pubkey"}]}},{name:"ExtraGasSentEvent",type:{kind:"struct",fields:[{name:"fee_token_mint",type:"pubkey"},{name:"extra_gas_amount_in_fee_token",type:"u64"},{name:"extra_gas_amount_in_sol",type:"u64"},{name:"extra_gas_amount_in_usd",type:"u64"}]}},{name:"FeeTokenConfig",type:{kind:"struct",fields:[{name:"mint",type:"pubkey"},{name:"decimals",type:"u8"},{name:"price",type:"u64"},{name:"bump",type:"u8"}]}},{name:"InitializeArgs",type:{kind:"struct",fields:[{name:"bridge_program_id",type:"pubkey"},{name:"cctp_bridge_program_id",type:"pubkey"},{name:"cctp_v2_bridge_program_id",type:"pubkey"}]}},{name:"PayerCctpBridgeArgs",type:{kind:"struct",fields:[{name:"max_fee_amount",type:"u64"},{name:"extra_gas_amount_in_fee_token",type:"u64"},{name:"recipient",type:{array:["u8",32]}},{name:"destination_chain_id",type:"u8"},{name:"receive_token",type:{array:["u8",32]}},{name:"amount",type:"u64"}]}},{name:"PayerCctpV2BridgeArgs",type:{kind:"struct",fields:[{name:"max_fee_amount",type:"u64"},{name:"extra_gas_amount_in_fee_token",type:"u64"},{name:"recipient",type:{array:["u8",32]}},{name:"destination_chain_id",type:"u8"},{name:"receive_token",type:{array:["u8",32]}},{name:"amount",type:"u64"}]}},{name:"PayerSwapAndBridgeArgs",type:{kind:"struct",fields:[{name:"max_fee_amount",type:"u64"},{name:"extra_gas_amount_in_fee_token",type:"u64"},{name:"destination_chain_id",type:"u8"},{name:"recipient",type:{array:["u8",32]}},{name:"recipient_token",type:{array:["u8",32]}},{name:"vusd_amount",type:"u64"},{name:"nonce",type:{array:["u8",32]}}]}}],Ul={address:Ml,metadata:Ll,instructions:xl,accounts:Hl,events:Jl,errors:Ol,types:zl};var Dl=1e6,$i=class{constructor(n,a,r){this.solanaRpcUrl=n;this.params=a;this.api=r}solanaRpcUrl;params;api;chainType="SOLANA";async buildRawTransactionSend(n,a){switch(n.messenger){case 1:{let r=await this.prepareSwapAndBridgeAllbridgeData(n,a);return{tx:await this.buildSwapAndBridgeTx(r)}}case 2:{let r=await this.prepareSwapAndBridgeWormholeData(n,a);return await this.buildSwapAndBridgeWormholeTx(r)}case 3:{let r=await this.prepareBridgeCctpData(n,a);return this.buildBridgeCctpTx(r)}case 4:{let r=await this.prepareBridgeCctpData(n,a);return this.buildBridgeCctpV2Tx(r)}case 6:throw new f("Messenger xReserve is not supported yet.");case 5:throw new Ze("Messenger OFT is not supported yet.");default:return se(n.messenger,"Unhandled Messenger type")}}async prepareSwapAndBridgeBaseData(n,a){let{fromChainId:r,fromAccountAddress:o,fromTokenAddress:s,poolAddress:c,toAccountAddress:d,toTokenAddress:g,toChainId:l,fee:A,extraGas:u="0"}=a,m=new je.PublicKey(o),y=Array.from(d),v=Array.from(g),C=new ht.BN(A),R=new ht.BN(u),Y=It(this.solanaRpcUrl,o),h=this.getPayerProgram(n,Y),F=new ht.Program({...mn,address:n.sourceToken.bridgeAddress},Y),G=new je.PublicKey(c),N=await lt(F.programId),k=await F.account.config.fetch(N),H=new je.PublicKey(s),ae=new je.PublicKey(this.getAbrFeeTokenMintAddress(n)),re=_e(m,H),E=_e(m,ae),_=await Xt(l,k.gasOracleProgramId),$=await Xt(r,k.gasOracleProgramId);return{provider:Y,payerProgram:h,bridgeProgram:F,userAccount:m,recipient:y,recipientToken:v,recipientChain:l,maxFeeAmount:C,extraGasAmountInFeeToken:R,mintAccount:H,feeTokenMintAccount:ae,userTokenAccount:re,userFeeTokenAccount:E,gasPriceAccount:_,thisGasPriceAccount:$,poolAccount:G,bridgeConfigAccount:N,bridgeConfigInfo:k}}getComputeUnitLimitInstruction(){return ht.web3.ComputeBudgetProgram.setComputeUnitLimit({units:Dl})}getPayerProgram(n,a){let r=n.sourceToken.abrPayer?.payerAddress;if(!r)throw new Ut("Payer with token not supported yet for ABR tokens");return new ht.Program({...vo,address:r},a)}getAbrFeeTokenMintAddress(n){let a=n.sourceToken.abrPayer?.abrToken.tokenAddress;if(!a)throw new Ut("Payer with token not supported yet for ABR tokens");return a}async prepareSwapAndBridgeCommonData(n,a){let{amount:r,toChainId:o,toTokenAddress:s}=a,{bridgeProgram:c,poolAccount:d,mintAccount:g}=n,l=await Di(r,c,d),A=Array.from(Vt()),u=await Vi(A,c.programId),m=c.programId,y=await Bn(o,m),v=await pn(m),C=await Kt(g,m),R=await Xi(o,Buffer.from(s),m);return{...n,vusdAmount:new ht.BN(l),nonce:A,lockAccount:u,chainBridgeAccount:y,bridgeProgramId:m,bridgeAuthorityAccount:v,bridgeTokenAccount:C,otherBridgeTokenAccount:R}}getWormholeProgramAddresses(n,a){let r=new je.PublicKey(n),[o]=je.PublicKey.findProgramAddressSync([Buffer.from("Bridge")],r),[s]=je.PublicKey.findProgramAddressSync([Buffer.from("Sequence"),a.toBuffer()],r),[c]=je.PublicKey.findProgramAddressSync([Buffer.from("fee_collector")],r);return{wormholeBridgeAccount:o,wormholeSequenceAccount:s,wormholeFeeCollectorAccount:c}}async getWormholeFeeInstruction(n,a,r,o){let s=await n.connection.getAccountInfo(a);if(s==null)throw new f("Cannot fetch wormhole bridge account info");let c=new ht.BN(s.data.slice(16,24),"le").toString();return je.SystemProgram.transfer({fromPubkey:r,toPubkey:o,lamports:+c})}async prepareSwapAndBridgeAllbridgeData(n,a){let r=await this.prepareSwapAndBridgeBaseData(n,a),o=await this.prepareSwapAndBridgeCommonData(r,a),{recipient:s,recipientToken:c,recipientChain:d,bridgeConfigInfo:g}=r,{vusdAmount:l,nonce:A,bridgeAuthorityAccount:u}=o,{fromChainId:m,toChainId:y}=a,v=Qi({amount:l.toString(),recipient:Buffer.from(s),nonce:Buffer.from(A),receiveToken:Buffer.from(c),destinationChainId:d,sourceChainId:m,chainBridge:u.toBuffer()}),C=g.allbridgeMessengerProgramId,R=await ji(v,C),Y=await lt(C),h=await Jn(y,C);return{...o,sentMessageAccount:R,messengerProgramId:C,messengerConfigAccount:Y,messengerGasUsageAccount:h}}async prepareSwapAndBridgeWormholeData(n,a){let r=await this.prepareSwapAndBridgeBaseData(n,a),o=await this.prepareSwapAndBridgeCommonData(r,a),{provider:s,userAccount:c,bridgeConfigInfo:d}=r,{bridgeAuthorityAccount:g}=o,{toChainId:l}=a,A=d.wormholeMessengerProgramId,u=await lt(A),m=await Jn(l,A),y=this.params.wormholeMessengerProgramId,{wormholeBridgeAccount:v,wormholeSequenceAccount:C,wormholeFeeCollectorAccount:R}=this.getWormholeProgramAddresses(y,g),Y=je.Keypair.generate(),h=await this.getWormholeFeeInstruction(s,v,c,R);return{...o,wormholeMessengerAccount:A,wormholeMessengerConfigAccount:u,wormholeProgramId:y,sequenceAccount:C,feeCollectorAccount:R,messengerGasUsageAccount:m,messageAccount:Y,wormholeBridgeAccount:v,feeInstruction:h}}async prepareBridgeCctpData(n,a){let r=await this.prepareSwapAndBridgeBaseData(n,a),{mintAccount:o}=r,{amount:s,toChainId:c}=a,d=n.destinationToken.chainSymbol,g=this.params.cctpParams.cctpDomains[d],l,A,u,m;if(n.messenger===3?(l=1,A=n.sourceToken.cctpAddress,u=this.params.cctpParams.cctpTransmitterProgramId,m=this.params.cctpParams.cctpTokenMessengerMinter):n.messenger===4&&(l=2,A=n.sourceToken.cctpV2Address,u=this.params.cctpParams.cctpV2TransmitterProgramId,m=this.params.cctpParams.cctpV2TokenMessengerMinter),g==null||!u||!m)throw new f(`CCTP ${l} is not configured`);if(!A)throw new we(`Such route does not support CCTP ${l} protocol`);let y=new je.PublicKey(A),v=l===1?await Mi(o,y):Li(o,y),C=await Bn(c,y),R=await Pi(v,y),Y=await Kt(o,y),h=new je.PublicKey(u),F=new je.PublicKey(m),{messageTransmitterAccount:G,tokenMessenger:N,tokenMessengerEventAuthority:k,tokenMinter:H,localToken:ae,remoteTokenMessengerKey:re,authorityPda:E}=Ma(g,o,h,F),_=je.Keypair.generate(),$=xi(y,_.publicKey);return{...r,lockAccount:$,messageSentEventDataKeypair:_,amount:new ht.BN(s),chainBridgeAccount:C,cctpBridgeProgramId:y,cctpBridgeAuthorityAccount:R,cctpBridgeConfigAccount:v,cctpBridgeTokenAccount:Y,cctpTokenMessengerMinter:F,cctpTransmitterProgramId:h,messageTransmitterAccount:G,tokenMessenger:N,tokenMessengerEventAuthority:k,tokenMinter:H,localToken:ae,remoteTokenMessengerKey:re,authorityPda:E}}async buildSwapAndBridgeTx(n){let{provider:a,payerProgram:r,userAccount:o,vusdAmount:s,recipient:c,recipientChain:d,recipientToken:g,maxFeeAmount:l,extraGasAmountInFeeToken:A,nonce:u,lockAccount:m,chainBridgeAccount:y,bridgeProgramId:v,bridgeAuthorityAccount:C,bridgeTokenAccount:R,mintAccount:Y,feeTokenMintAccount:h,userTokenAccount:F,userFeeTokenAccount:G,gasPriceAccount:N,thisGasPriceAccount:k,sentMessageAccount:H,messengerProgramId:ae,messengerConfigAccount:re,messengerGasUsageAccount:E,bridgeConfigAccount:_,otherBridgeTokenAccount:$,poolAccount:be}=n,ue=await r.methods.swapAndBridge({vusdAmount:s,recipient:c,recipientToken:g,maxFeeAmount:l,extraGasAmountInFeeToken:A,nonce:u,destinationChainId:d}).accountsPartial({lock:m,chainBridge:y,bridge:v,bridgeAuthority:C,bridgeToken:R,mint:Y,feeTokenMint:h,userTokenAccount:F,userFeeTokenAccount:G,gasPrice:N,thisGasPrice:k,sentMessageAccount:H,messenger:ae,messengerConfig:re,messengerGasUsage:E,bridgeConfig:_,otherBridgeToken:$,pool:be}).preInstructions([this.getComputeUnitLimitInstruction()]).transaction();return await this.finalizeTransaction(ue,a,o)}async buildSwapAndBridgeWormholeTx(n){let{provider:a,payerProgram:r,userAccount:o,vusdAmount:s,recipient:c,recipientChain:d,recipientToken:g,maxFeeAmount:l,extraGasAmountInFeeToken:A,nonce:u,lockAccount:m,chainBridgeAccount:y,bridgeProgramId:v,bridgeAuthorityAccount:C,bridgeTokenAccount:R,mintAccount:Y,feeTokenMintAccount:h,userTokenAccount:F,userFeeTokenAccount:G,gasPriceAccount:N,thisGasPriceAccount:k,messengerGasUsageAccount:H,bridgeConfigAccount:ae,otherBridgeTokenAccount:re,poolAccount:E,wormholeMessengerAccount:_,wormholeMessengerConfigAccount:$,wormholeProgramId:be,sequenceAccount:ue,feeCollectorAccount:q,messageAccount:le,wormholeBridgeAccount:fe,feeInstruction:Fe}=n,z=await r.methods.swapAndBridgeWormhole({vusdAmount:s,recipient:c,recipientToken:g,maxFeeAmount:l,extraGasAmountInFeeToken:A,nonce:u,destinationChainId:d}).accounts({lock:m,chainBridge:y,bridge:v,bridgeAuthority:C,bridgeToken:R,mint:Y,feeTokenMint:h,userTokenAccount:F,userFeeTokenAccount:G,gasPrice:N,thisGasPrice:k,messengerGasUsage:H,bridgeConfig:ae,otherBridgeToken:re,pool:E,wormholeMessenger:_,wormholeMessengerConfig:$,wormholeProgram:be,sequence:ue,feeCollector:q,message:le.publicKey,wormholeBridge:fe}).preInstructions([this.getComputeUnitLimitInstruction(),Fe]).signers([le]).transaction();return{tx:await this.finalizeTransaction(z,a,o),requiredMessageSigner:le}}async buildBridgeCctpTx(n){let{provider:a,payerProgram:r,amount:o,recipient:s,recipientToken:c,userAccount:d,recipientChain:g,maxFeeAmount:l,extraGasAmountInFeeToken:A,lockAccount:u,mintAccount:m,feeTokenMintAccount:y,userTokenAccount:v,userFeeTokenAccount:C,gasPriceAccount:R,thisGasPriceAccount:Y,chainBridgeAccount:h,cctpBridgeProgramId:F,cctpBridgeAuthorityAccount:G,cctpBridgeConfigAccount:N,cctpBridgeTokenAccount:k,cctpTokenMessengerMinter:H,cctpTransmitterProgramId:ae,messageTransmitterAccount:re,tokenMessenger:E,tokenMessengerEventAuthority:_,tokenMinter:$,localToken:be,remoteTokenMessengerKey:ue,authorityPda:q,messageSentEventDataKeypair:le}=n,fe=await r.methods.bridgeCctp({amount:o,recipient:s,receiveToken:c,destinationChainId:g,maxFeeAmount:l,extraGasAmountInFeeToken:A}).accounts({lock:u,messageSentEventData:le.publicKey,mint:m,feeTokenMint:y,userFeeTokenAccount:C,bridgeToken:k,cctpBridge:F,cctpBridgeConfig:N,cctpMessenger:H,messageTransmitterProgram:ae,messageTransmitterAccount:re,tokenMessenger:E,tokenMinter:$,localToken:be,remoteTokenMessengerKey:ue,authorityPda:q,eventAuthority:_,gasPrice:R,thisGasPrice:Y,chainBridge:h,bridgeAuthority:G,userTokenAccount:v}).preInstructions([this.getComputeUnitLimitInstruction()]).transaction();return{tx:await this.finalizeTransaction(fe,a,d),requiredMessageSigner:le}}async buildBridgeCctpV2Tx(n){let{provider:a,payerProgram:r,amount:o,recipient:s,recipientToken:c,userAccount:d,recipientChain:g,maxFeeAmount:l,extraGasAmountInFeeToken:A,lockAccount:u,mintAccount:m,feeTokenMintAccount:y,userTokenAccount:v,userFeeTokenAccount:C,gasPriceAccount:R,thisGasPriceAccount:Y,chainBridgeAccount:h,cctpBridgeProgramId:F,cctpBridgeAuthorityAccount:G,cctpBridgeConfigAccount:N,cctpBridgeTokenAccount:k,cctpTokenMessengerMinter:H,cctpTransmitterProgramId:ae,messageTransmitterAccount:re,tokenMessenger:E,tokenMessengerEventAuthority:_,tokenMinter:$,localToken:be,remoteTokenMessengerKey:ue,authorityPda:q,messageSentEventDataKeypair:le}=n,fe=await r.methods.bridgeCctpV2({amount:o,recipient:s,receiveToken:c,destinationChainId:g,maxFeeAmount:l,extraGasAmountInFeeToken:A}).accounts({mint:m,feeTokenMint:y,userFeeTokenAccount:C,bridgeToken:k,cctpBridge:F,tokenMessengerMinterProgram:H,messageTransmitterProgram:ae,messageTransmitterAccount:re,tokenMessenger:E,tokenMinter:$,localToken:be,remoteTokenMessenger:ue,authorityPda:q,eventAuthority:_,messageSentEventData:le.publicKey,lock:u,cctpBridgeConfig:N,gasPrice:R,thisGasPrice:Y,chainBridge:h,bridgeAuthority:G,userTokenAccount:v}).preInstructions([this.getComputeUnitLimitInstruction()]).transaction();return{tx:await this.finalizeTransaction(fe,a,d),requiredMessageSigner:le}}async finalizeTransaction(n,a,r){let o=a.connection;return n.recentBlockhash=(await o.getLatestBlockhash()).blockhash,n.feePayer=r,await bn(n,o,this.params.solanaLookUpTable)}};var qi=class extends ke{constructor(a,r,o){super();this.solanaRpcUrl=a;this.params=r;this.api=o;this.connection=new hc.Connection(a),this.jupiterService=new _i(o,r.jupiterParams),this.bridgeTxService=new Ki(a,r,o),this.payerWithTokenService=new $i(a,r,o)}solanaRpcUrl;params;api;chainType="SOLANA";connection;jupiterService;bridgeTxService;payerWithTokenService;async buildRawTransactionSwap(a){return this.bridgeTxService.buildRawTransactionSwap(a)}async buildRawTransactionSend(a){let r=await Ee(this.chainType,a,this.api),o=this.addPoolAddress(a,r),s=a.gasFeePaymentMethod??"native",c,d;switch(s){case"native":{let g=await this.buildTxWithNativePayment(a,o);c=g.tx,d=g.requiredMessageSigner;break}case"stablecoin":{let g=await this.buildTxWithStablePayment(a,o);c=g.tx,d=g.requiredMessageSigner;break}case"abr":{let g=await this.buildTxWithAbrPayment(a,o);c=g.tx,d=g.requiredMessageSigner;break}default:return se(s,"Unhandled FeePaymentMethod")}return await uc(c,a.txFeeParams,this.solanaRpcUrl),d&&c.sign([d]),c}async buildTxWithNativePayment(a,r){return await this.bridgeTxService.buildRawTransactionSend(a,r)}async buildTxWithStablePayment(a,r){let{jupTx:o,solTxSendParams:s}=await this.jupiterService.buildJupAndUpdateTxSendParams(a,r),{tx:c,requiredMessageSigner:d}=await this.bridgeTxService.buildRawTransactionSend(a,s);if(!o)throw new Ge("Swap tx is absent");return{tx:await yc(this.connection,o,c),requiredMessageSigner:d}}async buildTxWithAbrPayment(a,r){return this.payerWithTokenService.buildRawTransactionSend(a,r)}send(a){throw new J}addPoolAddress(a,r){return{...r,poolAddress:a.sourceToken.poolAddress}}};var tr=require("@stellar/stellar-sdk"),Bc=require("big.js");var t=require("@stellar/stellar-sdk"),Ql=t.contract.Spec,Kl=t.contract.Client;var za=class extends Kl{constructor(a){super(new Ql(["AAAAAAAAAAAAAAAKaW5pdGlhbGl6ZQAAAAAABAAAAAAAAAAFYWRtaW4AAAAAAAATAAAAAAAAAAltZXNzZW5nZXIAAAAAAAATAAAAAAAAAApnYXNfb3JhY2xlAAAAAAATAAAAAAAAAAxuYXRpdmVfdG9rZW4AAAATAAAAAQAAA+kAAAPtAAAAAAAAAAM=","AAAAAAAAAAAAAAAPc3dhcF9hbmRfYnJpZGdlAAAAAAkAAAAAAAAABnNlbmRlcgAAAAAAEwAAAAAAAAAFdG9rZW4AAAAAAAATAAAAAAAAAAZhbW91bnQAAAAAAAoAAAAAAAAACXJlY2lwaWVudAAAAAAAA+4AAAAgAAAAAAAAABRkZXN0aW5hdGlvbl9jaGFpbl9pZAAAAAQAAAAAAAAADXJlY2VpdmVfdG9rZW4AAAAAAAPuAAAAIAAAAAAAAAAFbm9uY2UAAAAAAAAMAAAAAAAAAApnYXNfYW1vdW50AAAAAAAKAAAAAAAAABBmZWVfdG9rZW5fYW1vdW50AAAACgAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAOcmVjZWl2ZV90b2tlbnMAAAAAAAgAAAAAAAAABnNlbmRlcgAAAAAAEwAAAAAAAAAGYW1vdW50AAAAAAAKAAAAAAAAAAlyZWNpcGllbnQAAAAAAAATAAAAAAAAAA9zb3VyY2VfY2hhaW5faWQAAAAABAAAAAAAAAANcmVjZWl2ZV90b2tlbgAAAAAAA+4AAAAgAAAAAAAAAAVub25jZQAAAAAAAAwAAAAAAAAAEnJlY2VpdmVfYW1vdW50X21pbgAAAAAACgAAAAAAAAAJZXh0cmFfZ2FzAAAAAAAD6AAAAAoAAAABAAAD6QAAA+0AAAAAAAAAAw==","AAAAAAAAAAAAAAAEc3dhcAAAAAYAAAAAAAAABnNlbmRlcgAAAAAAEwAAAAAAAAAGYW1vdW50AAAAAAAKAAAAAAAAAAV0b2tlbgAAAAAAA+4AAAAgAAAAAAAAAA1yZWNlaXZlX3Rva2VuAAAAAAAD7gAAACAAAAAAAAAACXJlY2lwaWVudAAAAAAAABMAAAAAAAAAEnJlY2VpdmVfYW1vdW50X21pbgAAAAAACgAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAJc3RvcF9zd2FwAAAAAAAAAAAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAKc3RhcnRfc3dhcAAAAAAAAAAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAOc2V0X2dhc19vcmFjbGUAAAAAAAEAAAAAAAAAC25ld19hZGRyZXNzAAAAABMAAAABAAAD6QAAA+0AAAAAAAAAAw==","AAAAAAAAAAAAAAASc2V0X3N0b3BfYXV0aG9yaXR5AAAAAAABAAAAAAAAAA5zdG9wX2F1dGhvcml0eQAAAAAAEwAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAOc2V0X3JlYmFsYW5jZXIAAAAAAAEAAAAAAAAACnJlYmFsYW5jZXIAAAAAABMAAAABAAAD6QAAA+0AAAAAAAAAAw==","AAAAAAAAAAAAAAANc2V0X21lc3NlbmdlcgAAAAAAAAEAAAAAAAAACW1lc3NlbmdlcgAAAAAAABMAAAABAAAD6QAAA+0AAAAAAAAAAw==","AAAAAAAAAAAAAAANc2V0X2dhc191c2FnZQAAAAAAAAIAAAAAAAAACGNoYWluX2lkAAAABAAAAAAAAAAJZ2FzX3VzYWdlAAAAAAAACgAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAPcmVnaXN0ZXJfYnJpZGdlAAAAAAIAAAAAAAAACGNoYWluX2lkAAAABAAAAAAAAAAOYnJpZGdlX2FkZHJlc3MAAAAAA+4AAAAgAAAAAQAAA+kAAAPtAAAAAAAAAAM=","AAAAAAAAAAAAAAAQYWRkX2JyaWRnZV90b2tlbgAAAAIAAAAAAAAACGNoYWluX2lkAAAABAAAAAAAAAANdG9rZW5fYWRkcmVzcwAAAAAAA+4AAAAgAAAAAQAAA+kAAAPtAAAAAAAAAAM=","AAAAAAAAAAAAAAATcmVtb3ZlX2JyaWRnZV90b2tlbgAAAAACAAAAAAAAAAhjaGFpbl9pZAAAAAQAAAAAAAAADXRva2VuX2FkZHJlc3MAAAAAAAPuAAAAIAAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAIYWRkX3Bvb2wAAAACAAAAAAAAAARwb29sAAAAEwAAAAAAAAAFdG9rZW4AAAAAAAATAAAAAQAAA+kAAAPtAAAAAAAAAAM=","AAAAAAAAAAAAAAATd2l0aGRyYXdfZ2FzX3Rva2VucwAAAAACAAAAAAAAAAZzZW5kZXIAAAAAABMAAAAAAAAABmFtb3VudAAAAAAACgAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAfd2l0aGRyYXdfYnJpZGdpbmdfZmVlX2luX3Rva2VucwAAAAACAAAAAAAAAAZzZW5kZXIAAAAAABMAAAAAAAAADXRva2VuX2FkZHJlc3MAAAAAAAATAAAAAQAAA+kAAAPtAAAAAAAAAAM=","AAAAAAAAAAAAAAAVaGFzX3Byb2Nlc3NlZF9tZXNzYWdlAAAAAAAAAQAAAAAAAAAHbWVzc2FnZQAAAAPuAAAAIAAAAAEAAAPpAAAAAQAAAAM=","AAAAAAAAAAAAAAAUaGFzX3JlY2VpdmVkX21lc3NhZ2UAAAABAAAAAAAAAAdtZXNzYWdlAAAAA+4AAAAgAAAAAQAAA+kAAAABAAAAAw==","AAAAAAAAAAAAAAAQZ2V0X3Bvb2xfYWRkcmVzcwAAAAEAAAAAAAAADXRva2VuX2FkZHJlc3MAAAAAAAPuAAAAIAAAAAEAAAPpAAAAEwAAAAM=","AAAAAAAAAAAAAAAKZ2V0X2NvbmZpZwAAAAAAAAAAAAEAAAPpAAAH0AAAAAZCcmlkZ2UAAAAAAAM=","AAAAAAAAAAAAAAASZ2V0X3N0b3BfYXV0aG9yaXR5AAAAAAAAAAAAAQAAA+kAAAATAAAAAw==","AAAAAAAAAAAAAAAUZ2V0X3RyYW5zYWN0aW9uX2Nvc3QAAAABAAAAAAAAAAhjaGFpbl9pZAAAAAQAAAABAAAD6QAAAAoAAAAD","AAAAAAAAAAAAAAANZ2V0X2dhc191c2FnZQAAAAAAAAEAAAAAAAAACGNoYWluX2lkAAAABAAAAAEAAAPpAAAACgAAAAM=","AAAAAAAAAAAAAAAJZ2V0X2FkbWluAAAAAAAAAAAAAAEAAAPpAAAAEwAAAAM=","AAAAAAAAAAAAAAAOZ2V0X2dhc19vcmFjbGUAAAAAAAAAAAABAAAD6QAAABMAAAAD","AAAAAAAAAAAAAAASZ2V0X2Fub3RoZXJfYnJpZGdlAAAAAAABAAAAAAAAAAhjaGFpbl9pZAAAAAQAAAABAAAD6QAAB9AAAAANQW5vdGhlckJyaWRnZQAAAAAAAAM=","AAAAAAAAAAAAAAAJc2V0X2FkbWluAAAAAAAAAQAAAAAAAAAJbmV3X2FkbWluAAAAAAAAEwAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAHdXBncmFkZQAAAAABAAAAAAAAAA1uZXdfd2FzbV9oYXNoAAAAAAAD7gAAACAAAAABAAAD6QAAA+0AAAAAAAAAAw==","AAAAAQAAAAAAAAAAAAAAB1N3YXBwZWQAAAAABgAAAAAAAAAOcmVjZWl2ZV9hbW91bnQAAAAAAAoAAAAAAAAADXJlY2VpdmVfdG9rZW4AAAAAAAPuAAAAIAAAAAAAAAAJcmVjaXBpZW50AAAAAAAAEwAAAAAAAAALc2VuZF9hbW91bnQAAAAACgAAAAAAAAAKc2VuZF90b2tlbgAAAAAD7gAAACAAAAAAAAAABnNlbmRlcgAAAAAAEw==","AAAAAQAAAAAAAAAAAAAAClRva2Vuc1NlbnQAAAAAAAUAAAAAAAAABmFtb3VudAAAAAAACgAAAAAAAAAUZGVzdGluYXRpb25fY2hhaW5faWQAAAAEAAAAAAAAAAVub25jZQAAAAAAAAwAAAAAAAAADXJlY2VpdmVfdG9rZW4AAAAAAAPuAAAAIAAAAAAAAAAJcmVjaXBpZW50AAAAAAAD7gAAACA=","AAAAAQAAAAAAAAAAAAAADlRva2Vuc1JlY2VpdmVkAAAAAAAEAAAAAAAAAAZhbW91bnQAAAAAAAoAAAAAAAAAB21lc3NhZ2UAAAAD7gAAACAAAAAAAAAABW5vbmNlAAAAAAAADAAAAAAAAAAJcmVjaXBpZW50AAAAAAAD7gAAACA=","AAAAAQAAAAAAAAAAAAAAClJlY2VpdmVGZWUAAAAAAAMAAAAAAAAAF2JyaWRnZV90cmFuc2FjdGlvbl9jb3N0AAAAAAoAAAAAAAAACWV4dHJhX2dhcwAAAAAAAAoAAAAAAAAAGG1lc3NhZ2VfdHJhbnNhY3Rpb25fY29zdAAAAAo=","AAAAAQAAAAAAAAAAAAAAFUJyaWRnaW5nRmVlRnJvbVRva2VucwAAAAAAAAIAAAAAAAAAEGZlZV90b2tlbl9hbW91bnQAAAAKAAAAAAAAAANnYXMAAAAACg==","AAAAAQAAAAAAAAAAAAAADUFub3RoZXJCcmlkZ2UAAAAAAAACAAAAAAAAAAdhZGRyZXNzAAAAA+4AAAAgAAAAAAAAAAZ0b2tlbnMAAAAAA+wAAAPuAAAAIAAAAAE=","AAAAAQAAAAAAAAAAAAAABkJyaWRnZQAAAAAABgAAAGBwcmVjb21wdXRlZCB2YWx1ZXMgb2YgdGhlIHNjYWxpbmcgZmFjdG9yIHJlcXVpcmVkIGZvciBwYXlpbmcgdGhlIGJyaWRnaW5nIGZlZSB3aXRoIHN0YWJsZSB0b2tlbnMAAAAeYnJpZGdpbmdfZmVlX2NvbnZlcnNpb25fZmFjdG9yAAAAAAPsAAAAEwAAAAoAAAAAAAAACGNhbl9zd2FwAAAAAQAAAGxwcmVjb21wdXRlZCB2YWx1ZXMgdG8gZGl2aWRlIGJ5IHRvIGNoYW5nZSB0aGUgcHJlY2lzaW9uIGZyb20gdGhlIEdhcyBPcmFjbGUgcHJlY2lzaW9uIHRvIHRoZSB0b2tlbiBwcmVjaXNpb24AAAAWZnJvbV9nYXNfb3JhY2xlX2ZhY3RvcgAAAAAD7AAAABMAAAAKAAAAAAAAAAltZXNzZW5nZXIAAAAAAAATAAAAAAAAAAVwb29scwAAAAAAA+wAAAPuAAAAIAAAABMAAAAAAAAACnJlYmFsYW5jZXIAAAAAABM=","AAAAAgAAAAAAAAAAAAAAB0RhdGFLZXkAAAAAAwAAAAEAAAAAAAAAC090aGVyQnJpZGdlAAAAAAEAAAAEAAAAAQAAAAAAAAALU2VudE1lc3NhZ2UAAAAAAQAAA+4AAAAgAAAAAQAAAAAAAAAPUmVjZWl2ZWRNZXNzYWdlAAAAAAEAAAPuAAAAIA==","AAAAAQAAAAAAAAAAAAAABUFkbWluAAAAAAAAAQAAAAAAAAABMAAAAAAAABM=","AAAAAQAAAAAAAAAAAAAAEEdhc09yYWNsZUFkZHJlc3MAAAABAAAAAAAAAAEwAAAAAAAAEw==","AAAAAQAAAAAAAAAAAAAACEdhc1VzYWdlAAAAAQAAAAAAAAABMAAAAAAAA+wAAAAEAAAACg==","AAAAAQAAAAAAAAAAAAAAC05hdGl2ZVRva2VuAAAAAAEAAAAAAAAAATAAAAAAAAAT","AAAAAQAAAAAAAAAAAAAADVN0b3BBdXRob3JpdHkAAAAAAAABAAAAAAAAAAEwAAAAAAAAEw==","AAAABAAAAAAAAAAAAAAABUVycm9yAAAAAAAAKAAAAAAAAAANVW5pbXBsZW1lbnRlZAAAAAAAAAAAAAAAAAAAC0luaXRpYWxpemVkAAAAAAEAAAAAAAAADVVuaW5pdGlhbGl6ZWQAAAAAAAACAAAAAAAAAAxVbmF1dGhvcml6ZWQAAAADAAAAAAAAAApJbnZhbGlkQXJnAAAAAAAEAAAAAAAAAA5JbnZhbGlkQ2hhaW5JZAAAAAAABQAAAAAAAAATSW52YWxpZE90aGVyQ2hhaW5JZAAAAAAGAAAAAAAAAA5HYXNVc2FnZU5vdFNldAAAAAAABwAAAAAAAAANQnJva2VuQWRkcmVzcwAAAAAAAAgAAAAAAAAACE5vdEZvdW5kAAAACQAAAAAAAAAYVG9rZW5JbnN1ZmZpY2llbnRCYWxhbmNlAAAACgAAAAAAAAAKQ2FzdEZhaWxlZAAAAAAACwAAAAAAAAAMVTI1Nk92ZXJmbG93AAAADAAAAAAAAAAKWmVyb0Ftb3VudAAAAAAAZwAAAAAAAAAMUG9vbE92ZXJmbG93AAAAaAAAAAAAAAALWmVyb0NoYW5nZXMAAAAAaQAAAAAAAAARUmVzZXJ2ZXNFeGhhdXN0ZWQAAAAAAABqAAAAAAAAABpJbnN1ZmZpY2llbnRSZWNlaXZlZEFtb3VudAAAAAAAawAAAAAAAAAUQmFsYW5jZVJhdGlvRXhjZWVkZWQAAABsAAAAAAAAAAlGb3JiaWRkZW4AAAAAAABtAAAAAAAAABlVbmF1dGhvcml6ZWRTdG9wQXV0aG9yaXR5AAAAAAAAywAAAAAAAAAOU3dhcFByb2hpYml0ZWQAAAAAAMwAAAAAAAAAEkFtb3VudFRvb0xvd0ZvckZlZQAAAAAAzQAAAAAAAAAWQnJpZGdlVG9UaGVaZXJvQWRkcmVzcwAAAAAAzgAAAAAAAAAORW1wdHlSZWNpcGllbnQAAAAAAM8AAAAAAAAAE1NvdXJjZU5vdFJlZ2lzdGVyZWQAAAAA0AAAAAAAAAAVV3JvbmdEZXN0aW5hdGlvbkNoYWluAAAAAAAA0QAAAAAAAAATVW5rbm93bkFub3RoZXJDaGFpbgAAAADSAAAAAAAAABFUb2tlbnNBbHJlYWR5U2VudAAAAAAAANMAAAAAAAAAEE1lc3NhZ2VQcm9jZXNzZWQAAADUAAAAAAAAAAxOb3RFbm91Z2hGZWUAAADWAAAAAAAAAAlOb01lc3NhZ2UAAAAAAADXAAAAAAAAAA1Ob1JlY2VpdmVQb29sAAAAAAAA2AAAAAAAAAAGTm9Qb29sAAAAAADZAAAAAAAAABNVbmtub3duQW5vdGhlclRva2VuAAAAANoAAAAAAAAAD1dyb25nQnl0ZUxlbmd0aAAAAAEsAAAAAAAAAApIYXNNZXNzYWdlAAAAAAEtAAAAAAAAABdJbnZhbGlkUHJpbWFyeVNpZ25hdHVyZQAAAAEuAAAAAAAAABlJbnZhbGlkU2Vjb25kYXJ5U2lnbmF0dXJlAAAAAAABLwAAAAAAAAARTm9HYXNEYXRhRm9yQ2hhaW4AAAAAAAGQ"]),a);this.options=a}options;fromJSON={initialize:this.txFromJSON,swap_and_bridge:this.txFromJSON,receive_tokens:this.txFromJSON,swap:this.txFromJSON,stop_swap:this.txFromJSON,start_swap:this.txFromJSON,set_gas_oracle:this.txFromJSON,set_stop_authority:this.txFromJSON,set_rebalancer:this.txFromJSON,set_messenger:this.txFromJSON,set_gas_usage:this.txFromJSON,register_bridge:this.txFromJSON,add_bridge_token:this.txFromJSON,remove_bridge_token:this.txFromJSON,add_pool:this.txFromJSON,withdraw_gas_tokens:this.txFromJSON,withdraw_bridging_fee_in_tokens:this.txFromJSON,has_processed_message:this.txFromJSON,has_received_message:this.txFromJSON,get_pool_address:this.txFromJSON,get_config:this.txFromJSON,get_stop_authority:this.txFromJSON,get_transaction_cost:this.txFromJSON,get_gas_usage:this.txFromJSON,get_admin:this.txFromJSON,get_gas_oracle:this.txFromJSON,get_another_bridge:this.txFromJSON,set_admin:this.txFromJSON,upgrade:this.txFromJSON}};var er=require("@stellar/stellar-sdk"),fc=er.rpc.Api,vc=100;async function Rc(i,n){try{let o=(await new er.rpc.Server(i).getFeeStats())[n],s=[Number(o.p90)*2,Number(o.mode)].filter(c=>Number.isFinite(c)&&c>0);return Math.ceil(Math.max(...s,vc))}catch{return vc}}function Et(i){return Rc(i,"sorobanInclusionFee")}function Tc(i){return Rc(i,"inclusionFee")}function Dn(i){let{simulation:n,options:a}=i;if(!n)throw new Error("Soroban assembled transaction does not have simulation");if(fc.isSimulationSuccess(n))return n.result==null?void 0:a.parseResultXdr(n.result.retval);throw new Error(n.error)}function Qn(i){let{simulation:n}=i;if(!n)throw new Error("Soroban assembled transaction does not have simulation");return fc.isSimulationError(n)}var nr=class extends ke{constructor(a,r,o){super();this.nodeRpcUrlsConfig=a;this.params=r;this.api=o}nodeRpcUrlsConfig;params;api;chainType="SRB";async buildRawTransactionSend(a){let r=await Ee(this.chainType,a,this.api);return await this.buildRawTransactionSendFromParams(r)}async buildRawTransactionSendFromParams(a){let{amount:r,contractAddress:o,fromAccountAddress:s,fromTokenAddress:c,toChainId:d,toAccountAddress:g,toTokenAddress:l,fee:A,gasFeePaymentMethod:u,extraGas:m}=a,y=A;m&&(y=(0,Bc.Big)(y).plus(m).toFixed());let v=this.getContract(za,o,s),C=await Et(this.nodeRpcUrlsConfig.getNodeRpcUrl("SRB")),R;switch(u){case"native":R=await v.swap_and_bridge({sender:s,token:tr.Address.contract(Buffer.from(c)).toString(),amount:BigInt(r),recipient:Buffer.from(g),destination_chain_id:+d,receive_token:Buffer.from(l),nonce:Pt(),gas_amount:BigInt(y),fee_token_amount:BigInt(0)},{fee:C});break;case"stablecoin":R=await v.swap_and_bridge({sender:s,token:tr.Address.contract(Buffer.from(c)).toString(),amount:BigInt(r),recipient:Buffer.from(g),destination_chain_id:+d,receive_token:Buffer.from(l),nonce:Pt(),gas_amount:BigInt(0),fee_token_amount:BigInt(y)},{fee:C});break;case"abr":throw new f("SRB bridge does not support ABR payment method");default:return se(u,"Unhandled FeePaymentMethod")}return R.toXDR()}async buildRawTransactionSwap(a){let r=tt(this.chainType,a);return await this.buildRawTransactionSwapFromParams(r)}async buildRawTransactionSwapFromParams(a){let{amount:r,contractAddress:o,fromAccountAddress:s,fromTokenAddress:c,toAccountAddress:d,toTokenAddress:g,minimumReceiveAmount:l}=a,A=this.getContract(za,o,s),u=await Et(this.nodeRpcUrlsConfig.getNodeRpcUrl("SRB"));return(await A.swap({sender:s,amount:BigInt(r),token:tr.Address.contract(Buffer.from(c)).toBuffer(),receive_token:Buffer.from(g),recipient:d,receive_amount_min:BigInt(l)},{fee:u})).toXDR()}send(a){throw new J}getContract(a,r,o){let s={publicKey:o,contractId:r,networkPassphrase:this.params.sorobanNetworkPassphrase,rpcUrl:this.nodeRpcUrlsConfig.getNodeRpcUrl("SRB")};return new a(s)}};var Kn=require("@clarigen/core"),wc=require("@stacks/network"),nt=require("@stacks/transactions");var At={bridge:{functions:{assertCanSwap:{name:"assert-can-swap",access:"private",args:[],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},assertGasOracle:{name:"assert-gas-oracle",access:"private",args:[{name:"gas-oracle-ref",type:"trait_reference"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},assertMessenger:{name:"assert-messenger",access:"private",args:[{name:"messenger-ref",type:"trait_reference"},{name:"messenger-id",type:"uint128"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},convertBridgingFeeInTokensToNative:{name:"convert-bridging-fee-in-tokens-to-native",access:"private",args:[{name:"ft-ref",type:"trait_reference"},{name:"gas-oracle-ref",type:"trait_reference"},{name:"fee-token-amount",type:"uint128"}],outputs:{type:{response:{ok:"uint128",error:"uint128"}}}},onlyOwner:{name:"only-owner",access:"private",args:[],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},onlyStopAuthority:{name:"only-stop-authority",access:"private",args:[],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},receiveAndSwapFromVusd:{name:"receive-and-swap-from-vusd",access:"private",args:[{name:"pool-ref",type:"trait_reference"},{name:"ft-ref",type:"trait_reference"},{name:"recipient",type:"principal"},{name:"vusd-amount",type:"uint128"},{name:"receive-amount-min",type:"uint128"}],outputs:{type:{response:{ok:"uint128",error:"uint128"}}}},sendAndSwapToVusd:{name:"send-and-swap-to-vusd",access:"private",args:[{name:"pool-ref",type:"trait_reference"},{name:"ft-ref",type:"trait_reference"},{name:"user",type:"principal"},{name:"amount",type:"uint128"}],outputs:{type:{response:{ok:"uint128",error:"uint128"}}}},sendTokens:{name:"send-tokens",access:"private",args:[{name:"messenger-ref",type:"trait_reference"},{name:"gas-oracle-ref",type:"trait_reference"},{name:"amount",type:"uint128"},{name:"recipient",type:{buffer:{length:32}}},{name:"destination-chain-id",type:"uint128"},{name:"receive-token",type:{buffer:{length:32}}},{name:"nonce",type:{buffer:{length:32}}},{name:"messenger-id",type:"uint128"},{name:"bridging-fee",type:"uint128"}],outputs:{type:{response:{ok:{tuple:[{name:"bridge-tx-cost",type:"uint128"},{name:"message-tx-cost",type:"uint128"}]},error:"uint128"}}}},addBridgeToken:{name:"add-bridge-token",access:"public",args:[{name:"chain-id_",type:"uint128"},{name:"token-address",type:{buffer:{length:32}}}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},addPool:{name:"add-pool",access:"public",args:[{name:"pool-ref",type:"trait_reference"},{name:"ft-ref",type:"trait_reference"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},getTransactionCost:{name:"get-transaction-cost",access:"public",args:[{name:"gas-oracle-ref",type:"trait_reference"},{name:"chain-id_",type:"uint128"}],outputs:{type:{response:{ok:"uint128",error:"uint128"}}}},init:{name:"init",access:"public",args:[{name:"this-chain-id_",type:"uint128"},{name:"gas-oracle",type:"principal"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},receiveTokens:{name:"receive-tokens",access:"public",args:[{name:"messenger-ref",type:"trait_reference"},{name:"amount",type:"uint128"},{name:"recipient",type:"principal"},{name:"source-chain-id",type:"uint128"},{name:"pool-ref",type:"trait_reference"},{name:"ft-ref",type:"trait_reference"},{name:"nonce",type:{buffer:{length:32}}},{name:"messenger-id",type:"uint128"},{name:"receive-amount-min",type:"uint128"},{name:"extra-gas",type:"uint128"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},registerBridge:{name:"register-bridge",access:"public",args:[{name:"chain-id_",type:"uint128"},{name:"bridge-address",type:{buffer:{length:32}}}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},removeBridge:{name:"remove-bridge",access:"public",args:[{name:"chain-id_",type:"uint128"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},removeBridgeToken:{name:"remove-bridge-token",access:"public",args:[{name:"chain-id_",type:"uint128"},{name:"token-address",type:{buffer:{length:32}}}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},removeMessenger:{name:"remove-messenger",access:"public",args:[{name:"messenger-id",type:"uint128"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},setGasUsage:{name:"set-gas-usage",access:"public",args:[{name:"chain-id_",type:"uint128"},{name:"gas",type:"uint128"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},setMessenger:{name:"set-messenger",access:"public",args:[{name:"messenger-id",type:"uint128"},{name:"new-messenger",type:"principal"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},setOwner:{name:"set-owner",access:"public",args:[{name:"new-owner",type:"principal"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},setRebalancer:{name:"set-rebalancer",access:"public",args:[{name:"new-rebalancer",type:"principal"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},setStopAuthority:{name:"set-stop-authority",access:"public",args:[{name:"new-authority",type:"principal"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},startSwap:{name:"start-swap",access:"public",args:[],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},stopSwap:{name:"stop-swap",access:"public",args:[],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},swap:{name:"swap",access:"public",args:[{name:"amount",type:"uint128"},{name:"send-pool-ref",type:"trait_reference"},{name:"send-ft-ref",type:"trait_reference"},{name:"receive-pool-ref",type:"trait_reference"},{name:"receive-ft-ref",type:"trait_reference"},{name:"recipient",type:"principal"},{name:"receive-amount-min",type:"uint128"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},swapAndBridge:{name:"swap-and-bridge",access:"public",args:[{name:"pool-ref",type:"trait_reference"},{name:"ft-ref",type:"trait_reference"},{name:"messenger-ref",type:"trait_reference"},{name:"gas-oracle-ref",type:"trait_reference"},{name:"amount",type:"uint128"},{name:"recipient",type:{buffer:{length:32}}},{name:"destination-chain-id",type:"uint128"},{name:"receive-token",type:{buffer:{length:32}}},{name:"nonce",type:{buffer:{length:32}}},{name:"messenger-id",type:"uint128"},{name:"fee-native-amount",type:"uint128"},{name:"fee-token-amount",type:"uint128"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},withdrawBridgingFeeInTokens:{name:"withdraw-bridging-fee-in-tokens",access:"public",args:[{name:"ft-ref",type:"trait_reference"},{name:"amount",type:"uint128"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},withdrawGasTokens:{name:"withdraw-gas-tokens",access:"public",args:[{name:"amount",type:"uint128"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},getGasOracleAddress:{name:"get-gas-oracle-address",access:"read_only",args:[],outputs:{type:"principal"}},getGasUsage:{name:"get-gas-usage",access:"read_only",args:[{name:"chain-id_",type:"uint128"}],outputs:{type:{response:{ok:"uint128",error:"uint128"}}}},getMessenger:{name:"get-messenger",access:"read_only",args:[{name:"messenger-id",type:"uint128"}],outputs:{type:{response:{ok:"principal",error:"uint128"}}}},getOtherBridge:{name:"get-other-bridge",access:"read_only",args:[{name:"chain-id_",type:"uint128"}],outputs:{type:{response:{ok:{buffer:{length:32}},error:"uint128"}}}},getOwner:{name:"get-owner",access:"read_only",args:[],outputs:{type:"principal"}},getProcessedMessageStatus:{name:"get-processed-message-status",access:"read_only",args:[{name:"message-hash",type:{buffer:{length:32}}}],outputs:{type:{response:{ok:"bool",error:"none"}}}},getRebalancer:{name:"get-rebalancer",access:"read_only",args:[],outputs:{type:"principal"}},getSentMessageStatus:{name:"get-sent-message-status",access:"read_only",args:[{name:"message-hash",type:{buffer:{length:32}}}],outputs:{type:{response:{ok:"bool",error:"none"}}}},getStopAuthority:{name:"get-stop-authority",access:"read_only",args:[],outputs:{type:"principal"}},getThisChainId:{name:"get-this-chain-id",access:"read_only",args:[],outputs:{type:"uint128"}},getTokenInfo:{name:"get-token-info",access:"read_only",args:[{name:"token-principal-hash",type:{buffer:{length:32}}}],outputs:{type:{response:{ok:{tuple:[{name:"bridging-fee-conversion-scaling-factor",type:"uint128"},{name:"from-gas-oracle-scaling-factor",type:"uint128"},{name:"pool",type:"principal"},{name:"token",type:"principal"}]},error:"uint128"}}}},isBridgeTokenSupported:{name:"is-bridge-token-supported",access:"read_only",args:[{name:"chain-id_",type:"uint128"},{name:"token-address",type:{buffer:{length:32}}}],outputs:{type:{response:{ok:"bool",error:"none"}}}},isSwapEnabled:{name:"is-swap-enabled",access:"read_only",args:[],outputs:{type:"bool"}}},maps:{gasUsageMap:{name:"gas-usage-map",key:"uint128",value:"uint128"},messengers:{name:"messengers",key:"uint128",value:"principal"},otherBridgeTokens:{name:"other-bridge-tokens",key:{tuple:[{name:"chain-id",type:"uint128"},{name:"token-address",type:{buffer:{length:32}}}]},value:"bool"},otherBridges:{name:"other-bridges",key:"uint128",value:{buffer:{length:32}}},processedMessages:{name:"processed-messages",key:{buffer:{length:32}},value:"bool"},sentMessages:{name:"sent-messages",key:{buffer:{length:32}},value:"bool"},tokenInfos:{name:"token-infos",key:{buffer:{length:32}},value:{tuple:[{name:"bridging-fee-conversion-scaling-factor",type:"uint128"},{name:"from-gas-oracle-scaling-factor",type:"uint128"},{name:"pool",type:"principal"},{name:"token",type:"principal"}]}}},variables:{chainPrecision:{name:"chain-precision",type:"uint128",access:"constant"},errAlreadyInitialized:{name:"err-already-initialized",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errAlreadyProcessed:{name:"err-already-processed",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errAlreadySent:{name:"err-already-sent",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errBridgeSourceNotRegistered:{name:"err-bridge-source-not-registered",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errDepositAmountTooSmall:{name:"err-deposit-amount-too-small",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errGasUsageNotSet:{name:"err-gas-usage-not-set",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errMessengerNotRegistered:{name:"err-messenger-not-registered",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errNoMessage:{name:"err-no-message",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errNotEnoughFee:{name:"err-not-enough-fee",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errNotInitialized:{name:"err-not-initialized",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errSwapProhibited:{name:"err-swap-prohibited",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errTokenNotSupported:{name:"err-token-not-supported",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errUnauthorized:{name:"err-unauthorized",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errWrongGasOracle:{name:"err-wrong-gas-oracle",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errWrongMessenger:{name:"err-wrong-messenger",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errWrongTokenForPool:{name:"err-wrong-token-for-pool",type:{response:{ok:"none",error:"uint128"}},access:"constant"},oraclePrecision:{name:"oracle-precision",type:"uint128",access:"constant"},canSwap:{name:"can-swap",type:"bool",access:"variable"},gasOraclePrincipal:{name:"gas-oracle-principal",type:{optional:"principal"},access:"variable"},owner:{name:"owner",type:"principal",access:"variable"},rebalancer:{name:"rebalancer",type:"principal",access:"variable"},stopAuthority:{name:"stop-authority",type:"principal",access:"variable"},thisChainId:{name:"this-chain-id",type:{optional:"uint128"},access:"variable"}},constants:{canSwap:!1,chainPrecision:6n,errAlreadyInitialized:{isOk:!1,value:1004n},errAlreadyProcessed:{isOk:!1,value:1010n},errAlreadySent:{isOk:!1,value:1005n},errBridgeSourceNotRegistered:{isOk:!1,value:1009n},errDepositAmountTooSmall:{isOk:!1,value:1001n},errGasUsageNotSet:{isOk:!1,value:1008n},errMessengerNotRegistered:{isOk:!1,value:1014n},errNoMessage:{isOk:!1,value:1011n},errNotEnoughFee:{isOk:!1,value:1007n},errNotInitialized:{isOk:!1,value:1006n},errSwapProhibited:{isOk:!1,value:1012n},errTokenNotSupported:{isOk:!1,value:1002n},errUnauthorized:{isOk:!1,value:1000n},errWrongGasOracle:{isOk:!1,value:1013n},errWrongMessenger:{isOk:!1,value:1015n},errWrongTokenForPool:{isOk:!1,value:1003n},gasOraclePrincipal:null,oraclePrecision:18n,owner:"ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM",rebalancer:"ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM",stopAuthority:"ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM",thisChainId:null},non_fungible_tokens:[],fungible_tokens:[],epoch:"Epoch31",clarity_version:"Clarity3",contractName:"bridge"},ftToken:{functions:{getTokenUri:{name:"get-token-uri",access:"public",args:[],outputs:{type:{response:{ok:{optional:{"string-utf8":{length:19}}},error:"none"}}}},mint:{name:"mint",access:"public",args:[{name:"amount",type:"uint128"},{name:"recipient",type:"principal"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},transfer:{name:"transfer",access:"public",args:[{name:"amount",type:"uint128"},{name:"sender",type:"principal"},{name:"recipient",type:"principal"},{name:"memo",type:{optional:{buffer:{length:34}}}}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},getBalance:{name:"get-balance",access:"read_only",args:[{name:"owner",type:"principal"}],outputs:{type:{response:{ok:"uint128",error:"none"}}}},getDecimals:{name:"get-decimals",access:"read_only",args:[],outputs:{type:{response:{ok:"uint128",error:"none"}}}},getName:{name:"get-name",access:"read_only",args:[],outputs:{type:{response:{ok:{"string-ascii":{length:13}},error:"none"}}}},getSymbol:{name:"get-symbol",access:"read_only",args:[],outputs:{type:{response:{ok:{"string-ascii":{length:7}},error:"none"}}}},getTotalSupply:{name:"get-total-supply",access:"read_only",args:[],outputs:{type:{response:{ok:"uint128",error:"none"}}}}},maps:{},variables:{},constants:{},non_fungible_tokens:[],fungible_tokens:[{name:"example-token"}],epoch:"Epoch31",clarity_version:"Clarity3",contractName:"ft-token"},gasOracle:{functions:{setChainData:{name:"set-chain-data",access:"public",args:[{name:"chain-id_",type:"uint128"},{name:"new-price",type:"uint128"},{name:"new-gas-price",type:"uint128"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},setGasPrice:{name:"set-gas-price",access:"public",args:[{name:"chain-id_",type:"uint128"},{name:"new-gas-price",type:"uint128"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},setPrice:{name:"set-price",access:"public",args:[{name:"chain-id_",type:"uint128"},{name:"new-price",type:"uint128"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},crossRate:{name:"cross-rate",access:"read_only",args:[{name:"other-chain-id",type:"uint128"}],outputs:{type:{response:{ok:"uint128",error:"uint128"}}}},getChainData:{name:"get-chain-data",access:"read_only",args:[{name:"chain-id_",type:"uint128"}],outputs:{type:{response:{ok:{tuple:[{name:"gas-price",type:"uint128"},{name:"price",type:"uint128"}]},error:"uint128"}}}},getGasPrice:{name:"get-gas-price",access:"read_only",args:[{name:"chain-id_",type:"uint128"}],outputs:{type:{response:{ok:"uint128",error:"uint128"}}}},getPrice:{name:"get-price",access:"read_only",args:[{name:"chain-id_",type:"uint128"}],outputs:{type:{response:{ok:"uint128",error:"uint128"}}}},getTransactionGasCostInNativeToken:{name:"get-transaction-gas-cost-in-native-token",access:"read_only",args:[{name:"other-chain-id",type:"uint128"},{name:"gas-amount",type:"uint128"}],outputs:{type:{response:{ok:"uint128",error:"uint128"}}}},getTransactionGasCostInUsd:{name:"get-transaction-gas-cost-in-usd",access:"read_only",args:[{name:"other-chain-id",type:"uint128"},{name:"gas-amount",type:"uint128"}],outputs:{type:{response:{ok:"uint128",error:"uint128"}}}}},maps:{chainData:{name:"chain-data",key:"uint128",value:{tuple:[{name:"gas-price",type:"uint128"},{name:"price",type:"uint128"}]}}},variables:{errNotFound:{name:"err-not-found",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errUnauthorized:{name:"err-unauthorized",type:{response:{ok:"none",error:"uint128"}},access:"constant"},oracleScalingFactor:{name:"oracle-scaling-factor",type:"uint128",access:"constant"},contractOwner:{name:"contract-owner",type:"principal",access:"variable"},fromOracleToChainScalingFactor:{name:"from-oracle-to-chain-scaling-factor",type:"uint128",access:"variable"},thisChainId:{name:"this-chain-id",type:"uint128",access:"variable"}},constants:{contractOwner:"ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM",errNotFound:{isOk:!1,value:4001n},errUnauthorized:{isOk:!1,value:4000n},fromOracleToChainScalingFactor:1000000000000n,oracleScalingFactor:1000000000000000000n,thisChainId:16n},non_fungible_tokens:[],fungible_tokens:[],epoch:"Epoch31",clarity_version:"Clarity3",contractName:"gas-oracle"},gasOracleTrait:{functions:{},maps:{},variables:{},constants:{},non_fungible_tokens:[],fungible_tokens:[],epoch:"Epoch31",clarity_version:"Clarity3",contractName:"gas-oracle-trait"},messenger:{functions:{assertGasOracle:{name:"assert-gas-oracle",access:"private",args:[{name:"gas-oracle-ref",type:"trait_reference"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},onlyOwner:{name:"only-owner",access:"private",args:[],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},addSecondaryValidator:{name:"add-secondary-validator",access:"public",args:[{name:"val",type:{buffer:{length:33}}}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},getTransactionCost:{name:"get-transaction-cost",access:"public",args:[{name:"gas-oracle-ref",type:"trait_reference"},{name:"chain-id_",type:"uint128"}],outputs:{type:{response:{ok:"uint128",error:"uint128"}}}},init:{name:"init",access:"public",args:[{name:"this-chain-id_",type:"uint128"},{name:"gas-oracle",type:"principal"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},receiveMessage:{name:"receive-message",access:"public",args:[{name:"message",type:{buffer:{length:32}}},{name:"signature1",type:{buffer:{length:65}}},{name:"signature2",type:{buffer:{length:65}}}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},removeSecondaryValidator:{name:"remove-secondary-validator",access:"public",args:[{name:"val",type:{buffer:{length:33}}}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},sendMessage:{name:"send-message",access:"public",args:[{name:"gas-oracle-ref",type:"trait_reference"},{name:"message",type:{buffer:{length:32}}}],outputs:{type:{response:{ok:"uint128",error:"uint128"}}}},setGasUsage:{name:"set-gas-usage",access:"public",args:[{name:"chain-id_",type:"uint128"},{name:"gas",type:"uint128"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},setOtherChainIds:{name:"set-other-chain-ids",access:"public",args:[{name:"value",type:{buffer:{length:32}}}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},setPrimaryValidator:{name:"set-primary-validator",access:"public",args:[{name:"val",type:{buffer:{length:33}}}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},withdrawGasTokens:{name:"withdraw-gas-tokens",access:"public",args:[{name:"amount",type:"uint128"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},getGasOracle:{name:"get-gas-oracle",access:"read_only",args:[],outputs:{type:{response:{ok:"principal",error:"uint128"}}}},getGasUsage:{name:"get-gas-usage",access:"read_only",args:[{name:"chain-id_",type:"uint128"}],outputs:{type:{response:{ok:"uint128",error:"uint128"}}}},getOtherChainIds:{name:"get-other-chain-ids",access:"read_only",args:[],outputs:{type:{response:{ok:{buffer:{length:32}},error:"none"}}}},getSentMessageBlock:{name:"get-sent-message-block",access:"read_only",args:[{name:"message",type:{buffer:{length:32}}}],outputs:{type:{response:{ok:"uint128",error:"uint128"}}}},getThisChainId:{name:"get-this-chain-id",access:"read_only",args:[],outputs:{type:{response:{ok:"uint128",error:"uint128"}}}},isMessageReceived:{name:"is-message-received",access:"read_only",args:[{name:"message",type:{buffer:{length:32}}}],outputs:{type:{response:{ok:"bool",error:"none"}}}}},maps:{gasUsageMap:{name:"gas-usage-map",key:"uint128",value:"uint128"},receivedMessages:{name:"received-messages",key:{buffer:{length:32}},value:"bool"},secondaryValidators:{name:"secondary-validators",key:{buffer:{length:33}},value:"bool"},sentMessagesBlock:{name:"sent-messages-block",key:{buffer:{length:32}},value:"uint128"}},variables:{errAlreadyInitialized:{name:"err-already-initialized",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errAlreadySent:{name:"err-already-sent",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errGasUsageNotSet:{name:"err-gas-usage-not-set",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errInvalidChainId:{name:"err-invalid-chain-id",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errInvalidDestination:{name:"err-invalid-destination",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errInvalidPrimary:{name:"err-invalid-primary",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errInvalidSecondary:{name:"err-invalid-secondary",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errMessageNotFound:{name:"err-message-not-found",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errNotInitialized:{name:"err-not-initialized",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errUnauthorized:{name:"err-unauthorized",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errWrongBufferLength:{name:"err-wrong-buffer-length",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errWrongGasOracle:{name:"err-wrong-gas-oracle",type:{response:{ok:"none",error:"uint128"}},access:"constant"},gasOraclePrincipal:{name:"gas-oracle-principal",type:{optional:"principal"},access:"variable"},otherChainIds:{name:"other-chain-ids",type:{buffer:{length:32}},access:"variable"},owner:{name:"owner",type:"principal",access:"variable"},primaryValidator:{name:"primary-validator",type:{buffer:{length:33}},access:"variable"},thisChainId:{name:"this-chain-id",type:{optional:"uint128"},access:"variable"}},constants:{errAlreadyInitialized:{isOk:!1,value:3008n},errAlreadySent:{isOk:!1,value:3003n},errGasUsageNotSet:{isOk:!1,value:3010n},errInvalidChainId:{isOk:!1,value:3002n},errInvalidDestination:{isOk:!1,value:3004n},errInvalidPrimary:{isOk:!1,value:3005n},errInvalidSecondary:{isOk:!1,value:3006n},errMessageNotFound:{isOk:!1,value:3001n},errNotInitialized:{isOk:!1,value:3011n},errUnauthorized:{isOk:!1,value:3000n},errWrongBufferLength:{isOk:!1,value:3009n},errWrongGasOracle:{isOk:!1,value:3007n},gasOraclePrincipal:null,otherChainIds:Uint8Array.from([0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]),owner:"ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM",primaryValidator:Uint8Array.from([0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]),thisChainId:null},non_fungible_tokens:[],fungible_tokens:[],epoch:"Epoch31",clarity_version:"Clarity3",contractName:"messenger"},messengerTrait:{functions:{},maps:{},variables:{},constants:{},non_fungible_tokens:[],fungible_tokens:[],epoch:"Epoch31",clarity_version:"Clarity3",contractName:"messenger-trait"},pool:{functions:{addRewards:{name:"add-rewards",access:"private",args:[{name:"amount",type:"uint128"}],outputs:{type:{response:{ok:"bool",error:"none"}}}},assertBalanceReatio:{name:"assert-balance-reatio",access:"private",args:[],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},assertCanDeposit:{name:"assert-can-deposit",access:"private",args:[],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},assertCanSwap:{name:"assert-can-swap",access:"private",args:[],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},assertCanWithdraw:{name:"assert-can-withdraw",access:"private",args:[],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},assertToken:{name:"assert-token",access:"private",args:[{name:"ft-ref",type:"trait_reference"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},depositLp:{name:"deposit-lp",access:"private",args:[{name:"ft-ref",type:"trait_reference"},{name:"to",type:"principal"},{name:"lp-amount",type:"uint128"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},leCube_q:{name:"le-cube?",access:"private",args:[{name:"x",type:"uint128"},{name:"n",type:"uint128"}],outputs:{type:"bool"}},newtonStep:{name:"newton-step",access:"private",args:[{name:"n",type:"uint128"},{name:"x",type:"uint128"}],outputs:{type:"uint128"}},onlyBridge:{name:"only-bridge",access:"private",args:[],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},onlyOwner:{name:"only-owner",access:"private",args:[],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},onlyStopAuthority:{name:"only-stop-authority",access:"private",args:[],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},refine:{name:"refine",access:"private",args:[{name:"n",type:"uint128"},{name:"x",type:"uint128"}],outputs:{type:"uint128"}},withdrawLp:{name:"withdraw-lp",access:"private",args:[{name:"ft-ref",type:"trait_reference"},{name:"from",type:"principal"},{name:"lp-amount",type:"uint128"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},adjustTotalLpAmount:{name:"adjust-total-lp-amount",access:"public",args:[{name:"ft-ref",type:"trait_reference"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},claimAdminFee:{name:"claim-admin-fee",access:"public",args:[{name:"ft-ref",type:"trait_reference"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},claimRewards:{name:"claim-rewards",access:"public",args:[{name:"ft-ref",type:"trait_reference"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},deposit:{name:"deposit",access:"public",args:[{name:"amount",type:"uint128"},{name:"ft-ref",type:"trait_reference"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},init:{name:"init",access:"public",args:[{name:"token",type:"trait_reference"},{name:"bridge-address",type:"principal"},{name:"fee-share-bp-arg",type:"uint128"},{name:"balance-ratio-min-bp-arg",type:"uint128"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},serBalanceRetioMinBp:{name:"ser-balance-retio-min-bp",access:"public",args:[{name:"new-balance-ratio-min-bp",type:"uint128"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},setAdminFeeSahreBp:{name:"set-admin-fee-sahre-bp",access:"public",args:[{name:"new-admin-fee-share-bp",type:"uint128"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},setBridge:{name:"set-bridge",access:"public",args:[{name:"new-bridge",type:"principal"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},setFeeShare:{name:"set-fee-share",access:"public",args:[{name:"fee-share-bp_",type:"uint128"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},setOwner:{name:"set-owner",access:"public",args:[{name:"new-owner",type:"principal"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},setStopAuthority:{name:"set-stop-authority",access:"public",args:[{name:"new-stop-authority",type:"principal"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},startDeposit:{name:"start-deposit",access:"public",args:[],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},startSwap:{name:"start-swap",access:"public",args:[],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},startWithdraw:{name:"start-withdraw",access:"public",args:[],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},stopDeposit:{name:"stop-deposit",access:"public",args:[],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},stopSwap:{name:"stop-swap",access:"public",args:[],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},stopWithdraw:{name:"stop-withdraw",access:"public",args:[],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},swapFromVusd:{name:"swap-from-vusd",access:"public",args:[{name:"ft-ref",type:"trait_reference"},{name:"user",type:"principal"},{name:"amount",type:"uint128"},{name:"receive-amount-min",type:"uint128"},{name:"zero-fee",type:"bool"}],outputs:{type:{response:{ok:"uint128",error:"uint128"}}}},swapToVusd:{name:"swap-to-vusd",access:"public",args:[{name:"ft-ref",type:"trait_reference"},{name:"user",type:"principal"},{name:"amount",type:"uint128"},{name:"zero-fee",type:"bool"}],outputs:{type:{response:{ok:"uint128",error:"uint128"}}}},withdraw:{name:"withdraw",access:"public",args:[{name:"amount-lp",type:"uint128"},{name:"ft-ref",type:"trait_reference"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},calcD:{name:"calc-d",access:"read_only",args:[{name:"x",type:"uint128"},{name:"y",type:"uint128"}],outputs:{type:"uint128"}},calcY:{name:"calc-y",access:"read_only",args:[{name:"x",type:"uint128"},{name:"d_",type:"uint128"}],outputs:{type:"uint128"}},cbrt:{name:"cbrt",access:"read_only",args:[{name:"n",type:"uint128"}],outputs:{type:"uint128"}},fromSystemPrecision:{name:"from-system-precision",access:"read_only",args:[{name:"amount",type:"uint128"}],outputs:{type:"uint128"}},getAccRewardPerShareP:{name:"get-acc-reward-per-share-p",access:"read_only",args:[],outputs:{type:"uint128"}},getAdminFeeAmount:{name:"get-admin-fee-amount",access:"read_only",args:[],outputs:{type:"uint128"}},getAdminFeeShareBp:{name:"get-admin-fee-share-bp",access:"read_only",args:[],outputs:{type:"uint128"}},getBalanceRatioMinBp:{name:"get-balance-ratio-min-bp",access:"read_only",args:[],outputs:{type:"uint128"}},getBridge:{name:"get-bridge",access:"read_only",args:[],outputs:{type:{optional:"principal"}}},getCanDeposit:{name:"get-can-deposit",access:"read_only",args:[],outputs:{type:"bool"}},getCanSwap:{name:"get-can-swap",access:"read_only",args:[],outputs:{type:"bool"}},getCanWithdraw:{name:"get-can-withdraw",access:"read_only",args:[],outputs:{type:"bool"}},getD:{name:"get-d",access:"read_only",args:[],outputs:{type:"uint128"}},getFeeShareBp:{name:"get-fee-share-bp",access:"read_only",args:[],outputs:{type:"uint128"}},getLpBalance:{name:"get-lp-balance",access:"read_only",args:[{name:"user",type:"principal"}],outputs:{type:"uint128"}},getLpTotalSupply:{name:"get-lp-total-supply",access:"read_only",args:[],outputs:{type:"uint128"}},getOwner:{name:"get-owner",access:"read_only",args:[],outputs:{type:"principal"}},getReserves:{name:"get-reserves",access:"read_only",args:[],outputs:{type:"uint128"}},getStopAuthority:{name:"get-stop-authority",access:"read_only",args:[],outputs:{type:"principal"}},getTokenAddress:{name:"get-token-address",access:"read_only",args:[],outputs:{type:{response:{ok:"principal",error:"uint128"}}}},getTokenBalance:{name:"get-token-balance",access:"read_only",args:[],outputs:{type:"uint128"}},getUserRewardDebt:{name:"get-user-reward-debt",access:"read_only",args:[{name:"user",type:"principal"}],outputs:{type:"uint128"}},getVusdBalance:{name:"get-vusd-balance",access:"read_only",args:[],outputs:{type:"uint128"}},pendingRewards:{name:"pending-rewards",access:"read_only",args:[{name:"user",type:"principal"}],outputs:{type:{response:{ok:"uint128",error:"none"}}}},toSystemPrecision:{name:"to-system-precision",access:"read_only",args:[{name:"amount",type:"uint128"}],outputs:{type:"uint128"}}},maps:{lpBalances:{name:"lp-balances",key:"principal",value:"uint128"},userRewardDebt:{name:"user-reward-debt",key:"principal",value:"uint128"}},variables:{BP:{name:"BP",type:"uint128",access:"constant"},P:{name:"P",type:"uint128",access:"constant"},a:{name:"a",type:"uint128",access:"constant"},errAlreadyInitialized:{name:"err-already-initialized",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errDepositAmountTooSmall:{name:"err-deposit-amount-too-small",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errDepositProhibited:{name:"err-deposit-prohibited",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errLowTokenBalance:{name:"err-low-token-balance",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errLowVusdBalance:{name:"err-low-vusd-balance",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errNotEnoughLp:{name:"err-not-enough-lp",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errNotEnoughReserves:{name:"err-not-enough-reserves",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errNotInitialized:{name:"err-not-initialized",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errPoolBalanceTooBig:{name:"err-pool-balance-too-big",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errSlippage:{name:"err-slippage",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errSwapProhibited:{name:"err-swap-prohibited",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errTooLarge:{name:"err-too-large",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errUnauthorized:{name:"err-unauthorized",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errWithdrawProhibited:{name:"err-withdraw-prohibited",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errWrongToken:{name:"err-wrong-token",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errZeroChanges:{name:"err-zero-changes",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errZeroDChanges:{name:"err-zero-d-changes",type:{response:{ok:"none",error:"uint128"}},access:"constant"},maxTokenBalance:{name:"max-token-balance",type:"uint128",access:"constant"},systemPrecision:{name:"system-precision",type:"uint128",access:"constant"},accRewardPerShareP:{name:"acc-reward-per-share-p",type:"uint128",access:"variable"},adminFeeAmount:{name:"admin-fee-amount",type:"uint128",access:"variable"},adminFeeShareBp:{name:"admin-fee-share-bp",type:"uint128",access:"variable"},balanceRatioMinBp:{name:"balance-ratio-min-bp",type:"uint128",access:"variable"},bridge:{name:"bridge",type:{optional:"principal"},access:"variable"},canDeposit:{name:"can-deposit",type:"bool",access:"variable"},canSwap:{name:"can-swap",type:"bool",access:"variable"},canWithdraw:{name:"can-withdraw",type:"bool",access:"variable"},d:{name:"d",type:"uint128",access:"variable"},feeShareBp:{name:"fee-share-bp",type:"uint128",access:"variable"},lpTotalSupply:{name:"lp-total-supply",type:"uint128",access:"variable"},owner:{name:"owner",type:"principal",access:"variable"},reserves:{name:"reserves",type:"uint128",access:"variable"},stopAuthority:{name:"stop-authority",type:"principal",access:"variable"},tokenAmountIncrease:{name:"token-amount-increase",type:"uint128",access:"variable"},tokenAmountReduce:{name:"token-amount-reduce",type:"uint128",access:"variable"},tokenBalance:{name:"token-balance",type:"uint128",access:"variable"},tokenPrincipal:{name:"token-principal",type:{optional:"principal"},access:"variable"},vusdBalance:{name:"vusd-balance",type:"uint128",access:"variable"}},constants:{BP:10000n,P:48n,a:20n,accRewardPerShareP:0n,adminFeeAmount:0n,adminFeeShareBp:0n,balanceRatioMinBp:0n,bridge:null,canDeposit:!0,canSwap:!0,canWithdraw:!0,d:0n,errAlreadyInitialized:{isOk:!1,value:2007n},errDepositAmountTooSmall:{isOk:!1,value:2001n},errDepositProhibited:{isOk:!1,value:2013n},errLowTokenBalance:{isOk:!1,value:2012n},errLowVusdBalance:{isOk:!1,value:2011n},errNotEnoughLp:{isOk:!1,value:2010n},errNotEnoughReserves:{isOk:!1,value:2005n},errNotInitialized:{isOk:!1,value:2006n},errPoolBalanceTooBig:{isOk:!1,value:2002n},errSlippage:{isOk:!1,value:2009n},errSwapProhibited:{isOk:!1,value:2015n},errTooLarge:{isOk:!1,value:2016n},errUnauthorized:{isOk:!1,value:2000n},errWithdrawProhibited:{isOk:!1,value:2014n},errWrongToken:{isOk:!1,value:2008n},errZeroChanges:{isOk:!1,value:2003n},errZeroDChanges:{isOk:!1,value:2004n},feeShareBp:0n,lpTotalSupply:0n,maxTokenBalance:1000000000000n,owner:"ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM",reserves:0n,stopAuthority:"ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM",systemPrecision:3n,tokenAmountIncrease:0n,tokenAmountReduce:0n,tokenBalance:0n,tokenPrincipal:null,vusdBalance:0n},non_fungible_tokens:[],fungible_tokens:[],epoch:"Epoch31",clarity_version:"Clarity3",contractName:"pool"},poolTrait:{functions:{},maps:{},variables:{},constants:{},non_fungible_tokens:[],fungible_tokens:[],epoch:"Epoch31",clarity_version:"Clarity3",contractName:"pool-trait"},sip010TraitFtStandard:{functions:{},maps:{},variables:{},constants:{},non_fungible_tokens:[],fungible_tokens:[],epoch:"Epoch21",clarity_version:"Clarity1",contractName:"sip-010-trait-ft-standard"},utils:{functions:{assertNotEmptyBuff32:{name:"assert-not-empty-buff-32",access:"read_only",args:[{name:"b",type:{buffer:{length:32}}}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},bufferByte:{name:"buffer-byte",access:"read_only",args:[{name:"b",type:{buffer:{length:32}}},{name:"i",type:"uint128"}],outputs:{type:{response:{ok:{buffer:{length:1}},error:"uint128"}}}},bufferByteUint:{name:"buffer-byte-uint",access:"read_only",args:[{name:"b",type:{buffer:{length:32}}},{name:"i",type:"uint128"}],outputs:{type:{response:{ok:"uint128",error:"uint128"}}}},hashMessage:{name:"hash-message",access:"read_only",args:[{name:"amount",type:"uint128"},{name:"recipient",type:{buffer:{length:32}}},{name:"source-chain-id",type:"uint128"},{name:"destination-chain-id",type:"uint128"},{name:"receive-token",type:{buffer:{length:32}}},{name:"nonce",type:{buffer:{length:32}}},{name:"messenger-id",type:"uint128"}],outputs:{type:{response:{ok:{buffer:{length:32}},error:"uint128"}}}},hashWithSenderAddress:{name:"hash-with-sender-address",access:"read_only",args:[{name:"message",type:{buffer:{length:32}}},{name:"sender",type:{buffer:{length:32}}}],outputs:{type:{response:{ok:{buffer:{length:32}},error:"uint128"}}}},principalHash:{name:"principal-hash",access:"read_only",args:[{name:"value",type:"principal"}],outputs:{type:{buffer:{length:32}}}},principalToBuff32:{name:"principal-to-buff32",access:"read_only",args:[{name:"value",type:"principal"}],outputs:{type:{buffer:{length:32}}}},stringToBuff:{name:"string-to-buff",access:"read_only",args:[{name:"str",type:{"string-ascii":{length:40}}}],outputs:{type:{buffer:{length:45}}}},uintToBuff1:{name:"uint-to-buff-1",access:"read_only",args:[{name:"value",type:"uint128"}],outputs:{type:{buffer:{length:17}}}},uintToBuff32:{name:"uint-to-buff-32",access:"read_only",args:[{name:"value",type:"uint128"}],outputs:{type:{buffer:{length:33}}}}},maps:{},variables:{errEmptyBuffer:{name:"err-empty-buffer",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errWrongBufferLength:{name:"err-wrong-buffer-length",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errWrongMsgLength:{name:"err-wrong-msg-length",type:{response:{ok:"none",error:"uint128"}},access:"constant"},thisChainId:{name:"this-chain-id",type:"uint128",access:"constant"},zeroBytes12:{name:"zero-bytes-12",type:{buffer:{length:12}},access:"constant"},zeroBytes16:{name:"zero-bytes-16",type:{buffer:{length:16}},access:"constant"},zeroBytes32:{name:"zero-bytes-32",type:{buffer:{length:32}},access:"constant"}},constants:{errEmptyBuffer:{isOk:!1,value:5002n},errWrongBufferLength:{isOk:!1,value:5000n},errWrongMsgLength:{isOk:!1,value:5001n},thisChainId:16n,zeroBytes12:Uint8Array.from([0,0,0,0,0,0,0,0,0,0,0,0]),zeroBytes16:Uint8Array.from([0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]),zeroBytes32:Uint8Array.from([0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0])},non_fungible_tokens:[],fungible_tokens:[],epoch:"Epoch31",clarity_version:"Clarity3",contractName:"utils"},xReserveBridge:{functions:{assertBurn:{name:"assert-burn",access:"private",args:[{name:"burn-ref",type:"trait_reference"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},assertToken:{name:"assert-token",access:"private",args:[{name:"token-ref",type:"trait_reference"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},onlyOwner:{name:"only-owner",access:"private",args:[],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},bridge:{name:"bridge",access:"public",args:[{name:"token-ref",type:"trait_reference"},{name:"burn-ref",type:"trait_reference"},{name:"amount",type:"uint128"},{name:"recipient",type:{buffer:{length:32}}},{name:"destination-chain-id",type:"uint128"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},removeChainDomain:{name:"remove-chain-domain",access:"public",args:[{name:"chain-id-in",type:"uint128"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},setAdminFee:{name:"set-admin-fee",access:"public",args:[{name:"new-fee-bp",type:"uint128"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},setBurnPrincipal:{name:"set-burn-principal",access:"public",args:[{name:"new-burn-principal",type:"principal"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},setChainDomain:{name:"set-chain-domain",access:"public",args:[{name:"new-chain-id",type:"uint128"},{name:"domain",type:"uint128"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},setOwner:{name:"set-owner",access:"public",args:[{name:"new-owner",type:"principal"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},setTokenPrincipal:{name:"set-token-principal",access:"public",args:[{name:"new-token-principal",type:"principal"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},withdrawFees:{name:"withdraw-fees",access:"public",args:[{name:"token-ref",type:"trait_reference"},{name:"recipient",type:"principal"}],outputs:{type:{response:{ok:"uint128",error:"uint128"}}}}},maps:{chainIdToDomain:{name:"chain-id-to-domain",key:"uint128",value:"uint128"}},variables:{BP:{name:"BP",type:"uint128",access:"constant"},errInsufficientAmount:{name:"err-insufficient-amount",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errInvalidAmount:{name:"err-invalid-amount",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errNotFound:{name:"err-not-found",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errNotInitialized:{name:"err-not-initialized",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errUnauthorized:{name:"err-unauthorized",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errWrongBurn:{name:"err-wrong-burn",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errWrongToken:{name:"err-wrong-token",type:{response:{ok:"none",error:"uint128"}},access:"constant"},adminFeeBp:{name:"admin-fee-bp",type:"uint128",access:"variable"},burnPrincipal:{name:"burn-principal",type:{optional:"principal"},access:"variable"},owner:{name:"owner",type:"principal",access:"variable"},tokenPrincipal:{name:"token-principal",type:{optional:"principal"},access:"variable"}},constants:{BP:10000n,adminFeeBp:0n,burnPrincipal:null,errInsufficientAmount:{isOk:!1,value:1001n},errInvalidAmount:{isOk:!1,value:1002n},errNotFound:{isOk:!1,value:1003n},errNotInitialized:{isOk:!1,value:1004n},errUnauthorized:{isOk:!1,value:1000n},errWrongBurn:{isOk:!1,value:1006n},errWrongToken:{isOk:!1,value:1005n},owner:"ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM",tokenPrincipal:null},non_fungible_tokens:[],fungible_tokens:[],epoch:"Epoch31",clarity_version:"Clarity3",contractName:"x-reserve-bridge"}};function _t(i){if(!i.originTokenAddress)throw new f("STX token must contain 'originTokenAddress'");let[n,a]=i.originTokenAddress.split("::");if(!a)throw new f("STX token must contain 'originTokenAddress' ends with '::<tokenName>'");return a}var Yc=require("@stacks/transactions");function jt(i,n,a,r,o){let[s,c]=(0,Yc.parseContractId)(r);if(!s||!c)throw new Error(`Unable to parse stx token ${r}`);return{type:"ft-postcondition",address:a,condition:n,asset:`${s}.${c}::${o}`,amount:i}}function fo(i,n,a){return{type:"stx-postcondition",address:a,condition:n,amount:i}}var ar=class extends ke{constructor(a,r,o){super();this.nodeRpcUrl=a;this.params=r;this.api=o;let s=(0,wc.createNetwork)({network:this.params.stxIsTestnet?"testnet":"mainnet",client:{baseUrl:this.nodeRpcUrl},apiKey:this.params.stxHeroApiKey});this.client=new Kn.ClarigenClient(s,this.params.stxHeroApiKey)}nodeRpcUrl;params;api;chainType="STX";client;send(a){throw new J}async buildRawTransactionSend(a){let r=await Ee(this.chainType,a,this.api),{contractAddress:o,messenger:s,toChainId:c,toAccountAddress:d,toTokenAddress:g}=r,l=BigInt(r.amount),A=_t(a.sourceToken),u=jt(l,"lte",a.fromAccountAddress,a.sourceToken.tokenAddress,A),m=fo(0,"gte",o),y=[u,m];if(s===6){let _=jt(l,"lte",o,a.sourceToken.tokenAddress,A);y.push(_)}let v=BigInt(r.fee);r.extraGas&&(v=v+BigInt(r.extraGas));let C,R;switch(r.gasFeePaymentMethod){case"native":{C=0n,R=v;let _=fo(v,"lte",a.fromAccountAddress);y.push(_);break}case"stablecoin":{C=v,R=0n;break}case"abr":throw new f("STX bridge does not support ABR payment method");default:return se(r.gasFeePaymentMethod,"Unhandled FeePaymentMethod")}let[Y]=(0,nt.parseContractId)(o),h=s===6?(0,Kn.contractFactory)(At.xReserveBridge,o).bridge({tokenRef:a.sourceToken.tokenAddress,burnRef:a.sourceToken.xReserve?.protocolAddress??a.sourceToken.tokenAddress,amount:l,recipient:Uint8Array.from(d),destinationChainId:c}):(0,Kn.contractFactory)(At.bridge,o).swapAndBridge({ftRef:a.sourceToken.tokenAddress,poolRef:a.sourceToken.poolAddress,messengerRef:`${Y}.messenger`,gasOracleRef:`${Y}.gas-oracle`,amount:l,recipient:Uint8Array.from(d),destinationChainId:c,receiveToken:Uint8Array.from(g),nonce:Uint8Array.from(Vt()),messengerId:s,feeNativeAmount:R,feeTokenAmount:C}),{contractAddress:F,contractName:G,functionName:N,functionArgs:k}=h,H=(0,nt.makeRandomPrivKey)(),ae=(0,nt.privateKeyToPublic)(H),re={contractAddress:F,contractName:G,functionName:N,functionArgs:k,publicKey:ae,validateWithAbi:!0,network:this.client.network,postConditions:y,postConditionMode:nt.PostConditionMode.Deny};return(await(0,nt.makeUnsignedContractCall)(re)).serialize()}async buildRawTransactionSwap(a){let r=tt(this.chainType,a),o=BigInt(r.amount),s=BigInt(r.minimumReceiveAmount),c=a.sourceToken.bridgeAddress,d=(0,Kn.contractFactory)(At.bridge,c),{contractAddress:g,contractName:l,functionName:A,functionArgs:u}=d.swap({amount:o,sendPoolRef:a.sourceToken.poolAddress,sendFtRef:a.sourceToken.tokenAddress,receivePoolRef:a.destinationToken.poolAddress,receiveFtRef:a.destinationToken.tokenAddress,recipient:a.toAccountAddress,receiveAmountMin:s}),m=(0,nt.makeRandomPrivKey)(),y=(0,nt.privateKeyToPublic)(m),v=jt(o,"lte",a.fromAccountAddress,a.sourceToken.tokenAddress,_t(a.sourceToken)),C=jt(s,"gte",a.destinationToken.poolAddress,a.destinationToken.tokenAddress,_t(a.destinationToken)),R={contractAddress:g,contractName:l,functionName:A,functionArgs:u,publicKey:y,validateWithAbi:!0,network:this.client.network,postConditions:[v,C],postConditionMode:nt.PostConditionMode.Deny};return(await(0,nt.makeUnsignedContractCall)(R)).serialize()}};var El={"-32700":"ParseError","-32701":"OversizedRequest","-32702":"OversizedResponse","-32600":"InvalidRequest","-32601":"MethodNotFound","-32602":"InvalidParams","-32603":"InternalError","-32604":"ServerBusy","-32000":"CallExecutionFailed","-32001":"UnknownError","-32003":"SubscriptionClosed","-32004":"SubscriptionClosedWithError","-32005":"BatchesNotSupported","-32006":"TooManySubscriptions","-32050":"TransientError","-32002":"TransactionExecutionClientError"},Wc=class extends Error{},Nc=class extends Wc{constructor(i,n){super(i),this.code=n,this.type=El[n]??"ServerError"}},Fc=class extends Wc{constructor(i,n,a){super(i),this.status=n,this.statusText=a}};var ir="2.19.0";var Gc=class{#t=0;#n;constructor(i){this.#n=i}fetch(i,n){let a=this.#n.fetch??fetch;if(!a)throw new Error("The current environment does not support fetch, you can provide a fetch implementation in the options for SuiHTTPTransport.");return a(i,n)}async request(i){this.#t+=1;let n=await this.fetch(this.#n.rpc?.url??this.#n.url,{method:"POST",signal:i.signal,headers:{"Content-Type":"application/json","Client-Sdk-Type":"typescript","Client-Sdk-Version":ir,"Client-Request-Method":i.method,...this.#n.rpc?.headers},body:JSON.stringify({jsonrpc:"2.0",id:this.#t,method:i.method,params:i.params})});if(!n.ok)throw new Fc(`Unexpected status code: ${n.status}`,n.status,n.statusText);let a=await n.json();if("error"in a&&a.error!=null)throw new Nc(a.error.message,a.error.code);return a.result}};var Zc=/^(?!.*(^(?!@)|[-.@])($|[-.@]))(?:[a-z0-9-]{0,63}(?:\.[a-z0-9-]{0,63})*)?@[a-z0-9-]{0,63}$/i,Sc=/^(?!.*(^|[-.])($|[-.]))(?:[a-z0-9-]{0,63}\.)+sui$/i;function kc(i){return i.length>235?!1:i.includes("@")?Zc.test(i):Sc.test(i)}function Vc(i,n="at"){let a=i.toLowerCase(),r;if(a.includes("@")){if(!Zc.test(a))throw new Error(`Invalid SuiNS name ${i}`);let[o,s]=a.split("@");r=[...o?o.split("."):[],s]}else{if(!Sc.test(a))throw new Error(`Invalid SuiNS name ${i}`);r=a.split(".").slice(0,-1)}return n==="dot"?`${r.join(".")}.sui`:`${r.slice(0,-1).join(".")}@${r[r.length-1]}`}var rr=require("@mysten/bcs"),_l=32;function Ro(i){try{return(0,rr.fromBase58)(i).length===_l}catch{return!1}}var En=32;function Oe(i){return tA(i)&&nA(i)===En}function Ua(i){return Oe(i)}var $l=/^[a-zA-Z][a-zA-Z0-9_]*$/;function Pc(i){return $l.test(i)}var ql=["bool","u8","u16","u32","u64","u128","u256","address","signer"],eA=/^vector<(.+)>$/;function Xc(i){if(ql.includes(i))return!0;let n=i.match(eA);return n?Xc(n[1]):i.includes("::")?To(i):!1}function jc(i){return!Oe(i.address)&&!Me(i.address)||!Pc(i.module)||!Pc(i.name)?!1:i.typeParams.every(n=>typeof n=="string"?Xc(n):jc(n))}function To(i){try{return jc(Mt(i))}catch{return!1}}function Mc(i){if(i.startsWith("vector<")){if(!i.endsWith(">"))throw new Error(`Invalid type tag: ${i}`);let n=i.slice(7,-1);if(!n)throw new Error(`Invalid type tag: ${i}`);let a=Mc(n);return typeof a=="string"?`vector<${a}>`:`vector<${oe(a)}>`}return i.includes("::")?Mt(i):i}function Mt(i){let n=i.split("::");if(n.length<3)throw new Error(`Invalid struct tag: ${i}`);let[a,r]=n;if(!a||!r)throw new Error(`Invalid struct tag: ${i}`);let o=Me(a),s=i.slice(a.length+r.length+4),c=s.includes("<")?s.slice(0,s.indexOf("<")):s;if(!c||s.includes("<")&&!s.endsWith(">"))throw new Error(`Invalid struct tag: ${i}`);let d=s.includes("<")?(0,rr.splitGenericParameters)(s.slice(s.indexOf("<")+1,s.lastIndexOf(">"))).map(g=>Mc(g.trim())):[];return{address:o?a:V(a),module:r,name:c,typeParams:d}}function oe(i){if(typeof i=="string"&&i.startsWith("vector<"))throw new Error("normalizeStructTag does not support vector types. Use normalizeTypeTag instead.");let{address:n,module:a,name:r,typeParams:o}=typeof i=="string"?Mt(i):i;return`${n}::${a}::${r}${o?.length>0?`<${o.map(s=>typeof s=="string"?s:oe(s)).join(",")}>`:""}`}function V(i,n=!1){let a=i.toLowerCase();return!n&&a.startsWith("0x")&&(a=a.slice(2)),`0x${a.padStart(En*2,"0")}`}function Lt(i,n=!1){return V(i,n)}function tA(i){return/^(0x|0X)?[a-fA-F0-9]+$/.test(i)&&i.length%2===0}function nA(i){return/^(0x|0X)/.test(i)?(i.length-2)/2:i.length/2}var aA=/^([a-z0-9]+(?:-[a-z0-9]+)*)$/,iA=/^\d+$/,rA=64,Lc="/",Me=i=>{let n=i.split(Lc);if(n.length<2||n.length>3)return!1;let[a,r,o]=n;return o!==void 0&&!iA.test(o)||!kc(a)?!1:aA.test(r)&&r.length<rA},xc=i=>{let n=i.split(/::|<|>|,/);for(let a of n)if(a.includes(Lc)&&!Me(a))return!1;return To(i)};var Hc=class Jc{#t;#n;constructor({prefix:n,cache:a}={}){this.#t=n??[],this.#n=a??new Map}read(n,a){let r=[this.#t,...n].join(":");if(this.#n.has(r))return this.#n.get(r);let o=a();return this.#n.set(r,o),typeof o=="object"&&o!==null&&"then"in o?Promise.resolve(o).then(s=>(this.#n.set(r,s),s)).catch(s=>{throw this.#n.delete(r),s}):o}readSync(n,a){let r=[this.#t,...n].join(":");if(this.#n.has(r))return this.#n.get(r);let o=a();return this.#n.set(r,o),o}clear(n){let a=[...this.#t,...n??[]].join(":");if(!a){this.#n.clear();return}for(let r of this.#n.keys())r.startsWith(a)&&this.#n.delete(r)}scope(n){return new Jc({prefix:[...this.#t,...Array.isArray(n)?n:[n]],cache:this.#n})}};var or=class{constructor({network:i,base:n,cache:a=n?.cache??new Hc}){this.network=i,this.base=n??this,this.cache=a}$extend(...i){let n=Object.fromEntries(i.map(r=>[r.name,r.register(this)])),a=new Map;return new Proxy(this,{get(r,o,s){if(typeof o=="string"&&o in n)return n[o];let c=Reflect.get(r,o,s);return typeof c=="function"?o==="$extend"?c.bind(s):(a.has(o)||a.set(o,c.bind(r)),a.get(o)):c}})}};var _n=require("@mysten/utils"),oA="/",sA={"Mvr-Source":`@mysten/sui@${ir}`},zc=class{#t;#n;#o;#a;constructor({cache:i,url:n,pageSize:a=50,overrides:r}){this.#t=i,this.#n=n,this.#o=a,this.#a={packages:r?.packages,types:r?.types},cA(this.#a)}get#i(){return this.#t.readSync(["#mvrPackageDataLoader",this.#n??""],()=>{let i=new _n.DataLoader(async a=>{if(!this.#n)throw new Error(`MVR Api URL is not set for the current client (resolving ${a.join(", ")})`);let r=await this.#s(a);return a.map(o=>r[o]??new Error(`Failed to resolve package: ${o}`))}),n=this.#a?.packages;if(n)for(let[a,r]of Object.entries(n))i.prime(a,r);return i})}get#r(){return this.#t.readSync(["#mvrTypeDataLoader",this.#n??""],()=>{let i=new _n.DataLoader(async a=>{if(!this.#n)throw new Error(`MVR Api URL is not set for the current client (resolving ${a.join(", ")})`);let r=await this.#c(a);return a.map(o=>r[o]??new Error(`Failed to resolve type: ${o}`))}),n=this.#a?.types;if(n)for(let[a,r]of Object.entries(n))i.prime(a,r);return i})}async#s(i){if(i.length===0)return{};let n=(0,_n.chunk)(i,this.#o),a={};return await Promise.all(n.map(async r=>{let o=await this.#e("/v1/resolution/bulk",{names:r});if(o?.resolution)for(let s of Object.keys(o?.resolution)){let c=o.resolution[s]?.package_id;c&&(a[s]=c)}})),a}async#c(i){if(i.length===0)return{};let n=(0,_n.chunk)(i,this.#o),a={};return await Promise.all(n.map(async r=>{let o=await this.#e("/v1/struct-definition/bulk",{types:r});if(o?.resolution)for(let s of Object.keys(o?.resolution)){let c=o.resolution[s]?.type_tag;c&&(a[s]=c)}})),a}async#e(i,n){if(!this.#n)throw new Error("MVR Api URL is not set for the current client");let a=await fetch(`${this.#n}${i}`,{method:"POST",headers:{"Content-Type":"application/json",...sA},body:JSON.stringify(n)});if(!a.ok){let r=await a.json().catch(()=>({}));throw new Error(`Failed to resolve types: ${r?.message}`)}return a.json()}async resolvePackage({package:i}){return Le(i)?{package:await this.#i.load(i)}:{package:i}}async resolveType({type:i}){if(!Le(i))return{type:i};let n=[...sr(i)],a=await this.#r.loadMany(n),r={};for(let o=0;o<n.length;o++){let s=a[o];if(s instanceof Error)throw s;r[n[o]]=s}return{type:cr(i,r)}}async resolve({types:i=[],packages:n=[]}){let a=new Set;for(let l of i??[])sr(l,a);let r=[...a],[o,s]=await Promise.all([r.length>0?this.#r.loadMany(r):[],n.length>0?this.#i.loadMany(n):[]]),c={...this.#a?.types};for(let[l,A]of r.entries()){let u=o[l];if(u instanceof Error)throw u;c[A]=u}let d={};for(let l of i??[])d[l]={type:cr(l,c)};let g={};for(let[l,A]of(n??[]).entries()){let u=this.#a?.packages?.[A]??s[l];if(u instanceof Error)throw u;g[A]={package:u}}return{types:d,packages:g}}};function cA(i){if(i?.packages)for(let[n,a]of Object.entries(i.packages)){if(!Me(n))throw new Error(`Invalid package name: ${n}`);if(!Oe(V(a)))throw new Error(`Invalid package ID: ${a}`)}if(i?.types)for(let[n,a]of Object.entries(i.types)){if(Mt(n).typeParams.length>0)throw new Error("Type overrides must be first-level only. If you want to supply generic types, just pass each type individually.");if(!Oe(Mt(a).address))throw new Error(`Invalid type: ${a}`)}}function sr(i,n=new Set){if(typeof i=="string"&&!Le(i))return n;if(typeof i=="string"&&i.startsWith("vector<")&&i.endsWith(">"))return sr(i.slice(7,-1),n);let a=Uc(i)?i:Mt(i);Le(a.address)&&n.add(`${a.address}::${a.module}::${a.name}`);for(let r of a.typeParams)sr(r,n);return n}function cr(i,n){if(typeof i=="string"&&!i.includes("::"))return i;if(typeof i=="string"&&i.startsWith("vector<")&&i.endsWith(">"))return`vector<${cr(i.slice(7,-1),n)}>`;let a=Uc(i)?i:Mt(i),r=n[`${a.address}::${a.module}::${a.name}`];return oe({...a,address:r?r.split("::")[0]:a.address,typeParams:a.typeParams.map(o=>cr(o,n))})}function Le(i){return i.includes(oA)||i.includes("@")||i.includes(".sui")}function Uc(i){return typeof i=="object"&&"address"in i&&"module"in i&&"name"in i&&"typeParams"in i}function Dc(i){let n=new Set,a=new Set;for(let r of i.commands)switch(r.$kind){case"MakeMoveVec":r.MakeMoveVec.type&&Oc([r.MakeMoveVec.type]).forEach(c=>{a.add(c)});break;case"MoveCall":let o=r.MoveCall,s=o.package.split("::")[0];if(Le(s)){if(!Me(s))throw new Error(`Invalid package name: ${s}`);n.add(s)}Oc(o.typeArguments??[]).forEach(c=>{a.add(c)});break;default:break}return{packages:[...n],types:[...a]}}function Qc(i,n){for(let a of i.commands){if(a.MakeMoveVec?.type){if(!Le(a.MakeMoveVec.type))continue;if(!n.types[a.MakeMoveVec.type])throw new Error(`No resolution found for type: ${a.MakeMoveVec.type}`);a.MakeMoveVec.type=n.types[a.MakeMoveVec.type].type}let r=a.MoveCall;if(!r)continue;let o=r.package.split("::"),s=o[0];if(Le(s)&&!n.packages[s])throw new Error(`No address found for package: ${s}`);Le(s)&&(o[0]=n.packages[s].package,r.package=o.join("::"));let c=r.typeArguments;if(c){for(let d=0;d<c.length;d++)if(Le(c[d])){if(!n.types[c[d]])throw new Error(`No resolution found for type: ${c[d]}`);c[d]=n.types[c[d]].type}r.typeArguments=c}}}function Oc(i){let n=new Set;for(let a of i)if(Le(a)){if(!xc(a))throw new Error(`Invalid type with names: ${a}`);n.add(a)}return n}var Kc=require("@mysten/bcs"),dA=/^vector<(.+)>$/,gA=/^([^:]+)::([^:]+)::([^<]+)(<(.+)>)?/,st=class $n{static parseFromStr(n,a=!1){if(n==="address")return{address:null};if(n==="bool")return{bool:null};if(n==="u8")return{u8:null};if(n==="u16")return{u16:null};if(n==="u32")return{u32:null};if(n==="u64")return{u64:null};if(n==="u128")return{u128:null};if(n==="u256")return{u256:null};if(n==="signer")return{signer:null};let r=n.match(dA);if(r)return{vector:$n.parseFromStr(r[1],a)};let o=n.match(gA);if(o)return{struct:{address:a?V(o[1]):o[1],module:o[2],name:o[3],typeParams:o[5]===void 0?[]:$n.parseStructTypeArgs(o[5],a)}};throw new Error(`Encountered unexpected token when parsing type args for ${n}`)}static parseStructTypeArgs(n,a=!1){return(0,Kc.splitGenericParameters)(n).map(r=>$n.parseFromStr(r,a))}static tagToString(n){if("bool"in n)return"bool";if("u8"in n)return"u8";if("u16"in n)return"u16";if("u32"in n)return"u32";if("u64"in n)return"u64";if("u128"in n)return"u128";if("u256"in n)return"u256";if("address"in n)return"address";if("signer"in n)return"signer";if("vector"in n)return`vector<${$n.tagToString(n.vector)}>`;if("struct"in n){let a=n.struct,r=a.typeParams.map($n.tagToString).join(", ");return`${a.address}::${a.module}::${a.name}${r?`<${r}>`:""}`}throw new Error("Invalid TypeTag")}};var I=require("@mysten/bcs");function lA(i){return I.bcs.u64({name:"unsafe_u64",...i}).transform({input:n=>n,output:n=>Number(n)})}function AA(i){return I.bcs.enum("Option",{None:null,Some:i})}var ne=I.bcs.bytes(En).transform({validate:i=>{let n=typeof i=="string"?i:(0,I.toHex)(i);if(!n||!Oe(V(n)))throw new Error(`Invalid Sui address ${n}`)},input:i=>typeof i=="string"?(0,I.fromHex)(V(i)):i,output:i=>V((0,I.toHex)(i))}),ze=I.bcs.byteVector().transform({name:"ObjectDigest",input:i=>(0,I.fromBase58)(i),output:i=>(0,I.toBase58)(new Uint8Array(i)),validate:i=>{if((0,I.fromBase58)(i).length!==32)throw new Error("ObjectDigest must be 32 bytes")}}),at=I.bcs.struct("SuiObjectRef",{objectId:ne,version:I.bcs.u64(),digest:ze}),Bo=I.bcs.struct("SharedObjectRef",{objectId:ne,initialSharedVersion:I.bcs.u64(),mutable:I.bcs.bool()}),Yo=I.bcs.enum("ObjectArg",{ImmOrOwnedObject:at,SharedObject:Bo,Receiving:at}),xt=I.bcs.enum("Owner",{AddressOwner:ne,ObjectOwner:ne,Shared:I.bcs.struct("Shared",{initialSharedVersion:I.bcs.u64()}),Immutable:null,ConsensusAddressOwner:I.bcs.struct("ConsensusAddressOwner",{startVersion:I.bcs.u64(),owner:ne})}),uA=I.bcs.enum("Reservation",{MaxAmountU64:I.bcs.u64()}),pA=I.bcs.enum("WithdrawalType",{Balance:I.bcs.lazy(()=>Cn)}),mA=I.bcs.enum("WithdrawFrom",{Sender:null,Sponsor:null}),bA=I.bcs.struct("FundsWithdrawal",{reservation:uA,typeArg:pA,withdrawFrom:mA}),wo=I.bcs.enum("CallArg",{Pure:I.bcs.struct("Pure",{bytes:I.bcs.byteVector().transform({input:i=>typeof i=="string"?(0,I.fromBase64)(i):i,output:i=>(0,I.toBase64)(new Uint8Array(i))})}),Object:Yo,FundsWithdrawal:bA}),Wo=I.bcs.enum("TypeTag",{bool:null,u8:null,u64:null,u128:null,address:null,signer:null,vector:I.bcs.lazy(()=>Wo),struct:I.bcs.lazy(()=>dr),u16:null,u32:null,u256:null}),Cn=Wo.transform({input:i=>typeof i=="string"?st.parseFromStr(i,!0):i,output:i=>st.tagToString(i)}),vt=I.bcs.enum("Argument",{GasCoin:null,Input:I.bcs.u16(),Result:I.bcs.u16(),NestedResult:I.bcs.tuple([I.bcs.u16(),I.bcs.u16()])}),No=I.bcs.struct("ProgrammableMoveCall",{package:ne,module:I.bcs.string(),function:I.bcs.string(),typeArguments:I.bcs.vector(Cn),arguments:I.bcs.vector(vt)}),Fo=I.bcs.enum("Command",{MoveCall:No,TransferObjects:I.bcs.struct("TransferObjects",{objects:I.bcs.vector(vt),address:vt}),SplitCoins:I.bcs.struct("SplitCoins",{coin:vt,amounts:I.bcs.vector(vt)}),MergeCoins:I.bcs.struct("MergeCoins",{destination:vt,sources:I.bcs.vector(vt)}),Publish:I.bcs.struct("Publish",{modules:I.bcs.vector(I.bcs.byteVector().transform({input:i=>typeof i=="string"?(0,I.fromBase64)(i):i,output:i=>(0,I.toBase64)(new Uint8Array(i))})),dependencies:I.bcs.vector(ne)}),MakeMoveVec:I.bcs.struct("MakeMoveVec",{type:AA(Cn).transform({input:i=>i===null?{None:!0}:{Some:i},output:i=>i.Some??null}),elements:I.bcs.vector(vt)}),Upgrade:I.bcs.struct("Upgrade",{modules:I.bcs.vector(I.bcs.byteVector().transform({input:i=>typeof i=="string"?(0,I.fromBase64)(i):i,output:i=>(0,I.toBase64)(new Uint8Array(i))})),dependencies:I.bcs.vector(ne),package:ne,ticket:vt})}),Go=I.bcs.struct("ProgrammableTransaction",{inputs:I.bcs.vector(wo),commands:I.bcs.vector(Fo)}),Zo=I.bcs.enum("TransactionKind",{ProgrammableTransaction:Go,ChangeEpoch:null,Genesis:null,ConsensusCommitPrologue:null}),yA=I.bcs.struct("ValidDuring",{minEpoch:I.bcs.option(I.bcs.u64()),maxEpoch:I.bcs.option(I.bcs.u64()),minTimestamp:I.bcs.option(I.bcs.u64()),maxTimestamp:I.bcs.option(I.bcs.u64()),chain:ze,nonce:I.bcs.u32()}),So=I.bcs.enum("TransactionExpiration",{None:null,Epoch:lA(),ValidDuring:yA}),dr=I.bcs.struct("StructTag",{address:ne,module:I.bcs.string(),name:I.bcs.string(),typeParams:I.bcs.vector(Wo)}),ko=I.bcs.struct("GasData",{payment:I.bcs.vector(at),owner:ne,price:I.bcs.u64(),budget:I.bcs.u64()}),Vo=I.bcs.struct("TransactionDataV1",{kind:Zo,sender:ne,gasData:ko,expiration:So}),Po=I.bcs.enum("TransactionData",{V1:Vo}),Xo=I.bcs.enum("IntentScope",{TransactionData:null,TransactionEffects:null,CheckpointSummary:null,PersonalMessage:null}),jo=I.bcs.enum("IntentVersion",{V0:null}),Mo=I.bcs.enum("AppId",{Sui:null}),Lo=I.bcs.struct("Intent",{scope:Xo,version:jo,appId:Mo});function xo(i){return I.bcs.struct(`IntentMessage<${i.name}>`,{intent:Lo,value:i})}var Ho=I.bcs.enum("CompressedSignature",{ED25519:I.bcs.bytes(64),Secp256k1:I.bcs.bytes(64),Secp256r1:I.bcs.bytes(64),ZkLogin:I.bcs.byteVector(),Passkey:I.bcs.byteVector()}),Jo=I.bcs.enum("PublicKey",{ED25519:I.bcs.bytes(32),Secp256k1:I.bcs.bytes(33),Secp256r1:I.bcs.bytes(33),ZkLogin:I.bcs.byteVector(),Passkey:I.bcs.bytes(33)}),Oo=I.bcs.struct("MultiSigPkMap",{pubKey:Jo,weight:I.bcs.u8()}),zo=I.bcs.struct("MultiSigPublicKey",{pk_map:I.bcs.vector(Oo),threshold:I.bcs.u16()}),Ec=I.bcs.struct("MultiSig",{sigs:I.bcs.vector(Ho),bitmap:I.bcs.u16(),multisig_pk:zo}),CA=I.bcs.byteVector().transform({input:i=>typeof i=="string"?(0,I.fromBase64)(i):i,output:i=>(0,I.toBase64)(new Uint8Array(i))}),Uo=I.bcs.struct("SenderSignedTransaction",{intentMessage:xo(Po),txSignatures:I.bcs.vector(CA)}),_c=I.bcs.vector(Uo,{name:"SenderSignedData"}),$c=I.bcs.struct("PasskeyAuthenticator",{authenticatorData:I.bcs.byteVector(),clientDataJson:I.bcs.string(),userSignature:I.bcs.byteVector()}),Do=I.bcs.enum("MoveObjectType",{Other:dr,GasCoin:null,StakedSui:null,Coin:Cn,AccumulatorBalanceWrapper:null}),Qo=I.bcs.struct("TypeOrigin",{moduleName:I.bcs.string(),datatypeName:I.bcs.string(),package:ne}),Ko=I.bcs.struct("UpgradeInfo",{upgradedId:ne,upgradedVersion:I.bcs.u64()}),Eo=I.bcs.struct("MovePackage",{id:ne,version:I.bcs.u64(),moduleMap:I.bcs.map(I.bcs.string(),I.bcs.byteVector()),typeOriginTable:I.bcs.vector(Qo),linkageTable:I.bcs.map(ne,Ko)}),_o=I.bcs.struct("MoveObject",{type:Do,hasPublicTransfer:I.bcs.bool(),version:I.bcs.u64(),contents:I.bcs.byteVector()}),$o=I.bcs.enum("Data",{Move:_o,Package:Eo}),qc=I.bcs.struct("ObjectInner",{data:$o,owner:xt,previousTransaction:ze,storageRebate:I.bcs.u64()});var T=require("@mysten/bcs"),IA=T.bcs.enum("PackageUpgradeError",{UnableToFetchPackage:T.bcs.struct("UnableToFetchPackage",{packageId:ne}),NotAPackage:T.bcs.struct("NotAPackage",{objectId:ne}),IncompatibleUpgrade:null,DigestDoesNotMatch:T.bcs.struct("DigestDoesNotMatch",{digest:T.bcs.byteVector()}),UnknownUpgradePolicy:T.bcs.struct("UnknownUpgradePolicy",{policy:T.bcs.u8()}),PackageIDDoesNotMatch:T.bcs.struct("PackageIDDoesNotMatch",{packageId:ne,ticketId:ne})}),hA=T.bcs.struct("ModuleId",{address:ne,name:T.bcs.string()}),ed=T.bcs.struct("MoveLocation",{module:hA,function:T.bcs.u16(),instruction:T.bcs.u16(),functionName:T.bcs.option(T.bcs.string())}),vA=T.bcs.enum("CommandArgumentError",{TypeMismatch:null,InvalidBCSBytes:null,InvalidUsageOfPureArg:null,InvalidArgumentToPrivateEntryFunction:null,IndexOutOfBounds:T.bcs.struct("IndexOutOfBounds",{idx:T.bcs.u16()}),SecondaryIndexOutOfBounds:T.bcs.struct("SecondaryIndexOutOfBounds",{resultIdx:T.bcs.u16(),secondaryIdx:T.bcs.u16()}),InvalidResultArity:T.bcs.struct("InvalidResultArity",{resultIdx:T.bcs.u16()}),InvalidGasCoinUsage:null,InvalidValueUsage:null,InvalidObjectByValue:null,InvalidObjectByMutRef:null,SharedObjectOperationNotAllowed:null,InvalidArgumentArity:null,InvalidTransferObject:null,InvalidMakeMoveVecNonObjectArgument:null,ArgumentWithoutValue:null,CannotMoveBorrowedValue:null,CannotWriteToExtendedReference:null,InvalidReferenceArgument:null}),fA=T.bcs.enum("TypeArgumentError",{TypeNotFound:null,ConstraintNotSatisfied:null}),RA=T.bcs.enum("ExecutionFailureStatus",{InsufficientGas:null,InvalidGasObject:null,InvariantViolation:null,FeatureNotYetSupported:null,MoveObjectTooBig:T.bcs.struct("MoveObjectTooBig",{objectSize:T.bcs.u64(),maxObjectSize:T.bcs.u64()}),MovePackageTooBig:T.bcs.struct("MovePackageTooBig",{objectSize:T.bcs.u64(),maxObjectSize:T.bcs.u64()}),CircularObjectOwnership:T.bcs.struct("CircularObjectOwnership",{object:ne}),InsufficientCoinBalance:null,CoinBalanceOverflow:null,PublishErrorNonZeroAddress:null,SuiMoveVerificationError:null,MovePrimitiveRuntimeError:T.bcs.option(ed),MoveAbort:T.bcs.tuple([ed,T.bcs.u64()]),VMVerificationOrDeserializationError:null,VMInvariantViolation:null,FunctionNotFound:null,ArityMismatch:null,TypeArityMismatch:null,NonEntryFunctionInvoked:null,CommandArgumentError:T.bcs.struct("CommandArgumentError",{argIdx:T.bcs.u16(),kind:vA}),TypeArgumentError:T.bcs.struct("TypeArgumentError",{argumentIdx:T.bcs.u16(),kind:fA}),UnusedValueWithoutDrop:T.bcs.struct("UnusedValueWithoutDrop",{resultIdx:T.bcs.u16(),secondaryIdx:T.bcs.u16()}),InvalidPublicFunctionReturnType:T.bcs.struct("InvalidPublicFunctionReturnType",{idx:T.bcs.u16()}),InvalidTransferObject:null,EffectsTooLarge:T.bcs.struct("EffectsTooLarge",{currentSize:T.bcs.u64(),maxSize:T.bcs.u64()}),PublishUpgradeMissingDependency:null,PublishUpgradeDependencyDowngrade:null,PackageUpgradeError:T.bcs.struct("PackageUpgradeError",{upgradeError:IA}),WrittenObjectsTooLarge:T.bcs.struct("WrittenObjectsTooLarge",{currentSize:T.bcs.u64(),maxSize:T.bcs.u64()}),CertificateDenied:null,SuiMoveVerificationTimedout:null,SharedObjectOperationNotAllowed:null,InputObjectDeleted:null,ExecutionCancelledDueToSharedObjectCongestion:T.bcs.struct("ExecutionCancelledDueToSharedObjectCongestion",{congested_objects:T.bcs.vector(ne)}),AddressDeniedForCoin:T.bcs.struct("AddressDeniedForCoin",{address:ne,coinType:T.bcs.string()}),CoinTypeGlobalPause:T.bcs.struct("CoinTypeGlobalPause",{coinType:T.bcs.string()}),ExecutionCancelledDueToRandomnessUnavailable:null,MoveVectorElemTooBig:T.bcs.struct("MoveVectorElemTooBig",{valueSize:T.bcs.u64(),maxScaledSize:T.bcs.u64()}),MoveRawValueTooBig:T.bcs.struct("MoveRawValueTooBig",{valueSize:T.bcs.u64(),maxScaledSize:T.bcs.u64()}),InvalidLinkage:null,InsufficientBalanceForWithdraw:null,NonExclusiveWriteInputObjectModified:T.bcs.struct("NonExclusiveWriteInputObjectModified",{id:ne})}),gr=T.bcs.enum("ExecutionStatus",{Success:null,Failure:T.bcs.struct("Failure",{error:RA,command:T.bcs.option(T.bcs.u64())})}),td=T.bcs.struct("GasCostSummary",{computationCost:T.bcs.u64(),storageCost:T.bcs.u64(),storageRebate:T.bcs.u64(),nonRefundableStorageFee:T.bcs.u64()}),TA=T.bcs.struct("TransactionEffectsV1",{status:gr,executedEpoch:T.bcs.u64(),gasUsed:td,modifiedAtVersions:T.bcs.vector(T.bcs.tuple([ne,T.bcs.u64()])),sharedObjects:T.bcs.vector(at),transactionDigest:ze,created:T.bcs.vector(T.bcs.tuple([at,xt])),mutated:T.bcs.vector(T.bcs.tuple([at,xt])),unwrapped:T.bcs.vector(T.bcs.tuple([at,xt])),deleted:T.bcs.vector(at),unwrappedThenDeleted:T.bcs.vector(at),wrapped:T.bcs.vector(at),gasObject:T.bcs.tuple([at,xt]),eventsDigest:T.bcs.option(ze),dependencies:T.bcs.vector(ze)}),qo=T.bcs.tuple([T.bcs.u64(),ze]),BA=T.bcs.enum("ObjectIn",{NotExist:null,Exist:T.bcs.tuple([qo,xt])}),YA=T.bcs.struct("AccumulatorAddress",{address:ne,ty:Cn}),wA=T.bcs.enum("AccumulatorOperation",{Merge:null,Split:null}),WA=T.bcs.enum("AccumulatorValue",{Integer:T.bcs.u64(),IntegerTuple:T.bcs.tuple([T.bcs.u64(),T.bcs.u64()]),EventDigest:T.bcs.vector(T.bcs.tuple([T.bcs.u64(),ze]))}),NA=T.bcs.struct("AccumulatorWriteV1",{address:YA,operation:wA,value:WA}),FA=T.bcs.enum("ObjectOut",{NotExist:null,ObjectWrite:T.bcs.tuple([ze,xt]),PackageWrite:qo,AccumulatorWriteV1:NA}),GA=T.bcs.enum("IDOperation",{None:null,Created:null,Deleted:null}),ZA=T.bcs.struct("EffectsObjectChange",{inputState:BA,outputState:FA,idOperation:GA}),SA=T.bcs.enum("UnchangedConsensusKind",{ReadOnlyRoot:qo,MutateConsensusStreamEnded:T.bcs.u64(),ReadConsensusStreamEnded:T.bcs.u64(),Cancelled:T.bcs.u64(),PerEpochConfig:null}),kA=T.bcs.struct("TransactionEffectsV2",{status:gr,executedEpoch:T.bcs.u64(),gasUsed:td,transactionDigest:ze,gasObjectIndex:T.bcs.option(T.bcs.u32()),eventsDigest:T.bcs.option(ze),dependencies:T.bcs.vector(ze),lamportVersion:T.bcs.u64(),changedObjects:T.bcs.vector(T.bcs.tuple([ne,ZA])),unchangedConsensusObjects:T.bcs.vector(T.bcs.tuple([ne,SA])),auxDataDigest:T.bcs.option(ze)}),nd=T.bcs.enum("TransactionEffects",{V1:TA,V2:kA});var ft=require("@mysten/bcs");function qn(i){switch(i){case"u8":return ft.bcs.u8();case"u16":return ft.bcs.u16();case"u32":return ft.bcs.u32();case"u64":return ft.bcs.u64();case"u128":return ft.bcs.u128();case"u256":return ft.bcs.u256();case"bool":return ft.bcs.bool();case"string":return ft.bcs.string();case"id":case"address":return ne}let n=i.match(/^(vector|option)<(.+)>$/);if(n){let[a,r]=n.slice(1);return a==="vector"?ft.bcs.vector(qn(r)):ft.bcs.option(qn(r))}throw new Error(`Invalid Pure type name: ${i}`)}var Ue=require("@mysten/bcs"),B={...Ue.bcs,U8:Ue.bcs.u8(),U16:Ue.bcs.u16(),U32:Ue.bcs.u32(),U64:Ue.bcs.u64(),U128:Ue.bcs.u128(),U256:Ue.bcs.u256(),ULEB128:Ue.bcs.uleb128(),Bool:Ue.bcs.bool(),String:Ue.bcs.string(),Address:ne,AppId:Mo,Argument:vt,CallArg:wo,Command:Fo,CompressedSignature:Ho,Data:$o,GasData:ko,Intent:Lo,IntentMessage:xo,IntentScope:Xo,IntentVersion:jo,MoveObject:_o,MoveObjectType:Do,MovePackage:Eo,MultiSig:Ec,MultiSigPkMap:Oo,MultiSigPublicKey:zo,Object:qc,ObjectArg:Yo,ObjectDigest:ze,Owner:xt,PasskeyAuthenticator:$c,ProgrammableMoveCall:No,ProgrammableTransaction:Go,PublicKey:Jo,SenderSignedData:_c,SenderSignedTransaction:Uo,SharedObjectRef:Bo,StructTag:dr,SuiObjectRef:at,TransactionData:Po,TransactionDataV1:Vo,TransactionEffects:nd,TransactionExpiration:So,TransactionKind:Zo,TypeOrigin:Qo,TypeTag:Cn,UpgradeInfo:Ko};var ad=require("@mysten/bcs"),id=require("@noble/hashes/blake2.js");function ea(i,n,a){let r=B.Address.serialize(i).toBytes(),o=B.TypeTag.serialize(n).toBytes(),s=B.u64().serialize(a.length).toBytes(),c=id.blake2b.create({dkLen:32});return c.update(new Uint8Array([240])),c.update(r),c.update(s),c.update(a),c.update(o),`0x${(0,ad.toHex)(c.digest().slice(0,32))}`}var p=require("valibot");function Tt(i){return(0,p.union)(Object.keys(i).map(n=>Da(n,(0,p.object)({[n]:i[n]}))))}function Da(i,n){return(0,p.pipe)((0,p.object)({...n.entries,$kind:(0,p.optional)((0,p.literal)(i))}),(0,p.transform)(a=>({...a,$kind:i})))}var Fn=(0,p.pipe)((0,p.string)(),(0,p.transform)(i=>V(i)),(0,p.check)(Oe)),qe=Fn,In=(0,p.string)(),Te=(0,p.pipe)((0,p.union)([(0,p.string)(),(0,p.pipe)((0,p.number)(),(0,p.integer)())]),(0,p.check)(i=>{try{return BigInt(i),BigInt(i)>=0&&BigInt(i)<=18446744073709551615n}catch{return!1}},"Invalid u64")),VA=(0,p.pipe)((0,p.number)(),(0,p.integer)(),(0,p.check)(i=>i>=0&&i<2**32,"Invalid u32")),Rt=(0,p.object)({objectId:Fn,version:Te,digest:(0,p.string)()}),ge=(0,p.union)([Da("GasCoin",(0,p.object)({GasCoin:(0,p.literal)(!0)})),Da("Input",(0,p.object)({Input:(0,p.pipe)((0,p.number)(),(0,p.integer)()),type:(0,p.optional)((0,p.union)([(0,p.literal)("pure"),(0,p.literal)("object"),(0,p.literal)("withdrawal")]))})),Da("Result",(0,p.object)({Result:(0,p.pipe)((0,p.number)(),(0,p.integer)())})),Da("NestedResult",(0,p.object)({NestedResult:(0,p.tuple)([(0,p.pipe)((0,p.number)(),(0,p.integer)()),(0,p.pipe)((0,p.number)(),(0,p.integer)())])}))]),PA=(0,p.object)({budget:(0,p.nullable)(Te),price:(0,p.nullable)(Te),owner:(0,p.nullable)(Fn),payment:(0,p.nullable)((0,p.array)(Rt))}),EI=(0,p.object)({address:(0,p.string)(),module:(0,p.string)(),name:(0,p.string)(),typeParams:(0,p.array)((0,p.string)())}),es=(0,p.union)([(0,p.object)({$kind:(0,p.literal)("address")}),(0,p.object)({$kind:(0,p.literal)("bool")}),(0,p.object)({$kind:(0,p.literal)("u8")}),(0,p.object)({$kind:(0,p.literal)("u16")}),(0,p.object)({$kind:(0,p.literal)("u32")}),(0,p.object)({$kind:(0,p.literal)("u64")}),(0,p.object)({$kind:(0,p.literal)("u128")}),(0,p.object)({$kind:(0,p.literal)("u256")}),(0,p.object)({$kind:(0,p.literal)("unknown")}),(0,p.object)({$kind:(0,p.literal)("vector"),vector:(0,p.lazy)(()=>es)}),(0,p.object)({$kind:(0,p.literal)("datatype"),datatype:(0,p.object)({typeName:(0,p.string)(),typeParameters:(0,p.array)((0,p.lazy)(()=>es))})}),(0,p.object)({$kind:(0,p.literal)("typeParameter"),index:(0,p.pipe)((0,p.number)(),(0,p.integer)())})]),XA=(0,p.object)({reference:(0,p.nullable)((0,p.union)([(0,p.literal)("mutable"),(0,p.literal)("immutable"),(0,p.literal)("unknown")])),body:es}),jA=(0,p.object)({package:qe,module:(0,p.string)(),function:(0,p.string)(),typeArguments:(0,p.array)((0,p.string)()),arguments:(0,p.array)(ge),_argumentTypes:(0,p.optional)((0,p.nullable)((0,p.array)(XA)))}),MA=(0,p.object)({name:(0,p.string)(),inputs:(0,p.record)((0,p.string)(),(0,p.union)([ge,(0,p.array)(ge)])),data:(0,p.record)((0,p.string)(),(0,p.unknown)())}),LA=Tt({MoveCall:jA,TransferObjects:(0,p.object)({objects:(0,p.array)(ge),address:ge}),SplitCoins:(0,p.object)({coin:ge,amounts:(0,p.array)(ge)}),MergeCoins:(0,p.object)({destination:ge,sources:(0,p.array)(ge)}),Publish:(0,p.object)({modules:(0,p.array)(In),dependencies:(0,p.array)(qe)}),MakeMoveVec:(0,p.object)({type:(0,p.nullable)((0,p.string)()),elements:(0,p.array)(ge)}),Upgrade:(0,p.object)({modules:(0,p.array)(In),dependencies:(0,p.array)(qe),package:qe,ticket:ge}),$Intent:MA}),rd=Tt({ImmOrOwnedObject:Rt,SharedObject:(0,p.object)({objectId:qe,initialSharedVersion:Te,mutable:(0,p.boolean)()}),Receiving:Rt}),xA=Tt({MaxAmountU64:Te}),HA=Tt({Balance:(0,p.string)()}),JA=Tt({Sender:(0,p.literal)(!0),Sponsor:(0,p.literal)(!0)}),ts=(0,p.object)({reservation:xA,typeArg:HA,withdrawFrom:JA}),OA=Tt({Object:rd,Pure:(0,p.object)({bytes:In}),UnresolvedPure:(0,p.object)({value:(0,p.unknown)()}),UnresolvedObject:(0,p.object)({objectId:qe,version:(0,p.optional)((0,p.nullable)(Te)),digest:(0,p.optional)((0,p.nullable)((0,p.string)())),initialSharedVersion:(0,p.optional)((0,p.nullable)(Te)),mutable:(0,p.optional)((0,p.nullable)((0,p.boolean)()))}),FundsWithdrawal:ts}),ns=Tt({Object:rd,Pure:(0,p.object)({bytes:In})}),as=(0,p.object)({minEpoch:(0,p.nullable)(Te),maxEpoch:(0,p.nullable)(Te),minTimestamp:(0,p.nullable)(Te),maxTimestamp:(0,p.nullable)(Te),chain:(0,p.string)(),nonce:VA}),is=Tt({None:(0,p.literal)(!0),Epoch:Te,ValidDuring:as}),ta=(0,p.object)({version:(0,p.literal)(2),sender:(0,p.nullish)(Fn),expiration:(0,p.nullish)(is),gasData:PA,inputs:(0,p.array)(OA),commands:(0,p.array)(LA)});var $t=require("@mysten/bcs"),od=require("valibot"),zA=V("0xacc"),UA=st.parseFromStr("0x2::accumulator::Key<0x2::balance::Balance<0x2::sui::SUI>>"),sd=new Uint8Array([172,172,172,172,172,172,172,172,172,172,172,172,172,172,172,172,172,172,172,172]);function rs(i){return(0,$t.fromBase58)(i).slice(12,32).every((n,a)=>n===sd[a])}function DA(i,n){let a=(0,$t.fromHex)(ea(zA,UA,B.Address.serialize(i).toBytes()).slice(2)),r=(0,$t.fromBase58)(n);if(r.length!==32)throw new Error(`Invalid chain identifier length: expected 32 bytes, got ${r.length}`);let o=new Uint8Array(32);for(let s=0;s<32;s++)o[s]=a[s]^r[s];return`0x${(0,$t.toHex)(o)}`}function cd(i,n,a,r){let o=new Uint8Array(32),s=new DataView(o.buffer);s.setBigUint64(0,i,!0);let c=Number(r);if(!Number.isSafeInteger(c)||c<0||c>4294967295)throw new Error(`Epoch ${r} out of u32 range for coin reservation digest`);return s.setUint32(8,c,!0),o.set(sd,12),(0,od.parse)(Rt,{objectId:DA(n,a),version:"0",digest:(0,$t.toBase58)(o)})}var hn=require("@mysten/bcs"),b=require("valibot"),os=(0,b.object)({digest:(0,b.string)(),objectId:(0,b.string)(),version:(0,b.union)([(0,b.pipe)((0,b.number)(),(0,b.integer)()),(0,b.string)(),(0,b.bigint)()])}),QA=Tt({ImmOrOwned:os,Shared:(0,b.object)({objectId:qe,initialSharedVersion:Te,mutable:(0,b.boolean)()}),Receiving:os}),dd=Tt({Object:QA,Pure:(0,b.array)((0,b.pipe)((0,b.number)(),(0,b.integer)()))}),ld=(0,b.union)([(0,b.object)({kind:(0,b.literal)("Input"),index:(0,b.pipe)((0,b.number)(),(0,b.integer)()),value:(0,b.unknown)(),type:(0,b.optional)((0,b.literal)("object"))}),(0,b.object)({kind:(0,b.literal)("Input"),index:(0,b.pipe)((0,b.number)(),(0,b.integer)()),value:(0,b.unknown)(),type:(0,b.literal)("pure")})]),KA=(0,b.union)([(0,b.object)({Epoch:(0,b.pipe)((0,b.number)(),(0,b.integer)())}),(0,b.object)({None:(0,b.nullable)((0,b.literal)(!0))})]),gd=(0,b.pipe)((0,b.union)([(0,b.number)(),(0,b.string)(),(0,b.bigint)()]),(0,b.check)(i=>{if(!["string","number","bigint"].includes(typeof i))return!1;try{return BigInt(i),!0}catch{return!1}})),ss=(0,b.union)([(0,b.object)({bool:(0,b.nullable)((0,b.literal)(!0))}),(0,b.object)({u8:(0,b.nullable)((0,b.literal)(!0))}),(0,b.object)({u64:(0,b.nullable)((0,b.literal)(!0))}),(0,b.object)({u128:(0,b.nullable)((0,b.literal)(!0))}),(0,b.object)({address:(0,b.nullable)((0,b.literal)(!0))}),(0,b.object)({signer:(0,b.nullable)((0,b.literal)(!0))}),(0,b.object)({vector:(0,b.lazy)(()=>ss)}),(0,b.object)({struct:(0,b.lazy)(()=>EA)}),(0,b.object)({u16:(0,b.nullable)((0,b.literal)(!0))}),(0,b.object)({u32:(0,b.nullable)((0,b.literal)(!0))}),(0,b.object)({u256:(0,b.nullable)((0,b.literal)(!0))})]),EA=(0,b.object)({address:(0,b.string)(),module:(0,b.string)(),name:(0,b.string)(),typeParams:(0,b.array)(ss)}),_A=(0,b.object)({budget:(0,b.optional)(gd),price:(0,b.optional)(gd),payment:(0,b.optional)((0,b.array)(os)),owner:(0,b.optional)((0,b.string)())}),$A=[ld,(0,b.object)({kind:(0,b.literal)("GasCoin")}),(0,b.object)({kind:(0,b.literal)("Result"),index:(0,b.pipe)((0,b.number)(),(0,b.integer)())}),(0,b.object)({kind:(0,b.literal)("NestedResult"),index:(0,b.pipe)((0,b.number)(),(0,b.integer)()),resultIndex:(0,b.pipe)((0,b.number)(),(0,b.integer)())})],tn=(0,b.union)([...$A]),qA=(0,b.object)({kind:(0,b.literal)("MoveCall"),target:(0,b.pipe)((0,b.string)(),(0,b.check)(i=>i.split("::").length===3)),typeArguments:(0,b.array)((0,b.string)()),arguments:(0,b.array)(tn)}),eu=(0,b.object)({kind:(0,b.literal)("TransferObjects"),objects:(0,b.array)(tn),address:tn}),tu=(0,b.object)({kind:(0,b.literal)("SplitCoins"),coin:tn,amounts:(0,b.array)(tn)}),nu=(0,b.object)({kind:(0,b.literal)("MergeCoins"),destination:tn,sources:(0,b.array)(tn)}),au=(0,b.object)({kind:(0,b.literal)("MakeMoveVec"),type:(0,b.union)([(0,b.object)({Some:ss}),(0,b.object)({None:(0,b.nullable)((0,b.literal)(!0))})]),objects:(0,b.array)(tn)}),iu=(0,b.union)([qA,eu,tu,nu,(0,b.object)({kind:(0,b.literal)("Publish"),modules:(0,b.array)((0,b.array)((0,b.pipe)((0,b.number)(),(0,b.integer)()))),dependencies:(0,b.array)((0,b.string)())}),(0,b.object)({kind:(0,b.literal)("Upgrade"),modules:(0,b.array)((0,b.array)((0,b.pipe)((0,b.number)(),(0,b.integer)()))),dependencies:(0,b.array)((0,b.string)()),packageId:(0,b.string)(),ticket:tn}),au]),oh=(0,b.object)({version:(0,b.literal)(1),sender:(0,b.optional)((0,b.string)()),expiration:(0,b.nullish)(KA),gasConfig:_A,inputs:(0,b.array)(ld),transactions:(0,b.array)(iu)});function Ad(i){let n=i.inputs.map((a,r)=>{if(a.Object)return{kind:"Input",index:r,value:{Object:a.Object.ImmOrOwnedObject?{ImmOrOwned:a.Object.ImmOrOwnedObject}:a.Object.Receiving?{Receiving:{digest:a.Object.Receiving.digest,version:a.Object.Receiving.version,objectId:a.Object.Receiving.objectId}}:{Shared:{mutable:a.Object.SharedObject.mutable,initialSharedVersion:a.Object.SharedObject.initialSharedVersion,objectId:a.Object.SharedObject.objectId}}},type:"object"};if(a.Pure)return{kind:"Input",index:r,value:{Pure:Array.from((0,hn.fromBase64)(a.Pure.bytes))},type:"pure"};if(a.UnresolvedPure)return{kind:"Input",type:"pure",index:r,value:a.UnresolvedPure.value};if(a.UnresolvedObject)return{kind:"Input",type:"object",index:r,value:a.UnresolvedObject.objectId};throw new Error("Invalid input")});return{version:1,sender:i.sender??void 0,expiration:i.expiration?.$kind==="Epoch"?{Epoch:Number(i.expiration.Epoch)}:i.expiration?{None:!0}:null,gasConfig:{owner:i.gasData.owner??void 0,budget:i.gasData.budget??void 0,price:i.gasData.price??void 0,payment:i.gasData.payment??void 0},inputs:n,transactions:i.commands.map(a=>{if(a.MakeMoveVec)return{kind:"MakeMoveVec",type:a.MakeMoveVec.type===null?{None:!0}:{Some:st.parseFromStr(a.MakeMoveVec.type)},objects:a.MakeMoveVec.elements.map(r=>qt(r,n))};if(a.MergeCoins)return{kind:"MergeCoins",destination:qt(a.MergeCoins.destination,n),sources:a.MergeCoins.sources.map(r=>qt(r,n))};if(a.MoveCall)return{kind:"MoveCall",target:`${a.MoveCall.package}::${a.MoveCall.module}::${a.MoveCall.function}`,typeArguments:a.MoveCall.typeArguments,arguments:a.MoveCall.arguments.map(r=>qt(r,n))};if(a.Publish)return{kind:"Publish",modules:a.Publish.modules.map(r=>Array.from((0,hn.fromBase64)(r))),dependencies:a.Publish.dependencies};if(a.SplitCoins)return{kind:"SplitCoins",coin:qt(a.SplitCoins.coin,n),amounts:a.SplitCoins.amounts.map(r=>qt(r,n))};if(a.TransferObjects)return{kind:"TransferObjects",objects:a.TransferObjects.objects.map(r=>qt(r,n)),address:qt(a.TransferObjects.address,n)};if(a.Upgrade)return{kind:"Upgrade",modules:a.Upgrade.modules.map(r=>Array.from((0,hn.fromBase64)(r))),dependencies:a.Upgrade.dependencies,packageId:a.Upgrade.package,ticket:qt(a.Upgrade.ticket,n)};throw new Error(`Unknown transaction ${Object.keys(a)}`)})}}function qt(i,n){if(i.$kind==="GasCoin")return{kind:"GasCoin"};if(i.$kind==="Result")return{kind:"Result",index:i.Result};if(i.$kind==="NestedResult")return{kind:"NestedResult",index:i.NestedResult[0],resultIndex:i.NestedResult[1]};if(i.$kind==="Input")return n[i.Input];throw new Error(`Invalid argument ${Object.keys(i)}`)}function ud(i){return(0,b.parse)(ta,{version:2,sender:i.sender??null,expiration:i.expiration?"Epoch"in i.expiration?{Epoch:i.expiration.Epoch}:{None:!0}:null,gasData:{owner:i.gasConfig.owner??null,budget:i.gasConfig.budget?.toString()??null,price:i.gasConfig.price?.toString()??null,payment:i.gasConfig.payment?.map(n=>({digest:n.digest,objectId:n.objectId,version:n.version.toString()}))??null},inputs:i.inputs.map(n=>{if(n.kind==="Input"){if((0,b.is)(dd,n.value)){let a=(0,b.parse)(dd,n.value);if(a.Object){if(a.Object.ImmOrOwned)return{Object:{ImmOrOwnedObject:{objectId:a.Object.ImmOrOwned.objectId,version:String(a.Object.ImmOrOwned.version),digest:a.Object.ImmOrOwned.digest}}};if(a.Object.Shared)return{Object:{SharedObject:{mutable:a.Object.Shared.mutable??null,initialSharedVersion:a.Object.Shared.initialSharedVersion,objectId:a.Object.Shared.objectId}}};if(a.Object.Receiving)return{Object:{Receiving:{digest:a.Object.Receiving.digest,version:String(a.Object.Receiving.version),objectId:a.Object.Receiving.objectId}}};throw new Error("Invalid object input")}return{Pure:{bytes:(0,hn.toBase64)(new Uint8Array(a.Pure))}}}return n.type==="object"?{UnresolvedObject:{objectId:n.value}}:{UnresolvedPure:{value:n.value}}}throw new Error("Invalid input")}),commands:i.transactions.map(n=>{switch(n.kind){case"MakeMoveVec":return{MakeMoveVec:{type:"Some"in n.type?st.tagToString(n.type.Some):null,elements:n.objects.map(a=>en(a))}};case"MergeCoins":return{MergeCoins:{destination:en(n.destination),sources:n.sources.map(a=>en(a))}};case"MoveCall":{let[a,r,o]=n.target.split("::");return{MoveCall:{package:a,module:r,function:o,typeArguments:n.typeArguments,arguments:n.arguments.map(s=>en(s))}}}case"Publish":return{Publish:{modules:n.modules.map(a=>(0,hn.toBase64)(Uint8Array.from(a))),dependencies:n.dependencies}};case"SplitCoins":return{SplitCoins:{coin:en(n.coin),amounts:n.amounts.map(a=>en(a))}};case"TransferObjects":return{TransferObjects:{objects:n.objects.map(a=>en(a)),address:en(n.address)}};case"Upgrade":return{Upgrade:{modules:n.modules.map(a=>(0,hn.toBase64)(Uint8Array.from(a))),dependencies:n.dependencies,package:n.packageId,ticket:en(n.ticket)}}}throw new Error(`Unknown transaction ${Object.keys(n)}`)})})}function en(i){switch(i.kind){case"GasCoin":return{GasCoin:!0};case"Result":return{Result:i.index};case"NestedResult":return{NestedResult:[i.index,i.resultIndex]};case"Input":return{Input:i.index}}}var ru=require("valibot");function na(i){if(typeof i=="string")return V(i);if(i.Object)return i.Object.ImmOrOwnedObject?V(i.Object.ImmOrOwnedObject.objectId):i.Object.Receiving?V(i.Object.Receiving.objectId):V(i.Object.SharedObject.objectId);if(i.UnresolvedObject)return V(i.UnresolvedObject.objectId)}function pd(i,n,a){let r=o=>{switch(o.$kind){case"Input":{let s=n.get(o.Input);if(s===void 0)throw new Error(`Input ${o.Input} not found in input mapping`);return{...o,Input:s}}case"Result":{let s=a.get(o.Result);return s!==void 0?{...o,Result:s}:o}case"NestedResult":{let s=a.get(o.NestedResult[0]);return s!==void 0?{...o,NestedResult:[s,o.NestedResult[1]]}:o}default:return o}};switch(i.$kind){case"MoveCall":i.MoveCall.arguments=i.MoveCall.arguments.map(r);break;case"TransferObjects":i.TransferObjects.objects=i.TransferObjects.objects.map(r),i.TransferObjects.address=r(i.TransferObjects.address);break;case"SplitCoins":i.SplitCoins.coin=r(i.SplitCoins.coin),i.SplitCoins.amounts=i.SplitCoins.amounts.map(r);break;case"MergeCoins":i.MergeCoins.destination=r(i.MergeCoins.destination),i.MergeCoins.sources=i.MergeCoins.sources.map(r);break;case"MakeMoveVec":i.MakeMoveVec.elements=i.MakeMoveVec.elements.map(r);break;case"Upgrade":i.Upgrade.ticket=r(i.Upgrade.ticket);break;case"$Intent":{let o=i.$Intent.inputs;i.$Intent.inputs={};for(let[s,c]of Object.entries(o))i.$Intent.inputs[s]=Array.isArray(c)?c.map(r):r(c);break}case"Publish":break}}var md=require("@noble/hashes/blake2.js");function bd(i,n){let a=Array.from(`${i}::`).map(o=>o.charCodeAt(0)),r=new Uint8Array(a.length+n.length);return r.set(a),r.set(n,a.length),(0,md.blake2b)(r,{dkLen:32})}var Cd=require("@mysten/bcs"),Qa=require("valibot");function yd(i){return V(i).replace("0x","")}var ct=class Gn{static fromKindBytes(n){let a=B.TransactionKind.parse(n).ProgrammableTransaction;if(!a)throw new Error("Unable to deserialize from bytes.");return Gn.restore({version:2,sender:null,expiration:null,gasData:{budget:null,owner:null,payment:null,price:null},inputs:a.inputs,commands:a.commands})}static fromBytes(n){let a=B.TransactionData.parse(n)?.V1,r=a.kind.ProgrammableTransaction;if(!a||!r)throw new Error("Unable to deserialize from bytes.");return Gn.restore({version:2,sender:a.sender,expiration:a.expiration,gasData:a.gasData,inputs:r.inputs,commands:r.commands})}static restore(n){return n.version===2?new Gn((0,Qa.parse)(ta,n)):new Gn((0,Qa.parse)(ta,ud(n)))}static getDigestFromBytes(n){return(0,Cd.toBase58)(bd("TransactionData",n))}constructor(n){this.version=2,this.sender=n?.sender??null,this.expiration=n?.expiration??null,this.inputs=n?.inputs??[],this.commands=n?.commands??[],this.gasData=n?.gasData??{budget:null,price:null,owner:null,payment:null}}build({maxSizeBytes:n=1/0,overrides:a,onlyTransactionKind:r}={}){let o=this.inputs,s=this.commands,c={ProgrammableTransaction:{inputs:o,commands:s}};if(r)return B.TransactionKind.serialize(c,{maxSize:n}).toBytes();let d=a?.expiration??this.expiration,g=a?.sender??this.sender,l={...this.gasData,...a?.gasData};if(!g)throw new Error("Missing transaction sender");if(!l.budget)throw new Error("Missing gas budget");if(!l.payment)throw new Error("Missing gas payment");if(!l.price)throw new Error("Missing gas price");let A={sender:yd(g),expiration:d||{None:!0},gasData:{payment:l.payment,owner:yd(this.gasData.owner??g),price:BigInt(l.price),budget:BigInt(l.budget)},kind:{ProgrammableTransaction:{inputs:o,commands:s}}};return B.TransactionData.serialize({V1:A},{maxSize:n}).toBytes()}addInput(n,a){let r=this.inputs.length;return this.inputs.push(a),{Input:r,type:n,$kind:"Input"}}getInputUses(n,a){this.mapArguments((r,o)=>(r.$kind==="Input"&&r.Input===n&&a(r,o),r))}mapCommandArguments(n,a){let r=this.commands[n];switch(r.$kind){case"MoveCall":r.MoveCall.arguments=r.MoveCall.arguments.map(s=>a(s,r,n));break;case"TransferObjects":r.TransferObjects.objects=r.TransferObjects.objects.map(s=>a(s,r,n)),r.TransferObjects.address=a(r.TransferObjects.address,r,n);break;case"SplitCoins":r.SplitCoins.coin=a(r.SplitCoins.coin,r,n),r.SplitCoins.amounts=r.SplitCoins.amounts.map(s=>a(s,r,n));break;case"MergeCoins":r.MergeCoins.destination=a(r.MergeCoins.destination,r,n),r.MergeCoins.sources=r.MergeCoins.sources.map(s=>a(s,r,n));break;case"MakeMoveVec":r.MakeMoveVec.elements=r.MakeMoveVec.elements.map(s=>a(s,r,n));break;case"Upgrade":r.Upgrade.ticket=a(r.Upgrade.ticket,r,n);break;case"$Intent":let o=r.$Intent.inputs;r.$Intent.inputs={};for(let[s,c]of Object.entries(o))r.$Intent.inputs[s]=Array.isArray(c)?c.map(d=>a(d,r,n)):a(c,r,n);break;case"Publish":break;default:throw new Error(`Unexpected transaction kind: ${r.$kind}`)}}mapArguments(n){for(let a of this.commands.keys())this.mapCommandArguments(a,n)}replaceCommand(n,a,r=n){if(!Array.isArray(a)){this.commands[n]=a;return}let o=a.length-1;this.commands.splice(n,1,...structuredClone(a)),this.mapArguments((s,c,d)=>{if(d<n+a.length)return s;if(typeof r!="number"&&(s.$kind==="Result"&&s.Result===n||s.$kind==="NestedResult"&&s.NestedResult[0]===n)){if(!("NestedResult"in s)||s.NestedResult[1]===0)return(0,Qa.parse)(ge,structuredClone(r));throw new Error(`Cannot replace command ${n} with a specific result type: NestedResult[${n}, ${s.NestedResult[1]}] references a nested element that cannot be mapped to the replacement result`)}switch(s.$kind){case"Result":s.Result===n&&typeof r=="number"&&(s.Result=r),s.Result>n&&(s.Result+=o);break;case"NestedResult":if(s.NestedResult[0]===n&&typeof r=="number")return{$kind:"NestedResult",NestedResult:[r,s.NestedResult[1]]};s.NestedResult[0]>n&&(s.NestedResult[0]+=o);break}return s})}replaceCommandWithTransaction(n,a,r){if(r.$kind!=="Result"&&r.$kind!=="NestedResult")throw new Error("Result must be of kind Result or NestedResult");this.insertTransaction(n,a),this.replaceCommand(n+a.commands.length,[],"Result"in r?{NestedResult:[r.Result+n,0]}:{NestedResult:[r.NestedResult[0]+n,r.NestedResult[1]]})}insertTransaction(n,a){let r=new Map,o=new Map;for(let d=0;d<a.inputs.length;d++){let g=a.inputs[d],l=na(g),A=-1;if(l!==void 0&&(A=this.inputs.findIndex(u=>na(u)===l),A!==-1&&this.inputs[A].Object?.SharedObject&&g.Object?.SharedObject&&(this.inputs[A].Object.SharedObject.mutable=this.inputs[A].Object.SharedObject.mutable||g.Object.SharedObject.mutable)),A!==-1)r.set(d,A);else{let u=this.inputs.length;this.inputs.push(g),r.set(d,u)}}for(let d=0;d<a.commands.length;d++)o.set(d,n+d);let s=[];for(let d=0;d<a.commands.length;d++){let g=structuredClone(a.commands[d]);pd(g,r,o),s.push(g)}this.commands.splice(n,0,...s);let c=s.length;c>0&&this.mapArguments((d,g,l)=>{if(l>=n&&l<n+s.length)return d;switch(d.$kind){case"Result":d.Result>=n&&(d.Result+=c);break;case"NestedResult":d.NestedResult[0]>=n&&(d.NestedResult[0]+=c);break}return d})}getDigest(){let n=this.build({onlyTransactionKind:!1});return Gn.getDigestFromBytes(n)}snapshot(){return(0,Qa.parse)(ta,this)}shallowClone(){return new Gn({version:this.version,sender:this.sender,expiration:this.expiration,gasData:{...this.gasData},inputs:[...this.inputs],commands:[...this.commands]})}applyResolvedData(n){this.sender||(this.sender=n.sender??null),this.expiration||(this.expiration=n.expiration??null),this.gasData.budget||(this.gasData.budget=n.gasData.budget),this.gasData.owner||(this.gasData.owner=n.gasData.owner??null),this.gasData.payment||(this.gasData.payment=n.gasData.payment),this.gasData.price||(this.gasData.price=n.gasData.price);for(let a=0;a<this.inputs.length;a++){let r=this.inputs[a],o=n.inputs[a];switch(r.$kind){case"UnresolvedPure":if(o.$kind!=="Pure")throw new Error(`Expected input at index ${a} to resolve to a Pure argument, but got ${JSON.stringify(o)}`);this.inputs[a]=o;break;case"UnresolvedObject":if(o.$kind!=="Object")throw new Error(`Expected input at index ${a} to resolve to an Object argument, but got ${JSON.stringify(o)}`);if(o.Object.$kind==="ImmOrOwnedObject"||o.Object.$kind==="Receiving"){let s=r.UnresolvedObject,c=o.Object.ImmOrOwnedObject??o.Object.Receiving;if(V(s.objectId)!==V(c.objectId)||s.version!=null&&s.version!==c.version||s.digest!=null&&s.digest!==c.digest||s.mutable!=null||s.initialSharedVersion!=null)throw new Error(`Input at index ${a} did not match unresolved object. ${JSON.stringify(s)} is not compatible with ${JSON.stringify(c)}`)}else if(o.Object.$kind==="SharedObject"){let s=r.UnresolvedObject,c=o.Object.SharedObject;if(V(s.objectId)!==V(c.objectId)||s.initialSharedVersion!=null&&s.initialSharedVersion!==c.initialSharedVersion||s.mutable!=null&&s.mutable!==c.mutable||s.version!=null||s.digest!=null)throw new Error(`Input at index ${a} did not match unresolved object. ${JSON.stringify(s)} is not compatible with ${JSON.stringify(c)}`)}else throw new Error(`Input at index ${a} resolved to an unexpected Object kind: ${JSON.stringify(o.Object)}`);this.inputs[a]=o;break}}}};var cs=require("@mysten/bcs"),Bt=require("valibot");var Be={MoveCall(i){let[n,a="",r=""]="target"in i?i.target.split("::"):[i.package,i.module,i.function];return{$kind:"MoveCall",MoveCall:{package:n,module:a,function:r,typeArguments:i.typeArguments??[],arguments:i.arguments??[]}}},TransferObjects(i,n){return{$kind:"TransferObjects",TransferObjects:{objects:i.map(a=>(0,Bt.parse)(ge,a)),address:(0,Bt.parse)(ge,n)}}},SplitCoins(i,n){return{$kind:"SplitCoins",SplitCoins:{coin:(0,Bt.parse)(ge,i),amounts:n.map(a=>(0,Bt.parse)(ge,a))}}},MergeCoins(i,n){return{$kind:"MergeCoins",MergeCoins:{destination:(0,Bt.parse)(ge,i),sources:n.map(a=>(0,Bt.parse)(ge,a))}}},Publish({modules:i,dependencies:n}){return{$kind:"Publish",Publish:{modules:i.map(a=>typeof a=="string"?a:(0,cs.toBase64)(new Uint8Array(a))),dependencies:n.map(a=>Lt(a))}}},Upgrade({modules:i,dependencies:n,package:a,ticket:r}){return{$kind:"Upgrade",Upgrade:{modules:i.map(o=>typeof o=="string"?o:(0,cs.toBase64)(new Uint8Array(o))),dependencies:n.map(o=>Lt(o)),package:a,ticket:(0,Bt.parse)(ge,r)}}},MakeMoveVec({type:i,elements:n}){return{$kind:"MakeMoveVec",MakeMoveVec:{type:i??null,elements:n.map(a=>(0,Bt.parse)(ge,a))}}},Intent({name:i,inputs:n={},data:a={}}){return{$kind:"$Intent",$Intent:{name:i,inputs:Object.fromEntries(Object.entries(n).map(([r,o])=>[r,Array.isArray(o)?o.map(s=>(0,Bt.parse)(ge,s)):(0,Bt.parse)(ge,o)])),data:a}}}};var w=require("valibot");function Ka(i){return(0,w.union)(Object.entries(i).map(([n,a])=>(0,w.object)({[n]:a})))}var Yt=Ka({GasCoin:(0,w.literal)(!0),Input:(0,w.pipe)((0,w.number)(),(0,w.integer)()),Result:(0,w.pipe)((0,w.number)(),(0,w.integer)()),NestedResult:(0,w.tuple)([(0,w.pipe)((0,w.number)(),(0,w.integer)()),(0,w.pipe)((0,w.number)(),(0,w.integer)())])}),ou=(0,w.object)({budget:(0,w.nullable)(Te),price:(0,w.nullable)(Te),owner:(0,w.nullable)(Fn),payment:(0,w.nullable)((0,w.array)(Rt))}),su=(0,w.object)({package:qe,module:(0,w.string)(),function:(0,w.string)(),typeArguments:(0,w.array)((0,w.string)()),arguments:(0,w.array)(Yt)}),cu=(0,w.object)({name:(0,w.string)(),inputs:(0,w.record)((0,w.string)(),(0,w.union)([Yt,(0,w.array)(Yt)])),data:(0,w.record)((0,w.string)(),(0,w.unknown)())}),du=Ka({MoveCall:su,TransferObjects:(0,w.object)({objects:(0,w.array)(Yt),address:Yt}),SplitCoins:(0,w.object)({coin:Yt,amounts:(0,w.array)(Yt)}),MergeCoins:(0,w.object)({destination:Yt,sources:(0,w.array)(Yt)}),Publish:(0,w.object)({modules:(0,w.array)(In),dependencies:(0,w.array)(qe)}),MakeMoveVec:(0,w.object)({type:(0,w.nullable)((0,w.string)()),elements:(0,w.array)(Yt)}),Upgrade:(0,w.object)({modules:(0,w.array)(In),dependencies:(0,w.array)(qe),package:qe,ticket:Yt}),$Intent:cu}),gu=Ka({Object:Ka({ImmOrOwnedObject:Rt,SharedObject:(0,w.object)({objectId:qe,initialSharedVersion:Te,mutable:(0,w.boolean)()}),Receiving:Rt}),Pure:(0,w.object)({bytes:In}),UnresolvedPure:(0,w.object)({value:(0,w.unknown)()}),UnresolvedObject:(0,w.object)({objectId:qe,version:(0,w.optional)((0,w.nullable)(Te)),digest:(0,w.optional)((0,w.nullable)((0,w.string)())),initialSharedVersion:(0,w.optional)((0,w.nullable)(Te)),mutable:(0,w.optional)((0,w.nullable)((0,w.boolean)()))}),FundsWithdrawal:ts}),lu=Ka({None:(0,w.literal)(!0),Epoch:Te,ValidDuring:as}),Id=(0,w.object)({version:(0,w.literal)(2),sender:(0,w.nullish)(Fn),expiration:(0,w.nullish)(lu),gasData:ou,inputs:(0,w.array)(gu),commands:(0,w.array)(du),digest:(0,w.optional)((0,w.nullable)((0,w.string)()))});var hd=require("@mysten/bcs");function Au(i){return{$kind:"Pure",Pure:{bytes:i instanceof Uint8Array?(0,hd.toBase64)(i):i.toBase64()}}}var Ie={Pure:Au,ObjectRef({objectId:i,digest:n,version:a}){return{$kind:"Object",Object:{$kind:"ImmOrOwnedObject",ImmOrOwnedObject:{digest:n,version:a,objectId:V(i)}}}},SharedObjectRef({objectId:i,mutable:n,initialSharedVersion:a}){return{$kind:"Object",Object:{$kind:"SharedObject",SharedObject:{mutable:n,initialSharedVersion:a,objectId:V(i)}}}},ReceivingRef({objectId:i,digest:n,version:a}){return{$kind:"Object",Object:{$kind:"Receiving",Receiving:{digest:n,version:a,objectId:V(i)}}}},FundsWithdrawal({reservation:i,typeArg:n,withdrawFrom:a}){return{$kind:"FundsWithdrawal",FundsWithdrawal:{reservation:i,typeArg:n,withdrawFrom:a}}}};var vd=class extends Error{},fd=class extends vd{constructor(i,n){super(i,{cause:n?.cause}),this.executionError=n?.executionError}},ds=class aa extends vd{constructor(n,a){super(a),this.code=n}static fromResponse(n,a){switch(n.code){case"notExists":return new aa(n.code,`Object ${n.object_id} does not exist`);case"dynamicFieldNotFound":return new aa(n.code,`Dynamic field not found for object ${n.parent_object_id}`);case"deleted":return new aa(n.code,`Object ${n.object_id} has been deleted`);case"displayError":return new aa(n.code,`Display error: ${n.error}`);default:return new aa(n.code,`Unknown error while loading object${a?` ${a}`:""}`)}}};var uu=BigInt(1e9),Ea="0x0000000000000000000000000000000000000000000000000000000000000001",nn="0x0000000000000000000000000000000000000000000000000000000000000002",gs="0x0000000000000000000000000000000000000000000000000000000000000003",ia="0x0000000000000000000000000000000000000000000000000000000000000006";var lr=`${nn}::sui::SUI`,Ar="0x0000000000000000000000000000000000000000000000000000000000000005",ls="0x0000000000000000000000000000000000000000000000000000000000000008";var As="0x0000000000000000000000000000000000000000000000000000000000000403";function Rd(i){let n=i.split("::");if(n.length!==3)throw new Error(`Invalid type name format: ${i}`);return{package:n[0],module:n[1],name:n[2]}}function Td(i){if(i.body.$kind!=="datatype")return!1;let{package:n,module:a,name:r}=Rd(i.body.datatype.typeName);return V(n)===nn&&a==="tx_context"&&r==="TxContext"}function ur(i){switch(i.$kind){case"address":return B.Address;case"bool":return B.Bool;case"u8":return B.U8;case"u16":return B.U16;case"u32":return B.U32;case"u64":return B.U64;case"u128":return B.U128;case"u256":return B.U256;case"vector":{if(i.vector.$kind==="u8")return B.byteVector().transform({input:a=>typeof a=="string"?new TextEncoder().encode(a):a,output:a=>a});let n=ur(i.vector);return n?B.vector(n):null}case"datatype":{let{package:n,module:a,name:r}=Rd(i.datatype.typeName),o=V(n);if(o===Ea){if(a==="ascii"&&r==="String")return B.String;if(a==="string"&&r==="String")return B.String;if(a==="option"&&r==="Option"){let s=ur(i.datatype.typeParameters[0]);return s?B.vector(s):null}}return o===nn&&a==="object"&&r==="ID"?B.Address:null}case"typeParameter":case"unknown":return null}}var Bd=require("@mysten/utils"),pu=50,mu=1000n,bu=5e10;function us(i,n=1n){let a=mu*BigInt(n),r=BigInt(i.computationCost)+a,o=r+BigInt(i.storageCost)-BigInt(i.storageRebate);return String(o>r?o:r)}function yu(i){if(!i.client)throw new Error("No sui client passed to Transaction#build, but transaction data was not sufficient to build offline.");return i.client}async function pr(i,n,a){let r=yu(n),o=!n.onlyTransactionKind&&!i.gasData.price,s=!n.onlyTransactionKind&&!i.gasData.payment,c=i.gasData.owner??i.sender,d=!1,g=0n;i.mapArguments(Y=>(Y.$kind==="GasCoin"&&(d=!0),Y));let l=c?V(c):null;for(let Y of i.inputs){if(Y.$kind!=="FundsWithdrawal"||!l||oe(Y.FundsWithdrawal.typeArg.Balance)!==lr)continue;let h=Y.FundsWithdrawal.withdrawFrom.Sender?i.sender:c;h&&V(h)===l&&Y.FundsWithdrawal.reservation.$kind==="MaxAmountU64"&&(g+=BigInt(Y.FundsWithdrawal.reservation.MaxAmountU64))}let A=!n.onlyTransactionKind&&!i.expiration&&!i.gasData.budget,u=o||s&&d||A,m=s&&d||A,[,y,v,C,R]=await Promise.all([fu(i,r),u?r.core.getCurrentSystemState():null,s&&c?r.core.getBalance({owner:c}):null,s&&c?r.core.listCoins({owner:c,coinType:lr}):null,m?r.core.getChainIdentifier():null]);if(await vu(i,r),!n.onlyTransactionKind){let Y=y?.systemState??null,h=R?.chainIdentifier??null;if(Y&&!i.gasData.price&&(i.gasData.price=Y.referenceGasPrice),await Cu(i,r,A&&Y&&h?Yd(Y,h):void 0),s){if(!v||!C)throw new Error("Could not resolve gas payment: a gas owner or sender must be set to fetch balance and coins.");Iu({transactionData:i,balance:v,coins:C,usesGasCoin:d,withdrawals:g,gasPayer:c,chainIdentifier:h,epoch:Y?.epoch??null})}!i.expiration&&i.gasData.payment?.length===0&&await hu(i,r,Y,h)}return await a()}async function Cu(i,n,a){if(i.gasData.budget)return;let r=await n.core.simulateTransaction({transaction:i.build({overrides:{gasData:{budget:String(bu),payment:[]},...a&&{expiration:a}}}),include:{effects:!0}});if(r.$kind==="FailedTransaction"){let o=r.FailedTransaction.status.error??void 0;throw new fd(`Transaction resolution failed: ${o?.message??"Unknown error"}`,{cause:r,executionError:o})}i.gasData.budget=us(r.Transaction.effects.gasUsed,i.gasData.price?String(i.gasData.price):void 0)}function Iu({transactionData:i,balance:n,coins:a,usesGasCoin:r,withdrawals:o,gasPayer:s,chainIdentifier:c,epoch:d}){let g=BigInt(i.gasData.budget),l=BigInt(n.balance.addressBalance);if(g===0n||!r&&l>=g+o){i.gasData.payment=[];return}let A=a.objects.filter(y=>!i.inputs.find(v=>v.Object?.ImmOrOwnedObject?y.objectId===v.Object.ImmOrOwnedObject.objectId:!1)),u=A.map(y=>({objectId:y.objectId,digest:y.digest,version:y.version})),m=l-o;if(r&&m>0n&&c&&d)i.gasData.payment=[cd(m,s,c,d),...u];else if(A.length)i.gasData.payment=u;else throw new Error("No valid gas coins found for the transaction.")}async function hu(i,n,a,r=null){let[o,s]=await Promise.all([r??n.core.getChainIdentifier().then(c=>c.chainIdentifier),a??n.core.getCurrentSystemState().then(c=>c.systemState)]);i.expiration=Yd(s,o)}function Yd(i,n){let a=BigInt(i.epoch);return{$kind:"ValidDuring",ValidDuring:{minEpoch:String(a),maxEpoch:String(a+1n),minTimestamp:null,maxTimestamp:null,chain:n,nonce:Math.random()*4294967296>>>0}}}async function vu(i,n){let a=i.inputs.filter(A=>A.UnresolvedObject&&!(A.UnresolvedObject.version||A.UnresolvedObject?.initialSharedVersion)),r=[...new Set(a.map(A=>Lt(A.UnresolvedObject.objectId)))],o=r.length?(0,Bd.chunk)(r,pu):[],s=(await Promise.all(o.map(A=>n.core.getObjects({objectIds:A})))).flatMap(A=>A.objects),c=new Map(r.map((A,u)=>[A,s[u]])),d=Array.from(c).filter(([A,u])=>u instanceof Error).map(([A,u])=>u.message);if(d.length)throw new Error(`The following input objects are invalid: ${d.join(", ")}`);let g=s.map(A=>{if(A instanceof Error)throw new Error(`Failed to fetch object: ${A.message}`);let u=A.owner,m=u&&typeof u=="object"?u.$kind==="Shared"?u.Shared.initialSharedVersion:u.$kind==="ConsensusAddressOwner"?u.ConsensusAddressOwner.startVersion:null:null;return{objectId:A.objectId,digest:A.digest,version:A.version,initialSharedVersion:m}}),l=new Map(r.map((A,u)=>[A,g[u]]));for(let[A,u]of i.inputs.entries()){if(!u.UnresolvedObject)continue;let m,y=V(u.UnresolvedObject.objectId),v=l.get(y);u.UnresolvedObject.initialSharedVersion??v?.initialSharedVersion?m=Ie.SharedObjectRef({objectId:y,initialSharedVersion:u.UnresolvedObject.initialSharedVersion||v?.initialSharedVersion,mutable:u.UnresolvedObject.mutable||Ru(i,A)}):Tu(i,A)&&(m=Ie.ReceivingRef({objectId:y,digest:u.UnresolvedObject.digest??v?.digest,version:u.UnresolvedObject.version??v?.version})),i.inputs[i.inputs.indexOf(u)]=m??Ie.ObjectRef({objectId:y,digest:u.UnresolvedObject.digest??v?.digest,version:u.UnresolvedObject.version??v?.version})}}async function fu(i,n){let{inputs:a,commands:r}=i,o=[],s=new Set;r.forEach(d=>{if(d.MoveCall){if(d.MoveCall._argumentTypes)return;if(d.MoveCall.arguments.map(g=>g.$kind==="Input"?i.inputs[g.Input]:null).some(g=>g?.UnresolvedPure||g?.UnresolvedObject&&typeof g?.UnresolvedObject.mutable!="boolean")){let g=`${d.MoveCall.package}::${d.MoveCall.module}::${d.MoveCall.function}`;s.add(g),o.push(d.MoveCall)}}});let c=new Map;s.size>0&&await Promise.all([...s].map(async d=>{let[g,l,A]=d.split("::"),{function:u}=await n.core.getMoveFunction({packageId:g,moduleName:l,name:A});c.set(d,u.parameters)})),o.length&&await Promise.all(o.map(async d=>{let g=c.get(`${d.package}::${d.module}::${d.function}`);g&&(d._argumentTypes=g.length>0&&Td(g.at(-1))?g.slice(0,g.length-1):g)})),r.forEach(d=>{if(!d.MoveCall)return;let g=d.MoveCall,l=`${g.package}::${g.module}::${g.function}`,A=g._argumentTypes;if(A){if(A.length!==d.MoveCall.arguments.length)throw new Error(`Incorrect number of arguments for ${l}`);A.forEach((u,m)=>{let y=g.arguments[m];if(y.$kind!=="Input")return;let v=a[y.Input];if(!v.UnresolvedPure&&!v.UnresolvedObject)return;let C=v.UnresolvedPure?.value??v.UnresolvedObject?.objectId,R=ur(u.body);if(R){y.type="pure",a[a.indexOf(v)]=Ie.Pure(R.serialize(C));return}if(typeof C!="string")throw new Error(`Expect the argument to be an object id string, got ${JSON.stringify(C,null,2)}`);y.type="object";let Y=v.UnresolvedPure?{$kind:"UnresolvedObject",UnresolvedObject:{objectId:C}}:v;a[y.Input]=Y})}})}function Ru(i,n){let a=!1;return i.getInputUses(n,(r,o)=>{if(o.MoveCall&&o.MoveCall._argumentTypes){let s=o.MoveCall.arguments.indexOf(r);a=o.MoveCall._argumentTypes[s].reference!=="immutable"||a}(o.$kind==="MakeMoveVec"||o.$kind==="MergeCoins"||o.$kind==="SplitCoins"||o.$kind==="TransferObjects")&&(a=!0)}),a}function Tu(i,n){let a=!1;return i.getInputUses(n,(r,o)=>{if(o.MoveCall&&o.MoveCall._argumentTypes){let s=o.MoveCall.arguments.indexOf(r);a=Yu(o.MoveCall._argumentTypes[s])||a}}),a}var Bu="0x0000000000000000000000000000000000000000000000000000000000000002::transfer::Receiving";function Yu(i){return i.body.$kind!=="datatype"?!1:i.body.datatype.typeName===Bu}function ps(i,n){return!!(i.inputs.some(a=>a.UnresolvedObject||a.UnresolvedPure)||!n.onlyTransactionKind&&(!i.gasData.price||!i.gasData.budget||!i.gasData.payment||i.gasData.payment.length===0&&!i.expiration))}async function Nd(i,n,a){return Wu(i),ps(i,n)?(wu(n).core?.resolveTransactionPlugin()??pr)(i,n,async()=>{await wd(i),await a()}):(await wd(i),a())}function wd(i){i.inputs.forEach((n,a)=>{if(n.$kind!=="Object"&&n.$kind!=="Pure"&&n.$kind!=="FundsWithdrawal")throw new Error(`Input at index ${a} has not been resolved. Expected a Pure, Object, or FundsWithdrawal input, but found ${JSON.stringify(n)}`)})}function wu(i){if(!i.client)throw new Error("No sui client passed to Transaction#build, but transaction data was not sufficient to build offline.");return i.client}function Wu(i){for(let n of i.commands)switch(n.$kind){case"SplitCoins":n.SplitCoins.amounts.forEach(a=>{Wd(a,B.U64,i)});break;case"TransferObjects":Wd(n.TransferObjects.address,B.Address,i);break}}function Wd(i,n,a){if(i.$kind!=="Input")return;let r=a.inputs[i.Input];r.$kind==="UnresolvedPure"&&(a.inputs[i.Input]=Ie.Pure(n.serialize(r.UnresolvedPure.value)))}function Fd(i){function n(a){return i(a)}return n.system=a=>{let r=a?.mutable;return n(r!==void 0?Ie.SharedObjectRef({objectId:Ar,initialSharedVersion:1,mutable:r}):{$kind:"UnresolvedObject",UnresolvedObject:{objectId:Ar,initialSharedVersion:1}})},n.clock=()=>n(Ie.SharedObjectRef({objectId:ia,initialSharedVersion:1,mutable:!1})),n.random=()=>n({$kind:"UnresolvedObject",UnresolvedObject:{objectId:ls,mutable:!1}}),n.denyList=a=>n({$kind:"UnresolvedObject",UnresolvedObject:{objectId:As,mutable:a?.mutable}}),n.option=({type:a,value:r})=>o=>o.moveCall({typeArguments:[a],target:`${Ea}::option::${r===null?"none":"some"}`,arguments:r===null?[]:[o.object(r)]}),n}var Gd=require("@mysten/bcs");function Zd(i){function n(a,r){if(typeof a=="string")return i(qn(a).serialize(r));if(a instanceof Uint8Array||(0,Gd.isSerializedBcs)(a))return i(a);throw new Error("tx.pure must be called either a bcs type name, or a serialized bcs value")}return n.u8=a=>i(B.U8.serialize(a)),n.u16=a=>i(B.U16.serialize(a)),n.u32=a=>i(B.U32.serialize(a)),n.u64=a=>i(B.U64.serialize(a)),n.u128=a=>i(B.U128.serialize(a)),n.u256=a=>i(B.U256.serialize(a)),n.bool=a=>i(B.Bool.serialize(a)),n.string=a=>i(B.String.serialize(a)),n.address=a=>i(B.Address.serialize(a)),n.id=n.address,n.vector=(a,r)=>i(B.vector(qn(a)).serialize(r)),n.option=(a,r)=>i(B.option(qn(a)).serialize(r)),n}function Sd(){return async(i,n,a)=>{let r=Dc(i);if(r.types.length===0&&r.packages.length===0)return a();if(!n.client)throw new Error("Transaction contains MVR names but no client was provided to resolve them. Please pass a client to Transaction#build()");Qc(i,await n.client.core.mvr.resolve({types:r.types,packages:r.packages})),await a()}}var ut=require("valibot"),vn="CoinWithBalance",an=oe("0x2::sui::SUI");function pe({type:i=an,balance:n,useGasCoin:a=!0}){let r=null;return o=>{if(r)return r;o.addIntentResolver(vn,mr);let s=i==="gas"?i:oe(i);return r=o.add(Be.Intent({name:vn,inputs:{},data:{type:s===an&&a?"gas":s,balance:BigInt(n),outputKind:"coin"}})),r}}function kd({type:i=an,balance:n,useGasCoin:a=!0}){let r=null;return o=>{if(r)return r;o.addIntentResolver(vn,mr);let s=i==="gas"?i:oe(i);return r=o.add(Be.Intent({name:vn,inputs:{},data:{type:s===an&&a?"gas":s,balance:BigInt(n),outputKind:"balance"}})),r}}var Nu=(0,ut.object)({type:(0,ut.string)(),balance:(0,ut.bigint)(),outputKind:(0,ut.optional)((0,ut.picklist)(["coin","balance"]))});async function mr(i,n,a){let r=new Set,o=new Map,s=new Map;if(!i.sender)throw new Error("Sender must be set to resolve CoinWithBalance");for(let[C,R]of i.commands.entries()){if(R.$kind!=="$Intent"||R.$Intent.name!==vn)continue;let{type:Y,balance:h,outputKind:F}=(0,ut.parse)(Nu,R.$Intent.data);if(h===0n){let G=Y==="gas"?an:Y;i.replaceCommand(C,Be.MoveCall({target:(F??"coin")==="balance"?"0x2::balance::zero":"0x2::coin::zero",typeArguments:[G]}));continue}Y!=="gas"&&r.add(Y),o.set(Y,(o.get(Y)??0n)+h),s.has(Y)||s.set(Y,[]),s.get(Y).push({balance:h,outputKind:F??"coin"})}if(o.has("gas")&&o.has(an))throw new Error("Cannot mix SUI CoinWithBalance intents that use the gas coin with ones that do not (useGasCoin: false). Use one or the other.");let c=new Set;for(let C of i.inputs)C.Object?.ImmOrOwnedObject&&c.add(C.Object.ImmOrOwnedObject.objectId),C.UnresolvedObject?.objectId&&c.add(C.UnresolvedObject.objectId);let d=new Map,g=new Map,l=n.client;if(!l)throw new Error("Client must be provided to build or serialize transactions with CoinWithBalance intents");await Promise.all([...[...r].map(async C=>{let{coins:R,addressBalance:Y}=await Fu({coinType:C,balance:o.get(C),client:l,owner:i.sender,usedIds:c});d.set(C,R),g.set(C,Y)}),o.has("gas")?await l.core.getBalance({owner:i.sender,coinType:an}).then(({balance:C})=>{g.set("gas",BigInt(C.addressBalance))}):null]);let A=new Map,u=new Map,m=new Set,y=new Map,v=0;for(;v<i.commands.length;){let C=i.commands[v];if(C.$kind!=="$Intent"||C.$Intent.name!==vn){v++;continue}let{type:R,balance:Y}=C.$Intent.data,h=R==="gas"?an:R,F=o.get(R),G=g.get(R)??0n,N=[],k,H=s.get(R)??[];if(H.every(ae=>ae.outputKind==="balance")&&G>=F)N.push(Be.MoveCall({target:"0x2::balance::redeem_funds",typeArguments:[h],arguments:[i.addInput("withdrawal",Ie.FundsWithdrawal({reservation:{$kind:"MaxAmountU64",MaxAmountU64:String(Y)},typeArg:{$kind:"Balance",Balance:h},withdrawFrom:{$kind:"Sender",Sender:!0}}))]})),k={$kind:"NestedResult",NestedResult:[v+N.length-1,0]};else{if(!y.has(R)){let re=H,E=[];if(G>=F)m.add(R),N.push(Be.MoveCall({target:"0x2::coin::redeem_funds",typeArguments:[h],arguments:[i.addInput("withdrawal",Ie.FundsWithdrawal({reservation:{$kind:"MaxAmountU64",MaxAmountU64:String(F)},typeArg:{$kind:"Balance",Balance:h},withdrawFrom:{$kind:"Sender",Sender:!0}}))]})),E.push({$kind:"Result",Result:v+N.length-1});else if(R==="gas")E.push({$kind:"GasCoin",GasCoin:!0});else{let q=d.get(R),le=q.reduce((Fe,z)=>Fe+BigInt(z.balance),0n),fe=F>le?F-le:0n;u.set(R,le+fe===F);for(let Fe of q)E.push(i.addInput("object",Ie.ObjectRef({objectId:Fe.objectId,digest:Fe.digest,version:Fe.version})));fe>0n&&(m.add(R),N.push(Be.MoveCall({target:"0x2::coin::redeem_funds",typeArguments:[h],arguments:[i.addInput("withdrawal",Ie.FundsWithdrawal({reservation:{$kind:"MaxAmountU64",MaxAmountU64:String(fe)},typeArg:{$kind:"Balance",Balance:h},withdrawFrom:{$kind:"Sender",Sender:!0}}))]})),E.push({$kind:"Result",Result:v+N.length-1}))}let _=E[0],$=E.slice(1);for(let q=0;q<$.length;q+=500)N.push(Be.MergeCoins(_,$.slice(q,q+500)));A.set(R,_);let be=v+N.length;N.push(Be.SplitCoins(_,re.map(q=>i.addInput("pure",Ie.Pure(B.u64().serialize(q.balance))))));let ue=[];for(let q=0;q<re.length;q++){let le={$kind:"NestedResult",NestedResult:[be,q]};re[q].outputKind==="balance"?(N.push(Be.MoveCall({target:"0x2::coin::into_balance",typeArguments:[h],arguments:[le]})),ue.push({$kind:"NestedResult",NestedResult:[v+N.length-1,0]})):ue.push(le)}y.set(R,{results:ue,nextIntent:0})}let ae=y.get(R);k=ae.results[ae.nextIntent++]}i.replaceCommand(v,N,k),v+=N.length}for(let[C,R]of A){if(C==="gas"&&!m.has(C))continue;let Y=C==="gas"?an:C,h=s.get(C)?.some(G=>G.outputKind==="balance"),F=m.has(C);h||F?i.commands.push(Be.MoveCall({target:"0x2::coin::send_funds",typeArguments:[Y],arguments:[R,i.addInput("pure",Ie.Pure(B.Address.serialize(i.sender)))]})):u.get(C)&&i.commands.push(Be.MoveCall({target:"0x2::coin::destroy_zero",typeArguments:[Y],arguments:[R]}))}return a()}async function Fu({coinType:i,balance:n,client:a,owner:r,usedIds:o}){let s=n,c=[],d=a.core.getBalance({owner:r,coinType:i}).then(({balance:u})=>(s-=BigInt(u.addressBalance),u)),[g,l]=await Promise.all([A(),d]);if(BigInt(l.balance)<n)throw new Error(`Insufficient balance of ${i} for owner ${r}. Required: ${n}, Available: ${n-s}`);return{coins:g,balance:BigInt(l.coinBalance),addressBalance:BigInt(l.addressBalance),coinBalance:BigInt(l.coinBalance)};async function A(u=null){let{objects:m,hasNextPage:y,cursor:v}=await a.core.listCoins({owner:r,coinType:i,cursor:u});await d;for(let C of m)o.has(C.objectId)||(c.push(C),s-=BigInt(C.balance));return s>0n&&y?A(v):c}}var ra=require("@mysten/bcs"),Ht=require("valibot");function ms(i,n=1/0){let a={$kind:"Result",get Result(){return typeof i=="function"?i():i}},r=[],o=s=>r[s]??={$kind:"NestedResult",get NestedResult(){return[typeof i=="function"?i():i,s]}};return new Proxy(a,{set(){throw new Error("The transaction result is a proxy, and does not support setting properties directly")},get(s,c){if(c in s)return Reflect.get(s,c);if(c===Symbol.iterator)return function*(){let g=0;for(;g<n;)yield o(g),g++};if(typeof c=="symbol")return;let d=parseInt(c,10);if(!(Number.isNaN(d)||d<0))return o(d)}})}var Vd=Symbol.for("@mysten/transaction");function yr(i){return!!i&&typeof i=="object"&&i[Vd]===!0}var pt=class br{#t;#n;#o=new Map;#a=[];#i=[];#r=new Set;#s=new Set;#c=new Map;static fromKind(n){let a=new br;return a.#e=ct.fromKindBytes(typeof n=="string"?(0,ra.fromBase64)(n):n),a.#a=a.#e.inputs.slice(),a.#i=a.#e.commands.slice(),a.#r=new Set(a.#i.map((r,o)=>o)),a}static from(n,a={}){let r=new br;yr(n)?r.#e=ct.restore(n.getData()):typeof n!="string"||!n.startsWith("{")?r.#e=ct.fromBytes(typeof n=="string"?(0,ra.fromBase64)(n):n):r.#e=ct.restore(JSON.parse(n)),r.#a=r.#e.inputs.slice(),r.#i=r.#e.commands.slice(),r.#r=new Set(r.#i.map((s,c)=>c));let o=new Map([[vn,mr],...Object.entries(a.intentResolvers??{})]);if(!r.isPreparedForSerialization({supportedIntents:[...o.keys()]}))throw new Error("Transaction has unresolved intents or async thunks. Provide resolvers for any custom intents via the `intentResolvers` option, or call `prepareForSerialization` before copying.");for(let[s,c]of o)r.addIntentResolver(s,c);return r}addSerializationPlugin(n){this.#t.push(n)}addBuildPlugin(n){this.#n.push(n)}addIntentResolver(n,a){if(this.#o.has(n)&&this.#o.get(n)!==a)throw new Error(`Intent resolver for ${n} already exists`);this.#o.set(n,a)}setSender(n){this.#e.sender=n}setSenderIfNotSet(n){this.#e.sender||(this.#e.sender=n)}setExpiration(n){this.#e.expiration=n?(0,Ht.parse)(is,n):null}setGasPrice(n){this.#e.gasData.price=String(n)}setGasBudget(n){this.#e.gasData.budget=String(n)}setGasBudgetIfNotSet(n){this.#e.gasData.budget==null&&(this.#e.gasData.budget=String(n))}setGasOwner(n){this.#e.gasData.owner=n}setGasPayment(n){this.#e.gasData.payment=n.map(a=>(0,Ht.parse)(Rt,a))}#e;getData(){return this.#e.snapshot()}get[Vd](){return!0}get pure(){return Object.defineProperty(this,"pure",{enumerable:!1,value:Zd(n=>(0,ra.isSerializedBcs)(n)?this.#d("pure",{$kind:"Pure",Pure:{bytes:n.toBase64()}}):this.#d("pure",(0,Ht.is)(ns,n)?(0,Ht.parse)(ns,n):n instanceof Uint8Array?Ie.Pure(n):{$kind:"UnresolvedPure",UnresolvedPure:{value:n}}))}),this.pure}constructor(){this.object=Fd(n=>{if(typeof n=="function")return this.object(this.add(n));if(typeof n=="object"&&(0,Ht.is)(ge,n))return n;let a=na(n),r=this.#e.inputs.find(o=>a===na(o));return r?.Object?.SharedObject&&typeof n=="object"&&n.Object?.SharedObject&&(r.Object.SharedObject.mutable=r.Object.SharedObject.mutable||n.Object.SharedObject.mutable),r?{$kind:"Input",Input:this.#e.inputs.indexOf(r),type:"object"}:this.#d("object",typeof n=="string"?{$kind:"UnresolvedObject",UnresolvedObject:{objectId:V(n)}}:n)}),this.#e=new ct,this.#n=[],this.#t=[]}get gas(){return{$kind:"GasCoin",GasCoin:!0}}coin({type:n,balance:a,useGasCoin:r}){return this.add(pe({type:n,balance:a,useGasCoin:r}))}balance({type:n,balance:a,useGasCoin:r}){return this.add(kd({type:n,balance:a,useGasCoin:r}))}objectRef(...n){return this.object(Ie.ObjectRef(...n))}receivingRef(...n){return this.object(Ie.ReceivingRef(...n))}sharedObjectRef(...n){return this.object(Ie.SharedObjectRef(...n))}#m(){let n=new br;return n.#e=this.#e,n.#t=this.#t,n.#n=this.#n,n.#o=this.#o,n.#s=this.#s,n.#r=new Set(this.#r),n.#c=this.#c,this.#a.push(n.#a),this.#i.push(n.#i),n}add(n){if(typeof n=="function"){if(this.#c.has(n))return this.#c.get(n);let a=this.#m(),r=n(a);if(!(r&&typeof r=="object"&&"then"in r))return this.#r=a.#r,this.#c.set(n,r),r;let o=this.#g({$kind:"$Intent",$Intent:{name:"AsyncTransactionThunk",inputs:{},data:{resultIndex:this.#e.commands.length,result:null}}});this.#s.add(Promise.resolve(r).then(c=>{o.$Intent.data.result=c}));let s=ms(()=>o.$Intent.data.resultIndex);return this.#c.set(n,s),s}else this.#g(n);return ms(this.#e.commands.length-1)}#g(n){let a=this.#e.commands.length;return this.#i.push(n),this.#r.add(a),this.#e.commands.push(n),this.#e.mapCommandArguments(a,r=>{if(r.$kind==="Result"&&!this.#r.has(r.Result))throw new Error(`Result { Result: ${r.Result} } is not available to use in the current transaction`);if(r.$kind==="NestedResult"&&!this.#r.has(r.NestedResult[0]))throw new Error(`Result { NestedResult: [${r.NestedResult[0]}, ${r.NestedResult[1]}] } is not available to use in the current transaction`);if(r.$kind==="Input"&&r.Input>=this.#e.inputs.length)throw new Error(`Input { Input: ${r.Input} } references an input that does not exist in the current transaction`);return r}),n}#d(n,a){return this.#a.push(a),this.#e.addInput(n,a)}#l(n){return(0,ra.isSerializedBcs)(n)?this.pure(n):this.#A(n)}#A(n){if(typeof n=="function"){let a=this.add(n);return typeof a=="function"?this.#A(a):(0,Ht.parse)(ge,a)}return(0,Ht.parse)(ge,n)}splitCoins(n,a){let r=Be.SplitCoins(typeof n=="string"?this.object(n):this.#A(n),a.map(o=>typeof o=="number"||typeof o=="bigint"||typeof o=="string"?this.pure.u64(o):this.#l(o)));return this.#g(r),ms(this.#e.commands.length-1,a.length)}mergeCoins(n,a){return this.add(Be.MergeCoins(this.object(n),a.map(r=>this.object(r))))}publish({modules:n,dependencies:a}){return this.add(Be.Publish({modules:n,dependencies:a}))}upgrade({modules:n,dependencies:a,package:r,ticket:o}){return this.add(Be.Upgrade({modules:n,dependencies:a,package:r,ticket:this.object(o)}))}moveCall({arguments:n,...a}){return this.add(Be.MoveCall({...a,arguments:n?.map(r=>this.#l(r))}))}transferObjects(n,a){return this.add(Be.TransferObjects(n.map(r=>this.object(r)),typeof a=="string"?this.pure.address(a):this.#l(a)))}makeMoveVec({type:n,elements:a}){return this.add(Be.MakeMoveVec({type:n,elements:a.map(r=>this.object(r))}))}withdrawal({amount:n,type:a}){let r={$kind:"FundsWithdrawal",FundsWithdrawal:{reservation:{$kind:"MaxAmountU64",MaxAmountU64:String(n)},typeArg:{$kind:"Balance",Balance:a??"0x2::sui::SUI"},withdrawFrom:{$kind:"Sender",Sender:!0}}};return this.#d("object",r)}serialize(){return JSON.stringify(Ad(this.#e.snapshot()))}async toJSON(n={}){await this.prepareForSerialization(n);let a=this.isFullyResolved();return JSON.stringify((0,Ht.parse)(Id,a?{...this.#e.snapshot(),digest:this.#e.getDigest()}:this.#e.snapshot()),(r,o)=>typeof o=="bigint"?o.toString():o,2)}async sign(n){let{signer:a,...r}=n,o=await this.build(r);return a.signTransaction(o)}isPreparedForSerialization(n={}){return!(this.#s.size>0||this.#e.commands.some(a=>a.$Intent&&!n.supportedIntents?.includes(a.$Intent.name)))}isFullyResolved(){return!(!this.isPreparedForSerialization()||!this.#e.sender||ps(this.#e,{}))}async build(n={}){return await this.prepareForSerialization(n),await this.#u(n),this.#e.build({onlyTransactionKind:n.onlyTransactionKind})}async getDigest(n={}){return await this.prepareForSerialization(n),await this.#u(n),this.#e.getDigest()}async#u(n){if(!n.onlyTransactionKind&&!this.#e.sender)throw new Error("Missing transaction sender");await this.#p([...this.#n,Nd],n)}async#p(n,a){try{let r=o=>{if(o>=n.length)return()=>{};let s=n[o];return async()=>{let c=r(o+1),d=!1,g=!1;if(await s(this.#e,a,async()=>{if(d)throw new Error(`next() was call multiple times in TransactionPlugin ${o}`);d=!0,await c(),g=!0}),!d)throw new Error(`next() was not called in TransactionPlugin ${o}`);if(!g)throw new Error(`next() was not awaited in TransactionPlugin ${o}`)}};await r(0)()}finally{this.#a=this.#e.inputs.slice(),this.#i=this.#e.commands.slice(),this.#r=new Set(this.#i.map((r,o)=>o))}}async#b(){for(;this.#s.size>0;){let n=Promise.all(this.#s);this.#s.clear(),this.#s.add(n),await n,this.#s.delete(n)}}#y(){let n=this.#e.commands,a=this.#e.inputs,r=this.#i.flat(1/0),o=this.#a.flat(1/0);if(r.length!==n.length)throw new Error("Unexpected number of commands found in transaction data");if(o.length!==a.length)throw new Error("Unexpected number of inputs found in transaction data");let s=r.filter(d=>d.$Intent?.name!=="AsyncTransactionThunk");this.#e.commands=s,this.#e.inputs=o,this.#i=s,this.#a=o,this.#r=new Set(s.map((d,g)=>g));function c(d){let g=n[d];if(g.$Intent?.name==="AsyncTransactionThunk"){let A=g.$Intent.data.result;if(A==null)throw new Error("AsyncTransactionThunk has not been resolved");return c(A.Result)}let l=s.indexOf(g);if(l===-1)throw new Error("Unable to find original index for command");return l}this.#e.mapArguments(d=>{if(d.$kind==="Input"){let g=o.indexOf(a[d.Input]);if(g===-1)throw new Error("Input has not been resolved");return{...d,Input:g}}else if(d.$kind==="Result"){let g=c(d.Result);return{...d,Result:g}}else if(d.$kind==="NestedResult"){let g=c(d.NestedResult[0]);return{...d,NestedResult:[g,d.NestedResult[1]]}}return d});for(let[d,g]of n.entries())if(g.$Intent?.name==="AsyncTransactionThunk")try{g.$Intent.data.resultIndex=c(d)}catch{}}async prepareForSerialization(n){await this.#b(),this.#y();let a=new Set;for(let o of this.#e.commands)o.$Intent&&a.add(o.$Intent.name);let r=[...this.#t];for(let o of a)if(!n.supportedIntents?.includes(o)){if(!this.#o.has(o))throw new Error(`Missing intent resolver for ${o}`);r.push(this.#o.get(o))}r.push(Sd()),await this.#p(r,n)}};var Gu={mainnet:"https://mainnet.mvr.mystenlabs.com",testnet:"https://testnet.mvr.mystenlabs.com"},Pd=class extends or{constructor(i){super(i),this.core=this,this.mvr=new zc({cache:this.cache.scope("core.mvr"),url:i.mvr?.url??Gu[this.network],pageSize:i.mvr?.pageSize,overrides:i.mvr?.overrides})}async getObject(i){let{objectId:n}=i,{objects:[a]}=await this.getObjects({objectIds:[n],signal:i.signal,include:i.include});if(a instanceof Error)throw a;return{object:a}}async getDynamicField(i){let n=st.parseFromStr((await this.core.mvr.resolveType({type:i.name.type})).type),a=ea(i.parentId,n,i.name.bcs),{objects:[r]}=await this.getObjects({objectIds:[a],signal:i.signal,include:{previousTransaction:!0,content:!0}});if(r instanceof Error)throw r;let o=Mt(r.type),s=await r.content,c=o.typeParams[0],d=typeof c!="string"&&c.module==="dynamic_object_field"&&c.name==="Wrapper",g=s.slice(En+i.name.bcs.length),l=typeof o.typeParams[1]=="string"?o.typeParams[1]:oe(o.typeParams[1]);return{dynamicField:{$kind:d?"DynamicObject":"DynamicField",fieldId:r.objectId,digest:r.digest,version:r.version,type:r.type,previousTransaction:r.previousTransaction,name:{type:typeof c=="string"?c:oe(c),bcs:i.name.bcs},value:{type:l,bcs:g},childId:d?B.Address.parse(g):void 0}}}async getDynamicObjectField(i){let n=`0x2::dynamic_object_field::Wrapper<${(await this.core.mvr.resolveType({type:i.name.type})).type}>`,{dynamicField:a}=await this.getDynamicField({parentId:i.parentId,name:{type:n,bcs:i.name.bcs},signal:i.signal}),{object:r}=await this.getObject({objectId:a.childId,signal:i.signal,include:i.include});return{object:r}}async waitForTransaction(i){let{signal:n,timeout:a=60*1e3,pollSchedule:r,include:o}=i,s="result"in i&&i.result?(i.result.Transaction??i.result.FailedTransaction).digest:i.digest,c=n?AbortSignal.any([AbortSignal.timeout(a),n]):AbortSignal.timeout(a),d=new Promise((m,y)=>{c.addEventListener("abort",()=>y(c.reason))});d.catch(()=>{});let g=r??[0,300,600,1500,3500],l=Date.now(),A=0,u=g.length>0?g[g.length-1]-(g[g.length-2]??0):2e3;for(;;){if(A<g.length){let m=l+g[A]-Date.now();A++,m>0&&await Promise.race([new Promise(y=>setTimeout(y,m)),d])}else await Promise.race([new Promise(m=>setTimeout(m,u)),d]);c.throwIfAborted();try{return await this.getTransaction({digest:s,include:o,signal:c})}catch{}}}async signAndExecuteTransaction({transaction:i,signer:n,additionalSignatures:a=[],...r}){let o;i instanceof Uint8Array?o=i:(i.setSenderIfNotSet(n.toSuiAddress()),o=await i.build({client:this}));let{signature:s}=await n.signTransaction(o);return this.executeTransaction({transaction:o,signatures:[s,...a],...r})}};var Md=require("@mysten/utils"),Zu=new Intl.PluralRules("en-US",{type:"ordinal"}),Su=new Map([["one","st"],["two","nd"],["few","rd"],["other","th"]]);function ku(i){return`${i}${Su.get(Zu.select(i))}`}function bs(i){let{command:n,location:a,abortCode:r,cleverError:o}=i,s=[];if(n!=null?s.push(`MoveAbort in ${ku(n+1)} command`):s.push("MoveAbort"),o?.constantName){let c=o.value?`'${o.constantName}': ${o.value}`:`'${o.constantName}'`;s.push(c)}else s.push(`abort code: ${r}`);if(a?.package&&a?.module){let c=[`in '${[a.package.startsWith("0x")?a.package:`0x${a.package}`,a.module,a.functionName].filter(Boolean).join("::")}'`];o?.lineNumber!=null?c.push(`(line ${o.lineNumber})`):a.instruction!=null&&c.push(`(instruction ${a.instruction})`),s.push(c.join(" "))}return s.join(", ")}var Xd=B.struct("MinimalEffectsWithError",{status:gr}),W2=B.enum("MinimalTransactionEffectsWithError",{V1:Xd,V2:Xd}),Vu=B.enum("MinimalExecutionStatusNoError",{Success:null,Failed:null}),jd=B.struct("MinimalEffectsNoError",{status:Vu}),N2=B.enum("MinimalTransactionEffectsNoError",{V1:jd,V2:jd});function it(i,n){return n!=null&&typeof n!="boolean"?`${i}(${JSON.stringify(n,(a,r)=>typeof r=="bigint"?r.toString():r)})`:i}function Pu(i){let n=i.error,a=i.command!=null?Number(i.command):void 0;switch(n.$kind){case"MoveAbort":{let[r,o]=n.MoveAbort,s={package:r.module.address,module:r.module.name,function:r.function,functionName:r.functionName??void 0,instruction:r.instruction};return{$kind:"MoveAbort",message:bs({command:a,location:s,abortCode:String(o)}),command:a,MoveAbort:{abortCode:String(o),location:s}}}case"MoveObjectTooBig":return{$kind:"SizeError",message:it("MoveObjectTooBig",n.MoveObjectTooBig),command:a,SizeError:{name:"ObjectTooBig",size:Number(n.MoveObjectTooBig.objectSize),maxSize:Number(n.MoveObjectTooBig.maxObjectSize)}};case"MovePackageTooBig":return{$kind:"SizeError",message:it("MovePackageTooBig",n.MovePackageTooBig),command:a,SizeError:{name:"PackageTooBig",size:Number(n.MovePackageTooBig.objectSize),maxSize:Number(n.MovePackageTooBig.maxObjectSize)}};case"EffectsTooLarge":return{$kind:"SizeError",message:it("EffectsTooLarge",n.EffectsTooLarge),command:a,SizeError:{name:"EffectsTooLarge",size:Number(n.EffectsTooLarge.currentSize),maxSize:Number(n.EffectsTooLarge.maxSize)}};case"WrittenObjectsTooLarge":return{$kind:"SizeError",message:it("WrittenObjectsTooLarge",n.WrittenObjectsTooLarge),command:a,SizeError:{name:"WrittenObjectsTooLarge",size:Number(n.WrittenObjectsTooLarge.currentSize),maxSize:Number(n.WrittenObjectsTooLarge.maxSize)}};case"MoveVectorElemTooBig":return{$kind:"SizeError",message:it("MoveVectorElemTooBig",n.MoveVectorElemTooBig),command:a,SizeError:{name:"MoveVectorElemTooBig",size:Number(n.MoveVectorElemTooBig.valueSize),maxSize:Number(n.MoveVectorElemTooBig.maxScaledSize)}};case"MoveRawValueTooBig":return{$kind:"SizeError",message:it("MoveRawValueTooBig",n.MoveRawValueTooBig),command:a,SizeError:{name:"MoveRawValueTooBig",size:Number(n.MoveRawValueTooBig.valueSize),maxSize:Number(n.MoveRawValueTooBig.maxScaledSize)}};case"CommandArgumentError":return{$kind:"CommandArgumentError",message:it("CommandArgumentError",n.CommandArgumentError),command:a,CommandArgumentError:{argument:n.CommandArgumentError.argIdx,name:n.CommandArgumentError.kind.$kind}};case"TypeArgumentError":return{$kind:"TypeArgumentError",message:it("TypeArgumentError",n.TypeArgumentError),command:a,TypeArgumentError:{typeArgument:n.TypeArgumentError.argumentIdx,name:n.TypeArgumentError.kind.$kind}};case"PackageUpgradeError":{let r=n.PackageUpgradeError.upgradeError;return{$kind:"PackageUpgradeError",message:it("PackageUpgradeError",n.PackageUpgradeError),command:a,PackageUpgradeError:{name:r.$kind,packageId:r.$kind==="UnableToFetchPackage"?r.UnableToFetchPackage.packageId:void 0,digest:r.$kind==="DigestDoesNotMatch"?(0,Md.toBase64)(r.DigestDoesNotMatch.digest):void 0}}}case"ExecutionCancelledDueToSharedObjectCongestion":return{$kind:"CongestedObjects",message:it("ExecutionCancelledDueToSharedObjectCongestion",n.ExecutionCancelledDueToSharedObjectCongestion),command:a,CongestedObjects:{name:"ExecutionCanceledDueToConsensusObjectCongestion",objects:n.ExecutionCancelledDueToSharedObjectCongestion.congested_objects}};case"AddressDeniedForCoin":return{$kind:"CoinDenyListError",message:it("AddressDeniedForCoin",n.AddressDeniedForCoin),command:a,CoinDenyListError:{name:"AddressDeniedForCoin",address:n.AddressDeniedForCoin.address,coinType:n.AddressDeniedForCoin.coinType}};case"CoinTypeGlobalPause":return{$kind:"CoinDenyListError",message:it("CoinTypeGlobalPause",n.CoinTypeGlobalPause),command:a,CoinDenyListError:{name:"CoinTypeGlobalPause",coinType:n.CoinTypeGlobalPause.coinType}};case"CircularObjectOwnership":return{$kind:"ObjectIdError",message:it("CircularObjectOwnership",n.CircularObjectOwnership),command:a,ObjectIdError:{name:"CircularObjectOwnership",objectId:n.CircularObjectOwnership.object}};case"InvalidGasObject":return{$kind:"ObjectIdError",message:"InvalidGasObject",command:a,ObjectIdError:{name:"InvalidGasObject",objectId:""}};case"InputObjectDeleted":return{$kind:"ObjectIdError",message:"InputObjectDeleted",command:a,ObjectIdError:{name:"InputObjectDeleted",objectId:""}};case"InvalidTransferObject":return{$kind:"ObjectIdError",message:"InvalidTransferObject",command:a,ObjectIdError:{name:"InvalidTransferObject",objectId:""}};case"NonExclusiveWriteInputObjectModified":return{$kind:"Unknown",message:it("NonExclusiveWriteInputObjectModified",n.NonExclusiveWriteInputObjectModified),command:a,Unknown:null};case"InsufficientGas":case"InvariantViolation":case"FeatureNotYetSupported":case"InsufficientCoinBalance":case"CoinBalanceOverflow":case"PublishErrorNonZeroAddress":case"SuiMoveVerificationError":case"MovePrimitiveRuntimeError":case"VMVerificationOrDeserializationError":case"VMInvariantViolation":case"FunctionNotFound":case"ArityMismatch":case"TypeArityMismatch":case"NonEntryFunctionInvoked":case"UnusedValueWithoutDrop":case"InvalidPublicFunctionReturnType":case"PublishUpgradeMissingDependency":case"PublishUpgradeDependencyDowngrade":case"CertificateDenied":case"SuiMoveVerificationTimedout":case"SharedObjectOperationNotAllowed":case"ExecutionCancelledDueToRandomnessUnavailable":case"InvalidLinkage":case"InsufficientBalanceForWithdraw":return{$kind:"Unknown",message:n.$kind,command:a,Unknown:null};default:return{$kind:"Unknown",message:"Unknown error",command:a,Unknown:null}}}function Ld(i,n=!1){return(n?ct.fromKindBytes(i):ct.fromBytes(i)).snapshot()}function xd(i){let n=B.TransactionEffects.parse(i);switch(n.$kind){case"V1":return Xu({bytes:i,effects:n.V1});case"V2":return ju({bytes:i,effects:n.V2});default:throw new Error(`Unknown transaction effects version: ${n.$kind}`)}}function Xu(i){throw new Error("V1 effects are not supported yet")}function ju({bytes:i,effects:n}){let a=n.changedObjects.map(([r,o])=>({objectId:r,inputState:o.inputState.$kind==="Exist"?"Exists":"DoesNotExist",inputVersion:o.inputState.Exist?.[0][0]??null,inputDigest:o.inputState.Exist?.[0][1]??null,inputOwner:o.inputState.Exist?.[1]??null,outputState:o.outputState.$kind==="NotExist"?"DoesNotExist":o.outputState.$kind,outputVersion:o.outputState.$kind==="PackageWrite"?o.outputState.PackageWrite?.[0]:o.outputState.$kind==="ObjectWrite"?n.lamportVersion:null,outputDigest:o.outputState.$kind==="PackageWrite"?o.outputState.PackageWrite?.[1]:o.outputState.$kind==="ObjectWrite"?o.outputState.ObjectWrite?.[0]??null:null,outputOwner:o.outputState.$kind==="ObjectWrite"?o.outputState.ObjectWrite[1]:null,idOperation:o.idOperation.$kind}));return{bcs:i,version:2,status:n.status.$kind==="Success"?{success:!0,error:null}:{success:!1,error:Pu(n.status.Failure)},gasUsed:n.gasUsed,transactionDigest:n.transactionDigest,gasObject:n.gasObjectIndex===null?null:a[n.gasObjectIndex]??null,eventsDigest:n.eventsDigest,dependencies:n.dependencies,lamportVersion:n.lamportVersion,changedObjects:a,unchangedConsensusObjects:n.unchangedConsensusObjects.map(([r,o])=>({kind:o.$kind,objectId:r,version:o.$kind==="ReadOnlyRoot"?o.ReadOnlyRoot[0]:o[o.$kind],digest:o.$kind==="ReadOnlyRoot"?o.ReadOnlyRoot[1]:null})),auxiliaryDataDigest:n.auxDataDigest}}var Zn=require("@mysten/bcs"),zd=require("@mysten/utils"),Mu=5e10;function Ud(i,n){if(i.status==="success")return{success:!0,error:null};let a=i.error??"Unknown";if(n){let r=a.match(/in command (\d+)/),o=r?parseInt(r[1],10):void 0,s=a.match(/instruction:\s*(\d+)/),c=s?parseInt(s[1],10):void 0,d=n.module_id?.split("::")??[],g=d[0]?V(d[0]):void 0,l=d[1];return{success:!1,error:{$kind:"MoveAbort",message:bs({command:o,location:g&&l?{package:g,module:l,functionName:n.function??void 0,instruction:c}:void 0,abortCode:String(n.error_code??0),cleverError:n.line!=null?{lineNumber:n.line}:void 0}),command:o,MoveAbort:{abortCode:String(n.error_code??0),location:n.module_id?{package:V(n.module_id.split("::")[0]??""),module:n.module_id.split("::")[1]??"",functionName:n.function??void 0,instruction:c}:void 0}}}}return{success:!1,error:{$kind:"Unknown",message:a,Unknown:null}}}var Dd=class extends Pd{#t;constructor({jsonRpcClient:i,mvr:n}){super({network:i.network,base:i,mvr:n}),this.#t=i}async getObjects(i){let n=(0,zd.chunk)(i.objectIds,50),a=[];for(let r of n){let o=await this.#t.multiGetObjects({ids:r,options:{showOwner:!0,showType:!0,showBcs:!!(i.include?.content||i.include?.objectBcs),showPreviousTransaction:!!(i.include?.previousTransaction||i.include?.objectBcs),showStorageRebate:i.include?.objectBcs??!1,showContent:i.include?.json??!1,showDisplay:i.include?.display??!1},signal:i.signal});for(let[s,c]of o.entries())c.error?a.push(ds.fromResponse(c.error,r[s])):a.push(Hd(c.data,i.include))}return{objects:a}}async listOwnedObjects(i){let n=null;if(i.type){let r=i.type.split("::");r.length===1?n={Package:i.type}:r.length===2?n={MoveModule:{package:r[0],module:r[1]}}:n={StructType:i.type}}let a=await this.#t.getOwnedObjects({owner:i.owner,limit:i.limit,cursor:i.cursor,options:{showOwner:!0,showType:!0,showBcs:!!(i.include?.content||i.include?.objectBcs),showPreviousTransaction:!!(i.include?.previousTransaction||i.include?.objectBcs),showStorageRebate:i.include?.objectBcs??!1,showContent:i.include?.json??!1,showDisplay:i.include?.display??!1},filter:n,signal:i.signal});return{objects:a.data.map(r=>{if(r.error)throw ds.fromResponse(r.error);return Hd(r.data,i.include)}),hasNextPage:a.hasNextPage,cursor:a.nextCursor??null}}async listCoins(i){let n=await this.#t.getCoins({owner:i.owner,coinType:i.coinType,limit:i.limit,cursor:i.cursor,signal:i.signal});return{objects:n.data.map(a=>({objectId:a.coinObjectId,version:a.version,digest:a.digest,balance:a.balance,type:oe(`0x2::coin::Coin<${a.coinType}>`),owner:{$kind:"AddressOwner",AddressOwner:i.owner}})),hasNextPage:n.hasNextPage,cursor:n.nextCursor??null}}async getBalance(i){let n=await this.#t.getBalance({owner:i.owner,coinType:i.coinType,signal:i.signal}),a=n.fundsInAddressBalance??"0",r=String(BigInt(n.totalBalance)-BigInt(a));return{balance:{coinType:oe(n.coinType),balance:n.totalBalance,coinBalance:r,addressBalance:a}}}async getCoinMetadata(i){let n=(await this.mvr.resolveType({type:i.coinType})).type,a=await this.#t.getCoinMetadata({coinType:n,signal:i.signal});return a?{coinMetadata:{id:a.id??null,decimals:a.decimals,name:a.name,symbol:a.symbol,description:a.description,iconUrl:a.iconUrl??null}}:{coinMetadata:null}}async listBalances(i){return{balances:(await this.#t.getAllBalances({owner:i.owner,signal:i.signal})).map(n=>{let a=n.fundsInAddressBalance??"0",r=String(BigInt(n.totalBalance)-BigInt(a));return{coinType:oe(n.coinType),balance:n.totalBalance,coinBalance:r,addressBalance:a}}),hasNextPage:!1,cursor:null}}async getTransaction(i){return Jd(await this.#t.getTransactionBlock({digest:i.digest,options:{showRawInput:!0,showEffects:!0,showObjectChanges:i.include?.objectTypes??!1,showRawEffects:i.include?.effects??!1,showEvents:i.include?.events??!1,showBalanceChanges:i.include?.balanceChanges??!1},signal:i.signal}),i.include)}async executeTransaction(i){return Jd(await this.#t.executeTransactionBlock({transactionBlock:i.transaction,signature:i.signatures,options:{showRawInput:!0,showEffects:!0,showRawEffects:i.include?.effects??!1,showEvents:i.include?.events??!1,showObjectChanges:i.include?.objectTypes??!1,showBalanceChanges:i.include?.balanceChanges??!1},signal:i.signal}),i.include)}async simulateTransaction(i){i.transaction instanceof Uint8Array||await i.transaction.build({client:this,onlyTransactionKind:!0});let n=pt.from(i.transaction),a=i.transaction instanceof Uint8Array?null:ct.restore(i.transaction.getData()),r=a?a.build({overrides:{gasData:{budget:a.gasData.budget??String(Mu),price:a.gasData.price??String(await this.#t.getReferenceGasPrice()),payment:a.gasData.payment??[]}}}):i.transaction,o=n.getData().sender??V("0x0"),s=i.checksEnabled===!1,c=null;try{c=await this.#t.dryRunTransactionBlock({transactionBlock:r,signal:i.signal})}catch(C){if(!s)throw C}let d=null;if(i.include?.commandResults||s)try{d=await this.#t.devInspectTransactionBlock({sender:o,transactionBlock:n,signal:i.signal})}catch{}let g=!c||c.effects.status.status!=="success",l=s&&g&&d?d:c??d;if(!l)throw new Error("simulateTransaction failed: no results from dryRun or devInspect");let{effects:A,objectTypes:u}=Hu({effects:l.effects,objectChanges:(g?null:c?.objectChanges)??[]}),m;i.include?.transaction&&(m=Ld(r),a&&!g&&A.gasUsed&&(a.gasData.budget||(m.gasData.budget=us(A.gasUsed))));let y={digest:ct.getDigestFromBytes(r),epoch:null,status:A.status,effects:i.include?.effects?A:void 0,objectTypes:i.include?.objectTypes?u:void 0,signatures:[],transaction:m??void 0,bcs:i.include?.bcs?r:void 0,balanceChanges:i.include?.balanceChanges&&c&&!g?c.balanceChanges.map(C=>({coinType:oe(C.coinType),address:Qd(C.owner),amount:C.amount})):void 0,events:i.include?.events?l.events?.map(C=>({packageId:C.packageId,module:C.transactionModule,sender:C.sender,eventType:C.type,bcs:"bcs"in C?(0,Zn.fromBase64)(C.bcs):new Uint8Array,json:C.parsedJson??null}))??[]:void 0},v;return i.include?.commandResults&&d?.results&&(v=d.results.map(C=>({returnValues:(C.returnValues??[]).map(([R])=>({bcs:new Uint8Array(R)})),mutatedReferences:(C.mutableReferenceOutputs??[]).map(([,R])=>({bcs:new Uint8Array(R)}))}))),A.status.success?{$kind:"Transaction",Transaction:y,commandResults:v}:{$kind:"FailedTransaction",FailedTransaction:y,commandResults:v}}async getReferenceGasPrice(i){let n=await this.#t.getReferenceGasPrice({signal:i?.signal});return{referenceGasPrice:String(n)}}async getProtocolConfig(i){let n=await this.#t.getProtocolConfig({signal:i?.signal}),a={};for(let[r,o]of Object.entries(n.attributes))if(o===null)a[r]=null;else if("u16"in o)a[r]=o.u16;else if("u32"in o)a[r]=o.u32;else if("u64"in o)a[r]=o.u64;else if("f64"in o)a[r]=o.f64;else if("bool"in o)a[r]=o.bool;else{let s=Object.entries(o);a[r]=s.length===1?String(s[0][1]):JSON.stringify(o)}return{protocolConfig:{protocolVersion:n.protocolVersion,featureFlags:{...n.featureFlags},attributes:a}}}async getCurrentSystemState(i){let n=await this.#t.getLatestSuiSystemState({signal:i?.signal});return{systemState:{systemStateVersion:n.systemStateVersion,epoch:n.epoch,protocolVersion:n.protocolVersion,referenceGasPrice:n.referenceGasPrice?.toString()??null,epochStartTimestampMs:n.epochStartTimestampMs,safeMode:n.safeMode,safeModeStorageRewards:n.safeModeStorageRewards,safeModeComputationRewards:n.safeModeComputationRewards,safeModeStorageRebates:n.safeModeStorageRebates,safeModeNonRefundableStorageFee:n.safeModeNonRefundableStorageFee,parameters:{epochDurationMs:n.epochDurationMs,stakeSubsidyStartEpoch:n.stakeSubsidyStartEpoch,maxValidatorCount:n.maxValidatorCount,minValidatorJoiningStake:n.minValidatorJoiningStake,validatorLowStakeThreshold:n.validatorLowStakeThreshold,validatorLowStakeGracePeriod:n.validatorLowStakeGracePeriod},storageFund:{totalObjectStorageRebates:n.storageFundTotalObjectStorageRebates,nonRefundableBalance:n.storageFundNonRefundableBalance},stakeSubsidy:{balance:n.stakeSubsidyBalance,distributionCounter:n.stakeSubsidyDistributionCounter,currentDistributionAmount:n.stakeSubsidyCurrentDistributionAmount,stakeSubsidyPeriodLength:n.stakeSubsidyPeriodLength,stakeSubsidyDecreaseRate:n.stakeSubsidyDecreaseRate}}}}async listDynamicFields(i){let n=await this.#t.getDynamicFields({parentId:i.parentId,limit:i.limit,cursor:i.cursor});return{dynamicFields:n.data.map(a=>{let r=a.type==="DynamicObject",o=r?`0x2::dynamic_field::Field<0x2::dynamic_object_field::Wrapper<${a.name.type}>, 0x2::object::ID>`:`0x2::dynamic_field::Field<${a.name.type}, ${a.objectType}>`,s=(0,Zn.fromBase64)(a.bcsName),c=r?`0x2::dynamic_object_field::Wrapper<${a.name.type}>`:a.name.type;return{$kind:r?"DynamicObject":"DynamicField",fieldId:ea(i.parentId,c,s),type:oe(o),name:{type:a.name.type,bcs:s},valueType:a.objectType,childId:r?a.objectId:void 0}}),hasNextPage:n.hasNextPage,cursor:n.nextCursor}}async verifyZkLoginSignature(i){let n=await this.#t.verifyZkLoginSignature({bytes:i.bytes,signature:i.signature,intentScope:i.intentScope,author:i.address});return{success:n.success,errors:n.errors}}async defaultNameServiceName(i){return{data:{name:(await this.#t.resolveNameServiceNames(i)).data[0]??null}}}resolveTransactionPlugin(){return pr}async getMoveFunction(i){let n=(await this.mvr.resolvePackage({package:i.packageId})).package,a=await this.#t.getNormalizedMoveFunction({package:n,module:i.moduleName,function:i.name});return{function:{packageId:V(n),moduleName:i.moduleName,name:i.name,visibility:Ou(a.visibility),isEntry:a.isEntry,typeParameters:a.typeParameters.map(r=>({isPhantom:!1,constraints:Ju(r)})),parameters:a.parameters.map(r=>Od(r)),returns:a.return.map(r=>Od(r))}}}async getChainIdentifier(i){return this.cache.read(["chainIdentifier"],async()=>({chainIdentifier:(await this.#t.getCheckpoint({id:"0"})).digest}))}};function Lu(i){if(i.bcs?.dataType==="moveObject")try{let n=oe(i.bcs.type),a,r=V(nn),o=oe(`${nn}::coin::Coin<${nn}::sui::SUI>`),s=oe(`${gs}::staking_pool::StakedSui`),c=`${r}::coin::Coin<`;if(n===o)a={GasCoin:null};else if(n===s)a={StakedSui:null};else if(n.startsWith(c)){let l=n.match(new RegExp(`${r.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}::coin::Coin<(.+)>$`));if(l)a={Coin:st.parseFromStr(l[1],!0)};else throw new Error("Failed to parse Coin type")}else{let l=st.parseFromStr(n,!0);if(typeof l!="object"||!("struct"in l))throw new Error("Expected struct type tag");a={Other:l.struct}}let d=(0,Zn.fromBase64)(i.bcs.bcsBytes),g=xu(i.owner);return B.Object.serialize({data:{Move:{type:a,hasPublicTransfer:i.bcs.hasPublicTransfer,version:i.bcs.version,contents:d}},owner:g,previousTransaction:i.previousTransaction,storageRebate:i.storageRebate}).toBytes()}catch{return}}function Hd(i,n){let a=i.bcs?.dataType==="moveObject"?(0,Zn.fromBase64)(i.bcs.bcsBytes):void 0,r=n?.objectBcs?Lu(i):void 0,o=i.type&&i.type.includes("::")?oe(i.type):i.type??"",s=n?.json&&i.content?.dataType==="moveObject"?i.content.fields:n?.json?null:void 0,c=n?.display?i.display?.data!=null?{output:i.display.data,errors:null}:null:void 0;return{objectId:i.objectId,version:i.version,digest:i.digest,type:o,content:n?.content?a:void 0,owner:oa(i.owner),previousTransaction:n?.previousTransaction?i.previousTransaction??void 0:void 0,objectBcs:r,json:s,display:c}}function oa(i){if(i==="Immutable")return{$kind:"Immutable",Immutable:!0};if("ConsensusAddressOwner"in i)return{$kind:"ConsensusAddressOwner",ConsensusAddressOwner:{owner:i.ConsensusAddressOwner.owner,startVersion:i.ConsensusAddressOwner.start_version}};if("AddressOwner"in i)return{$kind:"AddressOwner",AddressOwner:i.AddressOwner};if("ObjectOwner"in i)return{$kind:"ObjectOwner",ObjectOwner:i.ObjectOwner};if("Shared"in i)return{$kind:"Shared",Shared:{initialSharedVersion:i.Shared.initial_shared_version}};throw new Error(`Unknown owner type: ${JSON.stringify(i)}`)}function xu(i){if(i==="Immutable")return{Immutable:null};if("AddressOwner"in i)return{AddressOwner:i.AddressOwner};if("ObjectOwner"in i)return{ObjectOwner:i.ObjectOwner};if("Shared"in i)return{Shared:{initialSharedVersion:i.Shared.initial_shared_version}};if(typeof i=="object"&&i!==null&&"ConsensusAddressOwner"in i)return{ConsensusAddressOwner:{startVersion:i.ConsensusAddressOwner.start_version,owner:i.ConsensusAddressOwner.owner}};throw new Error(`Unknown owner type: ${JSON.stringify(i)}`)}function Qd(i){if(i==="Immutable")return null;if("ConsensusAddressOwner"in i)return i.ConsensusAddressOwner.owner;if("AddressOwner"in i)return i.AddressOwner;if("ObjectOwner"in i)return i.ObjectOwner;if("Shared"in i)return null;throw new Error(`Unknown owner type: ${JSON.stringify(i)}`)}function Jd(i,n){let a={};n?.objectTypes&&i.objectChanges?.forEach(l=>{l.type!=="published"&&(a[l.objectId]=oe(l.objectType))});let r,o=[],s;if(i.rawTransaction){let l=B.SenderSignedData.parse((0,Zn.fromBase64)(i.rawTransaction))[0];if(o=l.txSignatures,n?.transaction||n?.bcs){let A=B.TransactionData.serialize(l.intentMessage.value).toBytes();n?.bcs&&(s=A),n?.transaction&&(r={...ct.restore({version:2,sender:l.intentMessage.value.V1.sender,expiration:l.intentMessage.value.V1.expiration,gasData:l.intentMessage.value.V1.gasData,inputs:l.intentMessage.value.V1.kind.ProgrammableTransaction.inputs,commands:l.intentMessage.value.V1.kind.ProgrammableTransaction.commands})})}}let c=i.effects?.status?Ud(i.effects.status,i.effects.abortError):{success:!1,error:{$kind:"Unknown",message:"Unknown",Unknown:null}},d=i.rawEffects?new Uint8Array(i.rawEffects):null,g={digest:i.digest,epoch:i.effects?.executedEpoch??null,status:c,effects:n?.effects&&d?xd(d):void 0,objectTypes:n?.objectTypes?a:void 0,transaction:r,bcs:s,signatures:o,balanceChanges:n?.balanceChanges?i.balanceChanges?.map(l=>({coinType:oe(l.coinType),address:Qd(l.owner),amount:l.amount}))??[]:void 0,events:n?.events?i.events?.map(l=>({packageId:l.packageId,module:l.transactionModule,sender:l.sender,eventType:l.type,bcs:"bcs"in l?(0,Zn.fromBase64)(l.bcs):new Uint8Array,json:l.parsedJson??null}))??[]:void 0};return c.success?{$kind:"Transaction",Transaction:g}:{$kind:"FailedTransaction",FailedTransaction:g}}function Hu({bytes:i,effects:n,objectChanges:a}){let r=[],o=[],s={};return a?.forEach(c=>{switch(c.type){case"published":r.push({objectId:c.packageId,inputState:"DoesNotExist",inputVersion:null,inputDigest:null,inputOwner:null,outputState:"PackageWrite",outputVersion:c.version,outputDigest:c.digest,outputOwner:null,idOperation:"Created"});break;case"transferred":r.push({objectId:c.objectId,inputState:"Exists",inputVersion:c.version,inputDigest:c.digest,inputOwner:{$kind:"AddressOwner",AddressOwner:c.sender},outputState:"ObjectWrite",outputVersion:c.version,outputDigest:c.digest,outputOwner:oa(c.recipient),idOperation:"None"}),s[c.objectId]=oe(c.objectType);break;case"mutated":r.push({objectId:c.objectId,inputState:"Exists",inputVersion:c.previousVersion,inputDigest:null,inputOwner:oa(c.owner),outputState:"ObjectWrite",outputVersion:c.version,outputDigest:c.digest,outputOwner:oa(c.owner),idOperation:"None"}),s[c.objectId]=oe(c.objectType);break;case"deleted":r.push({objectId:c.objectId,inputState:"Exists",inputVersion:c.version,inputDigest:n.deleted?.find(d=>d.objectId===c.objectId)?.digest??null,inputOwner:null,outputState:"DoesNotExist",outputVersion:null,outputDigest:null,outputOwner:null,idOperation:"Deleted"}),s[c.objectId]=oe(c.objectType);break;case"wrapped":r.push({objectId:c.objectId,inputState:"Exists",inputVersion:c.version,inputDigest:null,inputOwner:{$kind:"AddressOwner",AddressOwner:c.sender},outputState:"ObjectWrite",outputVersion:c.version,outputDigest:n.wrapped?.find(d=>d.objectId===c.objectId)?.digest??null,outputOwner:{$kind:"ObjectOwner",ObjectOwner:c.sender},idOperation:"None"}),s[c.objectId]=oe(c.objectType);break;case"created":r.push({objectId:c.objectId,inputState:"DoesNotExist",inputVersion:null,inputDigest:null,inputOwner:null,outputState:"ObjectWrite",outputVersion:c.version,outputDigest:c.digest,outputOwner:oa(c.owner),idOperation:"Created"}),s[c.objectId]=oe(c.objectType);break}}),{objectTypes:s,effects:{bcs:i??null,version:2,status:Ud(n.status,n.abortError),gasUsed:n.gasUsed,transactionDigest:n.transactionDigest,gasObject:{objectId:n.gasObject?.reference.objectId,inputState:"Exists",inputVersion:null,inputDigest:null,inputOwner:null,outputState:"ObjectWrite",outputVersion:n.gasObject.reference.version,outputDigest:n.gasObject.reference.digest,outputOwner:oa(n.gasObject.owner),idOperation:"None"},eventsDigest:n.eventsDigest??null,dependencies:n.dependencies??[],lamportVersion:n.gasObject.reference.version,changedObjects:r,unchangedConsensusObjects:o,auxiliaryDataDigest:null}}}function Od(i){if(typeof i!="string"){if("Reference"in i)return{reference:"immutable",body:_a(i.Reference)};if("MutableReference"in i)return{reference:"mutable",body:_a(i.MutableReference)}}return{reference:null,body:_a(i)}}function _a(i){switch(i){case"Address":return{$kind:"address"};case"Bool":return{$kind:"bool"};case"U8":return{$kind:"u8"};case"U16":return{$kind:"u16"};case"U32":return{$kind:"u32"};case"U64":return{$kind:"u64"};case"U128":return{$kind:"u128"};case"U256":return{$kind:"u256"}}if(typeof i=="string")throw new Error(`Unknown type: ${i}`);if("Vector"in i)return{$kind:"vector",vector:_a(i.Vector)};if("Struct"in i)return{$kind:"datatype",datatype:{typeName:`${V(i.Struct.address)}::${i.Struct.module}::${i.Struct.name}`,typeParameters:i.Struct.typeArguments.map(n=>_a(n))}};if("TypeParameter"in i)return{$kind:"typeParameter",index:i.TypeParameter};throw new Error(`Unknown type: ${JSON.stringify(i)}`)}function Ju(i){return i.abilities.map(n=>{switch(n){case"Copy":return"copy";case"Drop":return"drop";case"Store":return"store";case"Key":return"key";default:return"unknown"}})}function Ou(i){switch(i){case"Public":return"public";case"Private":return"private";case"Friend":return"friend";default:return"unknown"}}var rn=require("@mysten/bcs"),zu=Symbol.for("@mysten/SuiJsonRpcClient");var Sn=class extends or{get[zu](){return!0}constructor(i){super({network:i.network}),this.jsonRpc=this,this.transport=i.transport??new Gc({url:i.url}),this.core=new Dd({jsonRpcClient:this,mvr:i.mvr})}async getRpcApiVersion({signal:i}={}){return(await this.transport.request({method:"rpc.discover",params:[],signal:i})).info.version}async getCoins({coinType:i,owner:n,cursor:a,limit:r,signal:o}){if(!n||!Oe(V(n)))throw new Error("Invalid Sui address");i&&Le(i)&&(i=(await this.core.mvr.resolveType({type:i})).type);let s=await this.transport.request({method:"suix_getCoins",params:[n,i,a,r],signal:o});return{...s,data:s.data.filter(c=>!rs(c.digest))}}async getAllCoins(i){if(!i.owner||!Oe(V(i.owner)))throw new Error("Invalid Sui address");let n=await this.transport.request({method:"suix_getAllCoins",params:[i.owner,i.cursor,i.limit],signal:i.signal});return{...n,data:n.data.filter(a=>!rs(a.digest))}}async getBalance({owner:i,coinType:n,signal:a}){if(!i||!Oe(V(i)))throw new Error("Invalid Sui address");return n&&Le(n)&&(n=(await this.core.mvr.resolveType({type:n})).type),await this.transport.request({method:"suix_getBalance",params:[i,n],signal:a})}async getAllBalances(i){if(!i.owner||!Oe(V(i.owner)))throw new Error("Invalid Sui address");return await this.transport.request({method:"suix_getAllBalances",params:[i.owner],signal:i.signal})}async getCoinMetadata({coinType:i,signal:n}){return i&&Le(i)&&(i=(await this.core.mvr.resolveType({type:i})).type),await this.transport.request({method:"suix_getCoinMetadata",params:[i],signal:n})}async getTotalSupply({coinType:i,signal:n}){return i&&Le(i)&&(i=(await this.core.mvr.resolveType({type:i})).type),await this.transport.request({method:"suix_getTotalSupply",params:[i],signal:n})}async call(i,n,{signal:a}={}){return await this.transport.request({method:i,params:n,signal:a})}async getMoveFunctionArgTypes({package:i,module:n,function:a,signal:r}){return i&&Me(i)&&(i=(await this.core.mvr.resolvePackage({package:i})).package),await this.transport.request({method:"sui_getMoveFunctionArgTypes",params:[i,n,a],signal:r})}async getNormalizedMoveModulesByPackage({package:i,signal:n}){return i&&Me(i)&&(i=(await this.core.mvr.resolvePackage({package:i})).package),await this.transport.request({method:"sui_getNormalizedMoveModulesByPackage",params:[i],signal:n})}async getNormalizedMoveModule({package:i,module:n,signal:a}){return i&&Me(i)&&(i=(await this.core.mvr.resolvePackage({package:i})).package),await this.transport.request({method:"sui_getNormalizedMoveModule",params:[i,n],signal:a})}async getNormalizedMoveFunction({package:i,module:n,function:a,signal:r}){return i&&Me(i)&&(i=(await this.core.mvr.resolvePackage({package:i})).package),await this.transport.request({method:"sui_getNormalizedMoveFunction",params:[i,n,a],signal:r})}async getNormalizedMoveStruct({package:i,module:n,struct:a,signal:r}){return i&&Me(i)&&(i=(await this.core.mvr.resolvePackage({package:i})).package),await this.transport.request({method:"sui_getNormalizedMoveStruct",params:[i,n,a],signal:r})}async getOwnedObjects(i){if(!i.owner||!Oe(V(i.owner)))throw new Error("Invalid Sui address");let n=i.filter?{...i.filter}:void 0;return n&&"MoveModule"in n&&Me(n.MoveModule.package)?n.MoveModule={module:n.MoveModule.module,package:(await this.core.mvr.resolvePackage({package:n.MoveModule.package})).package}:n&&"StructType"in n&&Le(n.StructType)&&(n.StructType=(await this.core.mvr.resolveType({type:n.StructType})).type),await this.transport.request({method:"suix_getOwnedObjects",params:[i.owner,{filter:n,options:i.options},i.cursor,i.limit],signal:i.signal})}async getObject(i){if(!i.id||!Ua(Lt(i.id)))throw new Error("Invalid Sui Object id");return await this.transport.request({method:"sui_getObject",params:[i.id,i.options],signal:i.signal})}async tryGetPastObject(i){return await this.transport.request({method:"sui_tryGetPastObject",params:[i.id,i.version,i.options],signal:i.signal})}async multiGetObjects(i){if(i.ids.forEach(n=>{if(!n||!Ua(Lt(n)))throw new Error(`Invalid Sui Object id ${n}`)}),i.ids.length!==new Set(i.ids).size)throw new Error(`Duplicate object ids in batch call ${i.ids}`);return await this.transport.request({method:"sui_multiGetObjects",params:[i.ids,i.options],signal:i.signal})}async queryTransactionBlocks({filter:i,options:n,cursor:a,limit:r,order:o,signal:s}){return i&&"MoveFunction"in i&&Me(i.MoveFunction.package)&&(i={...i,MoveFunction:{package:(await this.core.mvr.resolvePackage({package:i.MoveFunction.package})).package}}),await this.transport.request({method:"suix_queryTransactionBlocks",params:[{filter:i,options:n},a,r,(o||"descending")==="descending"],signal:s})}async getTransactionBlock(i){if(!Ro(i.digest))throw new Error("Invalid Transaction digest");return await this.transport.request({method:"sui_getTransactionBlock",params:[i.digest,i.options],signal:i.signal})}async multiGetTransactionBlocks(i){if(i.digests.forEach(n=>{if(!Ro(n))throw new Error(`Invalid Transaction digest ${n}`)}),i.digests.length!==new Set(i.digests).size)throw new Error(`Duplicate digests in batch call ${i.digests}`);return await this.transport.request({method:"sui_multiGetTransactionBlocks",params:[i.digests,i.options],signal:i.signal})}async executeTransactionBlock({transactionBlock:i,signature:n,options:a,signal:r}){return await this.transport.request({method:"sui_executeTransactionBlock",params:[typeof i=="string"?i:(0,rn.toBase64)(i),Array.isArray(n)?n:[n],a],signal:r})}async signAndExecuteTransaction({transaction:i,signer:n,...a}){let r;i instanceof Uint8Array?r=i:(i.setSenderIfNotSet(n.toSuiAddress()),r=await i.build({client:this}));let{signature:o,bytes:s}=await n.signTransaction(r);return this.executeTransactionBlock({transactionBlock:s,signature:o,...a})}async getTotalTransactionBlocks({signal:i}={}){let n=await this.transport.request({method:"sui_getTotalTransactionBlocks",params:[],signal:i});return BigInt(n)}async getReferenceGasPrice({signal:i}={}){let n=await this.transport.request({method:"suix_getReferenceGasPrice",params:[],signal:i});return BigInt(n)}async getStakes(i){if(!i.owner||!Oe(V(i.owner)))throw new Error("Invalid Sui address");return await this.transport.request({method:"suix_getStakes",params:[i.owner],signal:i.signal})}async getStakesByIds(i){return i.stakedSuiIds.forEach(n=>{if(!n||!Ua(Lt(n)))throw new Error(`Invalid Sui Stake id ${n}`)}),await this.transport.request({method:"suix_getStakesByIds",params:[i.stakedSuiIds],signal:i.signal})}async getLatestSuiSystemState({signal:i}={}){return await this.transport.request({method:"suix_getLatestSuiSystemState",params:[],signal:i})}async queryEvents({query:i,cursor:n,limit:a,order:r,signal:o}){return i&&"MoveEventType"in i&&Le(i.MoveEventType)&&(i={...i,MoveEventType:(await this.core.mvr.resolveType({type:i.MoveEventType})).type}),i&&"MoveEventModule"in i&&Me(i.MoveEventModule.package)&&(i={...i,MoveEventModule:{module:i.MoveEventModule.module,package:(await this.core.mvr.resolvePackage({package:i.MoveEventModule.package})).package}}),"MoveModule"in i&&Me(i.MoveModule.package)&&(i={...i,MoveModule:{module:i.MoveModule.module,package:(await this.core.mvr.resolvePackage({package:i.MoveModule.package})).package}}),await this.transport.request({method:"suix_queryEvents",params:[i,n,a,(r||"descending")==="descending"],signal:o})}async devInspectTransactionBlock(i){let n;if(yr(i.transactionBlock))i.transactionBlock.setSenderIfNotSet(i.sender),n=(0,rn.toBase64)(await i.transactionBlock.build({client:this,onlyTransactionKind:!0}));else if(typeof i.transactionBlock=="string")n=i.transactionBlock;else if(i.transactionBlock instanceof Uint8Array)n=(0,rn.toBase64)(i.transactionBlock);else throw new Error("Unknown transaction block format.");return i.signal?.throwIfAborted(),await this.transport.request({method:"sui_devInspectTransactionBlock",params:[i.sender,n,i.gasPrice?.toString(),i.epoch],signal:i.signal})}async dryRunTransactionBlock(i){return await this.transport.request({method:"sui_dryRunTransactionBlock",params:[typeof i.transactionBlock=="string"?i.transactionBlock:(0,rn.toBase64)(i.transactionBlock)]})}async getDynamicFields(i){if(!i.parentId||!Ua(Lt(i.parentId)))throw new Error("Invalid Sui Object id");return await this.transport.request({method:"suix_getDynamicFields",params:[i.parentId,i.cursor,i.limit],signal:i.signal})}async getDynamicFieldObject(i){return await this.transport.request({method:"suix_getDynamicFieldObject",params:[i.parentId,i.name],signal:i.signal})}async getLatestCheckpointSequenceNumber({signal:i}={}){let n=await this.transport.request({method:"sui_getLatestCheckpointSequenceNumber",params:[],signal:i});return String(n)}async getCheckpoint(i){return await this.transport.request({method:"sui_getCheckpoint",params:[i.id],signal:i.signal})}async getCheckpoints(i){return await this.transport.request({method:"sui_getCheckpoints",params:[i.cursor,i?.limit,i.descendingOrder],signal:i.signal})}async getCommitteeInfo(i){return await this.transport.request({method:"suix_getCommitteeInfo",params:[i?.epoch],signal:i?.signal})}async getNetworkMetrics({signal:i}={}){return await this.transport.request({method:"suix_getNetworkMetrics",params:[],signal:i})}async getAddressMetrics({signal:i}={}){return await this.transport.request({method:"suix_getLatestAddressMetrics",params:[],signal:i})}async getEpochMetrics(i){return await this.transport.request({method:"suix_getEpochMetrics",params:[i?.cursor,i?.limit,i?.descendingOrder],signal:i?.signal})}async getAllEpochAddressMetrics(i){return await this.transport.request({method:"suix_getAllEpochAddressMetrics",params:[i?.descendingOrder],signal:i?.signal})}async getEpochs(i){return await this.transport.request({method:"suix_getEpochs",params:[i?.cursor,i?.limit,i?.descendingOrder],signal:i?.signal})}async getMoveCallMetrics({signal:i}={}){return await this.transport.request({method:"suix_getMoveCallMetrics",params:[],signal:i})}async getCurrentEpoch({signal:i}={}){return await this.transport.request({method:"suix_getCurrentEpoch",params:[],signal:i})}async getValidatorsApy({signal:i}={}){return await this.transport.request({method:"suix_getValidatorsApy",params:[],signal:i})}async getChainIdentifier({signal:i}={}){return(0,rn.toHex)((0,rn.fromBase58)((await this.getCheckpoint({id:"0",signal:i})).digest).slice(0,4))}async resolveNameServiceAddress(i){return await this.transport.request({method:"suix_resolveNameServiceAddress",params:[i.name],signal:i.signal})}async resolveNameServiceNames({format:i="dot",...n}){let{nextCursor:a,hasNextPage:r,data:o}=await this.transport.request({method:"suix_resolveNameServiceNames",params:[n.address,n.cursor,n.limit],signal:n.signal});return{hasNextPage:r,nextCursor:a,data:o.map(s=>Vc(s,i))}}async getProtocolConfig(i){return await this.transport.request({method:"sui_getProtocolConfig",params:[i?.version],signal:i?.signal})}async verifyZkLoginSignature(i){return await this.transport.request({method:"sui_verifyZkLoginSignature",params:[i.bytes,i.signature,i.intentScope,i.author],signal:i.signal})}async waitForTransaction({signal:i,timeout:n=60*1e3,pollInterval:a=2*1e3,...r}){let o=AbortSignal.timeout(n),s=new Promise((c,d)=>{o.addEventListener("abort",()=>d(o.reason))});for(s.catch(()=>{});!o.aborted;){i?.throwIfAborted();try{return await this.getTransactionBlock(r)}catch{await Promise.race([new Promise(c=>setTimeout(c,a)),s])}}throw o.throwIfAborted(),new Error("Unexpected error while waiting for transaction block.")}};var de=require("@mysten/bcs");var vr=require("big.js");var Cr={},ys=null,Is=null,Ir={},Cs={};function Kd(i,n){Cr[i]=n}function hs(i,n){if(!Cr[i]){let a=Object.keys(Cr).join(", ")||"(none registered)";throw new Error(`Environment '${i}' not found. Available: ${a}`)}ys=Cr[i],Is=i,Ir=n??{}}function sa(i,n,a){Ir[i]=n,Cs[i]=a??n}function vs(){if(!ys)throw new Error("No active environment. Call setActiveEnv() or import the envs module first.");return ys}function Uu(i){return i?"supplied environment":`active environment '${Is}'`}function Du(i){return i??vs()}function rt(i,n){if(n){let o=n.packages[i]||n.dependencies[i];if(!o)throw new Error(`Package '${i}' not found in supplied environment`);return o.publishedAt}if(Ir[i])return Ir[i];let a=vs(),r=a.packages[i]||a.dependencies[i];if(!r)throw new Error(`Package '${i}' not found in active environment '${Is}'`);return r.publishedAt}function dt(i,n,a){if(!a&&Cs[i])return Cs[i];let r=Du(a),o=r.packages[i]||r.dependencies[i];if(!o)throw new Error(`Package '${i}' not found in ${Uu(a)}`);let s=o.typeOrigins[n];if(!s)throw new Error(`Type origin for '${n}' not found in package '${i}'. Available: ${Object.keys(o.typeOrigins).join(", ")||"(none)"}`);return s}function on(i,n){sa("bridge",i,n)}var Ed={packages:{"wormhole-messenger":{originalId:"0x6ec1db2511d2283fc945d62f6c8e5305ee2538f2168fe91477f68c574d28be1",publishedAt:"0x261feaea07ac7a746068a0c81fbb82d51c0ece2d61058c24c7b572a1869afe37",typeOrigins:{"events::MessageReceivedEvent":"0x6ec1db2511d2283fc945d62f6c8e5305ee2538f2168fe91477f68c574d28be1","events::MessageSentEvent":"0x6ec1db2511d2283fc945d62f6c8e5305ee2538f2168fe91477f68c574d28be1","wormhole_messenger::AdminCap":"0x6ec1db2511d2283fc945d62f6c8e5305ee2538f2168fe91477f68c574d28be1","wormhole_messenger::WormholeMessenger":"0x6ec1db2511d2283fc945d62f6c8e5305ee2538f2168fe91477f68c574d28be1"}},"gas-oracle":{originalId:"0x34ae5595909bdfcd61191f6e5aabf0024250194f738b82df186fdd4fb18aa7ec",publishedAt:"0x2b3067e971857503bcb4c16d8a448c0541495c0ae9d7129e52659ed6724eb0ea",typeOrigins:{"gas_oracle::AdminCap":"0x34ae5595909bdfcd61191f6e5aabf0024250194f738b82df186fdd4fb18aa7ec","gas_oracle::ChainData":"0x34ae5595909bdfcd61191f6e5aabf0024250194f738b82df186fdd4fb18aa7ec","gas_oracle::GasOracle":"0x34ae5595909bdfcd61191f6e5aabf0024250194f738b82df186fdd4fb18aa7ec"}},utils:{originalId:"0x4dacc15807ba7ccfcdfcc2d0498401bbf504d112a5959323660d757a02b850d4",publishedAt:"0x4dacc15807ba7ccfcdfcc2d0498401bbf504d112a5959323660d757a02b850d4",typeOrigins:{"bytes32::Bytes32":"0x4dacc15807ba7ccfcdfcc2d0498401bbf504d112a5959323660d757a02b850d4","fee_collector::FeeCollector":"0x4dacc15807ba7ccfcdfcc2d0498401bbf504d112a5959323660d757a02b850d4","message::Message":"0x4dacc15807ba7ccfcdfcc2d0498401bbf504d112a5959323660d757a02b850d4","messenger_protocol::MessengerProtocol":"0x4dacc15807ba7ccfcdfcc2d0498401bbf504d112a5959323660d757a02b850d4","set::Empty":"0x4dacc15807ba7ccfcdfcc2d0498401bbf504d112a5959323660d757a02b850d4","set::Set":"0x4dacc15807ba7ccfcdfcc2d0498401bbf504d112a5959323660d757a02b850d4","version::CurrentVersion":"0x4dacc15807ba7ccfcdfcc2d0498401bbf504d112a5959323660d757a02b850d4"}},messenger:{originalId:"0x73d4d15293c2482646cdfc28c58da0f9eef64c577e9c0d2bbf614c1623346b49",publishedAt:"0x2c7d3497ef1ad32b62b30fb9456ba602c4dc756c07643096a6b4a1f04f72b549",typeOrigins:{"events::MessageReceivedEvent":"0x73d4d15293c2482646cdfc28c58da0f9eef64c577e9c0d2bbf614c1623346b49","events::MessageSentEvent":"0x73d4d15293c2482646cdfc28c58da0f9eef64c577e9c0d2bbf614c1623346b49","messenger::AdminCap":"0x73d4d15293c2482646cdfc28c58da0f9eef64c577e9c0d2bbf614c1623346b49","messenger::Messenger":"0x73d4d15293c2482646cdfc28c58da0f9eef64c577e9c0d2bbf614c1623346b49"}},bridge:{originalId:"0xa2b1c8af2a4f4624362c4a7d0f91fb6b0921e780ffb2c07701901c734d75d2e3",publishedAt:"0x55b0e9a5f0deaa21cf0c52eefedff362be1859f10a74415c88801bf8eb5a0597",typeOrigins:{"another_bridge::AnotherBridge":"0xa2b1c8af2a4f4624362c4a7d0f91fb6b0921e780ffb2c07701901c734d75d2e3","bridge::AdminCap":"0xa2b1c8af2a4f4624362c4a7d0f91fb6b0921e780ffb2c07701901c734d75d2e3","bridge::Bridge":"0xa2b1c8af2a4f4624362c4a7d0f91fb6b0921e780ffb2c07701901c734d75d2e3","bridge::FeeCollectorCap":"0xa2b1c8af2a4f4624362c4a7d0f91fb6b0921e780ffb2c07701901c734d75d2e3","bridge::StopSwapCap":"0xa2b1c8af2a4f4624362c4a7d0f91fb6b0921e780ffb2c07701901c734d75d2e3","events::DepositEvent":"0xa2b1c8af2a4f4624362c4a7d0f91fb6b0921e780ffb2c07701901c734d75d2e3","events::ReceiveFeeEvent":"0xa2b1c8af2a4f4624362c4a7d0f91fb6b0921e780ffb2c07701901c734d75d2e3","events::RewardsClaimedEvent":"0xa2b1c8af2a4f4624362c4a7d0f91fb6b0921e780ffb2c07701901c734d75d2e3","events::SwappedEvent":"0xa2b1c8af2a4f4624362c4a7d0f91fb6b0921e780ffb2c07701901c734d75d2e3","events::SwappedFromVUsdEvent":"0xa2b1c8af2a4f4624362c4a7d0f91fb6b0921e780ffb2c07701901c734d75d2e3","events::SwappedToVUsdEvent":"0xa2b1c8af2a4f4624362c4a7d0f91fb6b0921e780ffb2c07701901c734d75d2e3","events::TokensReceivedEvent":"0xa2b1c8af2a4f4624362c4a7d0f91fb6b0921e780ffb2c07701901c734d75d2e3","events::TokensSentEvent":"0xa2b1c8af2a4f4624362c4a7d0f91fb6b0921e780ffb2c07701901c734d75d2e3","events::WithdrawEvent":"0xa2b1c8af2a4f4624362c4a7d0f91fb6b0921e780ffb2c07701901c734d75d2e3","pool::AdminCap":"0xa2b1c8af2a4f4624362c4a7d0f91fb6b0921e780ffb2c07701901c734d75d2e3","pool::Pool":"0xa2b1c8af2a4f4624362c4a7d0f91fb6b0921e780ffb2c07701901c734d75d2e3","pool::StopCap":"0xa2b1c8af2a4f4624362c4a7d0f91fb6b0921e780ffb2c07701901c734d75d2e3","pool_rewards::PoolRewards":"0xa2b1c8af2a4f4624362c4a7d0f91fb6b0921e780ffb2c07701901c734d75d2e3","pool_state::PoolState":"0xa2b1c8af2a4f4624362c4a7d0f91fb6b0921e780ffb2c07701901c734d75d2e3","user_deposit::UserDeposit":"0xa2b1c8af2a4f4624362c4a7d0f91fb6b0921e780ffb2c07701901c734d75d2e3"}},"cctp-bridge":{originalId:"0xcfb3ada02ea9b40f2beb396f5f781689a2f6862d224e6c9854e175d14278f9f5",publishedAt:"0x750cc42da7042399613378a509fbed8563471ca48d961b2edf832bfd1342a1e0",typeOrigins:{"cctp_bridge::AdminCap":"0xcfb3ada02ea9b40f2beb396f5f781689a2f6862d224e6c9854e175d14278f9f5","cctp_bridge::CctpBridge":"0xcfb3ada02ea9b40f2beb396f5f781689a2f6862d224e6c9854e175d14278f9f5","cctp_bridge::FeeCollectorCap":"0xcfb3ada02ea9b40f2beb396f5f781689a2f6862d224e6c9854e175d14278f9f5","events::ReceiveFeeEvent":"0xcfb3ada02ea9b40f2beb396f5f781689a2f6862d224e6c9854e175d14278f9f5","events::RecipientReplaced":"0xcfb3ada02ea9b40f2beb396f5f781689a2f6862d224e6c9854e175d14278f9f5","events::TokensReceivedEvent":"0xcfb3ada02ea9b40f2beb396f5f781689a2f6862d224e6c9854e175d14278f9f5","events::TokensSentEvent":"0xcfb3ada02ea9b40f2beb396f5f781689a2f6862d224e6c9854e175d14278f9f5","message_transmitter_authenticator::MessageTransmitterAuthenticator":"0xcfb3ada02ea9b40f2beb396f5f781689a2f6862d224e6c9854e175d14278f9f5"}}},dependencies:{std:{originalId:"0x1",publishedAt:"0x1",typeOrigins:{"ascii::Char":"0x1","ascii::String":"0x1","bit_vector::BitVector":"0x1","fixed_point32::FixedPoint32":"0x1","internal::Permit":"0x1","option::Option":"0x1","string::String":"0x1","type_name::TypeName":"0x1","uq32_32::UQ32_32":"0x1","uq64_64::UQ64_64":"0x1"}},sui:{originalId:"0x2",publishedAt:"0x2",typeOrigins:{"accumulator::AccumulatorRoot":"0x2","accumulator::Key":"0x2","accumulator::U128":"0x2","accumulator_metadata::AccumulatorObjectCountKey":"0x2","accumulator_metadata::Metadata":"0x2","accumulator_metadata::MetadataKey":"0x2","accumulator_metadata::Owner":"0x2","accumulator_metadata::OwnerKey":"0x2","accumulator_settlement::EventStreamHead":"0x2","address_alias::AddressAliasState":"0x2","address_alias::AddressAliases":"0x2","address_alias::AliasKey":"0x2","authenticator_state::ActiveJwk":"0x2","authenticator_state::AuthenticatorState":"0x2","authenticator_state::AuthenticatorStateInner":"0x2","authenticator_state::JWK":"0x2","authenticator_state::JwkId":"0x2","bag::Bag":"0x2","balance::Balance":"0x2","balance::Supply":"0x2","bcs::BCS":"0x2","bls12381::G1":"0x2","bls12381::G2":"0x2","bls12381::GT":"0x2","bls12381::Scalar":"0x2","bls12381::UncompressedG1":"0x2","borrow::Borrow":"0x2","borrow::Referent":"0x2","clock::Clock":"0x2","coin::Coin":"0x2","coin::CoinMetadata":"0x2","coin::CurrencyCreated":"0x2","coin::DenyCap":"0x2","coin::DenyCapV2":"0x2","coin::RegulatedCoinMetadata":"0x2","coin::TreasuryCap":"0x2","coin_registry::Borrow":"0x2","coin_registry::CoinRegistry":"0x2","coin_registry::Currency":"0x2","coin_registry::CurrencyInitializer":"0x2","coin_registry::CurrencyKey":"0x2","coin_registry::ExtraField":"0x2","coin_registry::LegacyMetadataKey":"0x2","coin_registry::MetadataCap":"0x2","coin_registry::MetadataCapState":"0x2","coin_registry::RegulatedState":"0x2","coin_registry::SupplyState":"0x2","config::Config":"0x2","config::Setting":"0x2","config::SettingData":"0x2","deny_list::AddressKey":"0x2","deny_list::ConfigKey":"0x2","deny_list::ConfigWriteCap":"0x2","deny_list::DenyList":"0x2","deny_list::GlobalPauseKey":"0x2","deny_list::PerTypeConfigCreated":"0x2","deny_list::PerTypeList":"0x2","derived_object::Claimed":"0x2","derived_object::ClaimedStatus":"0x2","derived_object::DerivedObjectKey":"0x2","display::Display":"0x2","display::DisplayCreated":"0x2","display::VersionUpdated":"0x2","display_registry::Display":"0x2","display_registry::DisplayCap":"0x2","display_registry::DisplayKey":"0x2","display_registry::DisplayRegistry":"0x2","display_registry::SystemMigrationCap":"0x2","dynamic_field::Field":"0x2","dynamic_object_field::Wrapper":"0x2","funds_accumulator::Withdrawal":"0x2","groth16::Curve":"0x2","groth16::PreparedVerifyingKey":"0x2","groth16::ProofPoints":"0x2","groth16::PublicProofInputs":"0x2","group_ops::Element":"0x2","kiosk::Borrow":"0x2","kiosk::Item":"0x2","kiosk::ItemDelisted":"0x2","kiosk::ItemListed":"0x2","kiosk::ItemPurchased":"0x2","kiosk::Kiosk":"0x2","kiosk::KioskOwnerCap":"0x2","kiosk::Listing":"0x2","kiosk::Lock":"0x2","kiosk::PurchaseCap":"0x2","kiosk_extension::Extension":"0x2","kiosk_extension::ExtensionKey":"0x2","linked_table::LinkedTable":"0x2","linked_table::Node":"0x2","nitro_attestation::NitroAttestationDocument":"0x2","nitro_attestation::PCREntry":"0x2","object::ID":"0x2","object::UID":"0x2","object_bag::ObjectBag":"0x2","object_table::ObjectTable":"0x2","package::Publisher":"0x2","package::UpgradeCap":"0x2","package::UpgradeReceipt":"0x2","package::UpgradeTicket":"0x2","party::Party":"0x2","party::Permissions":"0x2","priority_queue::Entry":"0x2","priority_queue::PriorityQueue":"0x2","random::Random":"0x2","random::RandomGenerator":"0x2","random::RandomInner":"0x2","ristretto255::G":"0x2","ristretto255::Scalar":"0x2","sui::SUI":"0x2","table::Table":"0x2","table_vec::TableVec":"0x2","token::ActionRequest":"0x2","token::RuleKey":"0x2","token::Token":"0x2","token::TokenPolicy":"0x2","token::TokenPolicyCap":"0x2","token::TokenPolicyCreated":"0x2","transfer::Receiving":"0x2","transfer_policy::RuleKey":"0x2","transfer_policy::TransferPolicy":"0x2","transfer_policy::TransferPolicyCap":"0x2","transfer_policy::TransferPolicyCreated":"0x2","transfer_policy::TransferPolicyDestroyed":"0x2","transfer_policy::TransferRequest":"0x2","tx_context::TxContext":"0x2","url::Url":"0x2","vec_map::Entry":"0x2","vec_map::VecMap":"0x2","vec_set::VecSet":"0x2","versioned::VersionChangeCap":"0x2","versioned::Versioned":"0x2","zklogin_verified_id::VerifiedID":"0x2","zklogin_verified_issuer::VerifiedIssuer":"0x2"}},"token-messenger-minter":{originalId:"0x31cc14d80c175ae39777c0238f20594c6d4869cfab199f40b69f3319956b8beb",publishedAt:"0x31cc14d80c175ae39777c0238f20594c6d4869cfab199f40b69f3319956b8beb",typeOrigins:{"burn_message::BurnMessage":"0x31cc14d80c175ae39777c0238f20594c6d4869cfab199f40b69f3319956b8beb","deposit_for_burn::DepositForBurn":"0x31cc14d80c175ae39777c0238f20594c6d4869cfab199f40b69f3319956b8beb","deposit_for_burn::DepositForBurnTicket":"0x31cc14d80c175ae39777c0238f20594c6d4869cfab199f40b69f3319956b8beb","deposit_for_burn::DepositForBurnWithCallerTicket":"0x31cc14d80c175ae39777c0238f20594c6d4869cfab199f40b69f3319956b8beb","deposit_for_burn::ReplaceDepositForBurnTicket":"0x31cc14d80c175ae39777c0238f20594c6d4869cfab199f40b69f3319956b8beb","handle_receive_message::MintAndWithdraw":"0x31cc14d80c175ae39777c0238f20594c6d4869cfab199f40b69f3319956b8beb","handle_receive_message::StampReceiptTicketWithBurnMessage":"0x31cc14d80c175ae39777c0238f20594c6d4869cfab199f40b69f3319956b8beb","initialize::INITIALIZE":"0x31cc14d80c175ae39777c0238f20594c6d4869cfab199f40b69f3319956b8beb","initialize::InitCap":"0x31cc14d80c175ae39777c0238f20594c6d4869cfab199f40b69f3319956b8beb","message_transmitter_authenticator::MessageTransmitterAuthenticator":"0x31cc14d80c175ae39777c0238f20594c6d4869cfab199f40b69f3319956b8beb","migration::MigrationAborted":"0x31cc14d80c175ae39777c0238f20594c6d4869cfab199f40b69f3319956b8beb","migration::MigrationCompleted":"0x31cc14d80c175ae39777c0238f20594c6d4869cfab199f40b69f3319956b8beb","migration::MigrationStarted":"0x31cc14d80c175ae39777c0238f20594c6d4869cfab199f40b69f3319956b8beb","pausable::Pause":"0x31cc14d80c175ae39777c0238f20594c6d4869cfab199f40b69f3319956b8beb","pausable::Unpause":"0x31cc14d80c175ae39777c0238f20594c6d4869cfab199f40b69f3319956b8beb","remote_token_messenger::RemoteTokenMessengerAdded":"0x31cc14d80c175ae39777c0238f20594c6d4869cfab199f40b69f3319956b8beb","remote_token_messenger::RemoteTokenMessengerRemoved":"0x31cc14d80c175ae39777c0238f20594c6d4869cfab199f40b69f3319956b8beb","role_management::PauserChanged":"0x31cc14d80c175ae39777c0238f20594c6d4869cfab199f40b69f3319956b8beb","role_management::SetTokenController":"0x31cc14d80c175ae39777c0238f20594c6d4869cfab199f40b69f3319956b8beb","roles::OwnerRole":"0x31cc14d80c175ae39777c0238f20594c6d4869cfab199f40b69f3319956b8beb","roles::Roles":"0x31cc14d80c175ae39777c0238f20594c6d4869cfab199f40b69f3319956b8beb","state::State":"0x31cc14d80c175ae39777c0238f20594c6d4869cfab199f40b69f3319956b8beb","token_controller::MintCapAdded":"0x31cc14d80c175ae39777c0238f20594c6d4869cfab199f40b69f3319956b8beb","token_controller::MintCapRemoved":"0x31cc14d80c175ae39777c0238f20594c6d4869cfab199f40b69f3319956b8beb","token_controller::SetBurnLimitPerMessage":"0x31cc14d80c175ae39777c0238f20594c6d4869cfab199f40b69f3319956b8beb","token_controller::TokenPairLinked":"0x31cc14d80c175ae39777c0238f20594c6d4869cfab199f40b69f3319956b8beb","token_controller::TokenPairUnlinked":"0x31cc14d80c175ae39777c0238f20594c6d4869cfab199f40b69f3319956b8beb"}},stablecoin:{originalId:"0x346e3233f61eb0055713417bfaddda7dc3bf26816faad1f7606994a368b92917",publishedAt:"0x346e3233f61eb0055713417bfaddda7dc3bf26816faad1f7606994a368b92917",typeOrigins:{"mint_allowance::MintAllowance":"0x346e3233f61eb0055713417bfaddda7dc3bf26816faad1f7606994a368b92917","roles::BlocklisterChanged":"0x346e3233f61eb0055713417bfaddda7dc3bf26816faad1f7606994a368b92917","roles::BlocklisterKey":"0x346e3233f61eb0055713417bfaddda7dc3bf26816faad1f7606994a368b92917","roles::MasterMinterChanged":"0x346e3233f61eb0055713417bfaddda7dc3bf26816faad1f7606994a368b92917","roles::MasterMinterKey":"0x346e3233f61eb0055713417bfaddda7dc3bf26816faad1f7606994a368b92917","roles::MetadataUpdaterChanged":"0x346e3233f61eb0055713417bfaddda7dc3bf26816faad1f7606994a368b92917","roles::MetadataUpdaterKey":"0x346e3233f61eb0055713417bfaddda7dc3bf26816faad1f7606994a368b92917","roles::OwnerKey":"0x346e3233f61eb0055713417bfaddda7dc3bf26816faad1f7606994a368b92917","roles::OwnerRole":"0x346e3233f61eb0055713417bfaddda7dc3bf26816faad1f7606994a368b92917","roles::PauserChanged":"0x346e3233f61eb0055713417bfaddda7dc3bf26816faad1f7606994a368b92917","roles::PauserKey":"0x346e3233f61eb0055713417bfaddda7dc3bf26816faad1f7606994a368b92917","roles::Roles":"0x346e3233f61eb0055713417bfaddda7dc3bf26816faad1f7606994a368b92917","stablecoin::STABLECOIN":"0x346e3233f61eb0055713417bfaddda7dc3bf26816faad1f7606994a368b92917","treasury::Blocklisted":"0x346e3233f61eb0055713417bfaddda7dc3bf26816faad1f7606994a368b92917","treasury::Burn":"0x346e3233f61eb0055713417bfaddda7dc3bf26816faad1f7606994a368b92917","treasury::ControllerConfigured":"0x346e3233f61eb0055713417bfaddda7dc3bf26816faad1f7606994a368b92917","treasury::ControllerRemoved":"0x346e3233f61eb0055713417bfaddda7dc3bf26816faad1f7606994a368b92917","treasury::DenyCapKey":"0x346e3233f61eb0055713417bfaddda7dc3bf26816faad1f7606994a368b92917","treasury::MetadataUpdated":"0x346e3233f61eb0055713417bfaddda7dc3bf26816faad1f7606994a368b92917","treasury::MigrationAborted":"0x346e3233f61eb0055713417bfaddda7dc3bf26816faad1f7606994a368b92917","treasury::MigrationCompleted":"0x346e3233f61eb0055713417bfaddda7dc3bf26816faad1f7606994a368b92917","treasury::MigrationStarted":"0x346e3233f61eb0055713417bfaddda7dc3bf26816faad1f7606994a368b92917","treasury::Mint":"0x346e3233f61eb0055713417bfaddda7dc3bf26816faad1f7606994a368b92917","treasury::MintCap":"0x346e3233f61eb0055713417bfaddda7dc3bf26816faad1f7606994a368b92917","treasury::MintCapCreated":"0x346e3233f61eb0055713417bfaddda7dc3bf26816faad1f7606994a368b92917","treasury::MinterAllowanceIncremented":"0x346e3233f61eb0055713417bfaddda7dc3bf26816faad1f7606994a368b92917","treasury::MinterConfigured":"0x346e3233f61eb0055713417bfaddda7dc3bf26816faad1f7606994a368b92917","treasury::MinterRemoved":"0x346e3233f61eb0055713417bfaddda7dc3bf26816faad1f7606994a368b92917","treasury::Pause":"0x346e3233f61eb0055713417bfaddda7dc3bf26816faad1f7606994a368b92917","treasury::Treasury":"0x346e3233f61eb0055713417bfaddda7dc3bf26816faad1f7606994a368b92917","treasury::TreasuryCapKey":"0x346e3233f61eb0055713417bfaddda7dc3bf26816faad1f7606994a368b92917","treasury::Unblocklisted":"0x346e3233f61eb0055713417bfaddda7dc3bf26816faad1f7606994a368b92917","treasury::Unpause":"0x346e3233f61eb0055713417bfaddda7dc3bf26816faad1f7606994a368b92917"}},"message-transmitter":{originalId:"0x4931e06dce648b3931f890035bd196920770e913e43e45990b383f6486fdd0a5",publishedAt:"0x4931e06dce648b3931f890035bd196920770e913e43e45990b383f6486fdd0a5",typeOrigins:{"attester_manager::AttesterDisabled":"0x4931e06dce648b3931f890035bd196920770e913e43e45990b383f6486fdd0a5","attester_manager::AttesterEnabled":"0x4931e06dce648b3931f890035bd196920770e913e43e45990b383f6486fdd0a5","attester_manager::SignatureThresholdUpdated":"0x4931e06dce648b3931f890035bd196920770e913e43e45990b383f6486fdd0a5","initialize::INITIALIZE":"0x4931e06dce648b3931f890035bd196920770e913e43e45990b383f6486fdd0a5","initialize::InitCap":"0x4931e06dce648b3931f890035bd196920770e913e43e45990b383f6486fdd0a5","message::Message":"0x4931e06dce648b3931f890035bd196920770e913e43e45990b383f6486fdd0a5","message_size::MaxMessageBodySizeUpdated":"0x4931e06dce648b3931f890035bd196920770e913e43e45990b383f6486fdd0a5","migration::MigrationAborted":"0x4931e06dce648b3931f890035bd196920770e913e43e45990b383f6486fdd0a5","migration::MigrationCompleted":"0x4931e06dce648b3931f890035bd196920770e913e43e45990b383f6486fdd0a5","migration::MigrationStarted":"0x4931e06dce648b3931f890035bd196920770e913e43e45990b383f6486fdd0a5","pausable::Pause":"0x4931e06dce648b3931f890035bd196920770e913e43e45990b383f6486fdd0a5","pausable::Unpause":"0x4931e06dce648b3931f890035bd196920770e913e43e45990b383f6486fdd0a5","receive_message::MessageReceived":"0x4931e06dce648b3931f890035bd196920770e913e43e45990b383f6486fdd0a5","receive_message::Receipt":"0x4931e06dce648b3931f890035bd196920770e913e43e45990b383f6486fdd0a5","receive_message::ReceiveMessageTicket":"0x4931e06dce648b3931f890035bd196920770e913e43e45990b383f6486fdd0a5","receive_message::StampReceiptTicket":"0x4931e06dce648b3931f890035bd196920770e913e43e45990b383f6486fdd0a5","receive_message::StampedReceipt":"0x4931e06dce648b3931f890035bd196920770e913e43e45990b383f6486fdd0a5","role_management::AttesterManagerUpdated":"0x4931e06dce648b3931f890035bd196920770e913e43e45990b383f6486fdd0a5","role_management::PauserChanged":"0x4931e06dce648b3931f890035bd196920770e913e43e45990b383f6486fdd0a5","roles::OwnerRole":"0x4931e06dce648b3931f890035bd196920770e913e43e45990b383f6486fdd0a5","roles::Roles":"0x4931e06dce648b3931f890035bd196920770e913e43e45990b383f6486fdd0a5","send_message::MessageSent":"0x4931e06dce648b3931f890035bd196920770e913e43e45990b383f6486fdd0a5","send_message::ReplaceMessageTicket":"0x4931e06dce648b3931f890035bd196920770e913e43e45990b383f6486fdd0a5","send_message::SendMessageTicket":"0x4931e06dce648b3931f890035bd196920770e913e43e45990b383f6486fdd0a5","send_message::SendMessageWithCallerTicket":"0x4931e06dce648b3931f890035bd196920770e913e43e45990b383f6486fdd0a5","state::State":"0x4931e06dce648b3931f890035bd196920770e913e43e45990b383f6486fdd0a5"}},wormhole:{originalId:"0xf47329f4344f3bf0f8e436e2f7b485466cff300f12a166563995d3888c296a94",publishedAt:"0xf47329f4344f3bf0f8e436e2f7b485466cff300f12a166563995d3888c296a94",typeOrigins:{"bytes20::Bytes20":"0xf47329f4344f3bf0f8e436e2f7b485466cff300f12a166563995d3888c296a94","bytes32::Bytes32":"0xf47329f4344f3bf0f8e436e2f7b485466cff300f12a166563995d3888c296a94","consumed_vaas::ConsumedVAAs":"0xf47329f4344f3bf0f8e436e2f7b485466cff300f12a166563995d3888c296a94","cursor::Cursor":"0xf47329f4344f3bf0f8e436e2f7b485466cff300f12a166563995d3888c296a94","emitter::EmitterCap":"0xf47329f4344f3bf0f8e436e2f7b485466cff300f12a166563995d3888c296a94","emitter::EmitterCreated":"0xf47329f4344f3bf0f8e436e2f7b485466cff300f12a166563995d3888c296a94","emitter::EmitterDestroyed":"0xf47329f4344f3bf0f8e436e2f7b485466cff300f12a166563995d3888c296a94","external_address::ExternalAddress":"0xf47329f4344f3bf0f8e436e2f7b485466cff300f12a166563995d3888c296a94","fee_collector::FeeCollector":"0xf47329f4344f3bf0f8e436e2f7b485466cff300f12a166563995d3888c296a94","governance_message::DecreeReceipt":"0xf47329f4344f3bf0f8e436e2f7b485466cff300f12a166563995d3888c296a94","governance_message::DecreeTicket":"0xf47329f4344f3bf0f8e436e2f7b485466cff300f12a166563995d3888c296a94","guardian::Guardian":"0xf47329f4344f3bf0f8e436e2f7b485466cff300f12a166563995d3888c296a94","guardian_set::GuardianSet":"0xf47329f4344f3bf0f8e436e2f7b485466cff300f12a166563995d3888c296a94","guardian_signature::GuardianSignature":"0xf47329f4344f3bf0f8e436e2f7b485466cff300f12a166563995d3888c296a94","migrate::MigrateComplete":"0xf47329f4344f3bf0f8e436e2f7b485466cff300f12a166563995d3888c296a94","package_utils::CurrentPackage":"0xf47329f4344f3bf0f8e436e2f7b485466cff300f12a166563995d3888c296a94","package_utils::CurrentVersion":"0xf47329f4344f3bf0f8e436e2f7b485466cff300f12a166563995d3888c296a94","package_utils::PackageInfo":"0xf47329f4344f3bf0f8e436e2f7b485466cff300f12a166563995d3888c296a94","package_utils::PendingPackage":"0xf47329f4344f3bf0f8e436e2f7b485466cff300f12a166563995d3888c296a94","publish_message::MessageTicket":"0xf47329f4344f3bf0f8e436e2f7b485466cff300f12a166563995d3888c296a94","publish_message::WormholeMessage":"0xf47329f4344f3bf0f8e436e2f7b485466cff300f12a166563995d3888c296a94","set::Empty":"0xf47329f4344f3bf0f8e436e2f7b485466cff300f12a166563995d3888c296a94","set::Set":"0xf47329f4344f3bf0f8e436e2f7b485466cff300f12a166563995d3888c296a94","set_fee::GovernanceWitness":"0xf47329f4344f3bf0f8e436e2f7b485466cff300f12a166563995d3888c296a94","set_fee::SetFee":"0xf47329f4344f3bf0f8e436e2f7b485466cff300f12a166563995d3888c296a94","setup::DeployerCap":"0xf47329f4344f3bf0f8e436e2f7b485466cff300f12a166563995d3888c296a94","state::LatestOnly":"0xf47329f4344f3bf0f8e436e2f7b485466cff300f12a166563995d3888c296a94","state::State":"0xf47329f4344f3bf0f8e436e2f7b485466cff300f12a166563995d3888c296a94","transfer_fee::GovernanceWitness":"0xf47329f4344f3bf0f8e436e2f7b485466cff300f12a166563995d3888c296a94","transfer_fee::TransferFee":"0xf47329f4344f3bf0f8e436e2f7b485466cff300f12a166563995d3888c296a94","update_guardian_set::GovernanceWitness":"0xf47329f4344f3bf0f8e436e2f7b485466cff300f12a166563995d3888c296a94","update_guardian_set::GuardianSetAdded":"0xf47329f4344f3bf0f8e436e2f7b485466cff300f12a166563995d3888c296a94","update_guardian_set::UpdateGuardianSet":"0xf47329f4344f3bf0f8e436e2f7b485466cff300f12a166563995d3888c296a94","upgrade_contract::ContractUpgraded":"0xf47329f4344f3bf0f8e436e2f7b485466cff300f12a166563995d3888c296a94","upgrade_contract::GovernanceWitness":"0xf47329f4344f3bf0f8e436e2f7b485466cff300f12a166563995d3888c296a94","upgrade_contract::UpgradeContract":"0xf47329f4344f3bf0f8e436e2f7b485466cff300f12a166563995d3888c296a94","vaa::VAA":"0xf47329f4344f3bf0f8e436e2f7b485466cff300f12a166563995d3888c296a94","version_control::V__0_2_0":"0xf47329f4344f3bf0f8e436e2f7b485466cff300f12a166563995d3888c296a94","version_control::V__DUMMY":"0xf47329f4344f3bf0f8e436e2f7b485466cff300f12a166563995d3888c296a94"}}}};var _d=!1;_d||(Kd("testnet",Ed),hs("testnet"),_d=!0);function Qu(i,n=["<",">"]){let[a,r]=n,o=[],s="",c=0;for(let d=0;d<i.length;d++){let g=i[d];if(g===a&&c++,g===r&&c--,c===0&&g===","){o.push(s.trim()),s="";continue}s+=g}return o.push(s.trim()),o}function me(i){if(typeof i!="string")throw new Error(`Illegal type passed as a name of the type: ${i}`);let[n,a]=["<",">"],r=i.indexOf(n),o=Array.from(i).reverse().indexOf(a);if(r===-1&&o===-1)return{typeName:i,typeArgs:[]};if(r===-1||o===-1)throw new Error(`Unclosed generic in name '${i}'`);let s=i.slice(0,r),c=Qu(i.slice(r+1,i.length-o-1),[n,a]);return{typeName:s,typeArgs:c}}function $d(i){return!i||typeof i!="object"||Array.isArray(i)?!1:"GasCoin"in i||"Input"in i||"Result"in i||"NestedResult"in i}function L(i,n){return $d(n)?n:i.object(n)}function mt(i,n,a){if($d(n)){if(typeof n=="function")throw new Error("Transaction plugins are not supported");return L(i,n)}function r(l){let{typeName:A,typeArgs:u}=me(l);switch(A){case"bool":return B.Bool;case"u8":return B.U8;case"u16":return B.U16;case"u32":return B.U32;case"u64":return B.U64;case"u128":return B.U128;case"u256":return B.U256;case"address":return B.Address;case"0x1::string::String":case"0x1::ascii::String":return B.String;case"0x2::object::ID":return B.Address;case"0x1::option::Option":return B.option(r(u[0]));case"vector":return B.vector(r(u[0]));default:throw new Error(`invalid primitive type ${l}`)}}function o(l){for(let A of l){if(typeof A>"u"||A===null)return!0;if(Array.isArray(A))return o(A)}return!1}function s(l){for(let A of l){if(!Array.isArray(A)){if(A===null)continue;switch(typeof A){case"string":case"number":case"bigint":case"boolean":continue;default:return!1}}return s(A)}return!0}function c(l){for(let A of l){if(!Array.isArray(A))switch(typeof A){case"string":case"number":case"bigint":case"boolean":return!0;default:continue}return c(A)}return!1}let{typeName:d,typeArgs:g}=me(a);switch(d){case"0x1::option::Option":if(n===null)return i.pure.option("bool",null);if(s([n]))return i.pure(r(a).serialize(n));if(c([n]))throw new Error("mixing primitive and TransactionArgument values is not supported");return i.moveCall({target:"0x1::option::some",typeArguments:[g[0]],arguments:[mt(i,n,g[0])]});case"vector":if(!Array.isArray(n))throw new Error("expected an array for vector type");if(n.length===0)return i.pure(B.vector(B.Bool).serialize([]));if(o(n))throw new Error("the provided array contains undefined or null values");if(s(n))return i.pure(r(a).serialize(n));if(c(n))throw new Error("mixing primitive and TransactionArgument values is not supported");return i.makeMoveVec({type:g[0],elements:n});default:return i.pure(r(a).serialize(n))}}function Ku(i){let n=i.split("0x").join("");for(let a=0;a<n.length;a++)if(n[a]!=="0")return`0x${n.substring(a)}`;return"0x0"}function X(i){let{typeName:n,typeArgs:a}=me(i);switch(n){case"bool":case"u8":case"u16":case"u32":case"u64":case"u128":case"u256":case"address":case"signer":return n;case"vector":return`vector<${X(a[0])}>`;default:{let r=n.split("::");r[0]=Ku(r[0]);let o=r.join("::");return a.length>0?`${o}<${a.map(s=>X(s)).join(",")}>`:o}}}function ie(i,...n){return n.length>0?`${i}<${n.join(", ")}>`:i}function fs(i,n,a,r){return i.moveCall({target:`${rt("bridge",r?.env)}::bridge_interface::swap_and_bridge`,typeArguments:[n],arguments:[L(i,a.bridge),L(i,a.messenger),L(i,a.gasOracle),L(i,a.amount),L(i,a.recipient),mt(i,a.destinationChainId,"u8"),L(i,a.receiveToken),mt(i,a.nonce,"u256"),L(i,a.feeSuiCoin),L(i,a.feeTokenCoin)]})}function Rs(i,n,a,r){return i.moveCall({target:`${rt("bridge",r?.env)}::bridge_interface::swap_and_bridge_wormhole`,typeArguments:[n],arguments:[L(i,a.bridge),L(i,a.messenger),L(i,a.wormholeState),L(i,a.theClock),L(i,a.gasOracle),L(i,a.amount),L(i,a.recipient),mt(i,a.destinationChainId,"u8"),L(i,a.receiveToken),mt(i,a.nonce,"u256"),L(i,a.feeSuiCoin),L(i,a.feeTokenCoin)]})}function qd(i,n,a,r){return i.moveCall({target:`${rt("bridge",r?.env)}::bridge_interface::swap`,typeArguments:n,arguments:[L(i,a.bridge),L(i,a.coin),mt(i,a.receiveAmountMin,"u64")]})}function eg(i,n,a,r){return i.moveCall({target:`${rt("bridge",r?.env)}::bridge_interface::deposit`,typeArguments:[n],arguments:[L(i,a.bridge),L(i,a.userDeposit),L(i,a.coin)]})}function tg(i,n,a,r){return i.moveCall({target:`${rt("bridge",r?.env)}::bridge_interface::claim_reward`,typeArguments:[n],arguments:[L(i,a.bridge),L(i,a.userDeposit)]})}function ng(i,n,a,r){return i.moveCall({target:`${rt("bridge",r?.env)}::bridge_interface::withdraw`,typeArguments:[n],arguments:[L(i,a.bridge),L(i,a.userDeposit),mt(i,a.amountLp,"u64")]})}function ag(i,n,a,r){return i.moveCall({target:`${rt("bridge",r?.env)}::bridge_interface::pool`,typeArguments:[n],arguments:[L(i,a)]})}function ig(i,n,a){return i.moveCall({target:`${rt("bridge",a?.env)}::bridge_interface::new_user_deposit`,typeArguments:[n],arguments:[]})}function rg(i,n){sa("cctp-bridge",i,n)}function Ts(i,n,a,r){return i.moveCall({target:`${rt("cctp-bridge",r?.env)}::cctp_bridge_interface::bridge`,typeArguments:[n],arguments:[L(i,a.cctpBridge),L(i,a.gasOracle),L(i,a.tokenMessengerMinterState),L(i,a.messageTransmitterState),L(i,a.treasury),L(i,a.denyList),L(i,a.amount),L(i,a.feeSuiCoin),L(i,a.feeTokenCoin),mt(i,a.destinationChainId,"u8"),L(i,a.recipient),L(i,a.recipientWalletAddress)]})}function og(i,n){sa("utils",i,n)}var Bs=class i{__VectorClass=!0;static $typeName="vector";static $numTypeParams=1;static $isPhantom=[!1];$typeName="vector";$fullTypeName;$typeArgs;$isPhantom=[!1];elements;constructor(n,a){this.$fullTypeName=ie(this.$typeName,...n),this.$typeArgs=n,this.elements=a}static reified(n){return{typeName:i.$typeName,fullTypeName:ie(i.$typeName,M(n)),typeArgs:[M(n)],isPhantom:i.$isPhantom,reifiedTypeArgs:[n],fromFields:a=>i.fromFields(n,a),fromFieldsWithTypes:a=>i.fromFieldsWithTypes(n,a),fromBcs:a=>i.fromBcs(n,a),bcs:i.bcs($a(n)),fromJSONField:a=>i.fromJSONField(n,a),fromJSON:a=>i.fromJSON(n,a),new:a=>new i([M(n)],a),kind:"VectorClassReified"}}static get r(){return i.reified}static get bcs(){return B.vector}static fromFields(n,a){return i.reified(n).new(a.map(r=>ee(n,r)))}static fromFieldsWithTypes(n,a){return i.reified(n).new(a.map(r=>Q(n,r)))}static fromBcs(n,a){return i.fromFields(n,i.bcs($a(n)).parse(a))}toJSONField(){return this.elements.map(n=>kn(this.$typeArgs[0],n))}toJSON(){return{$typeName:this.$typeName,$typeArgs:this.$typeArgs,elements:this.toJSONField()}}static fromJSONField(n,a){return i.reified(n).new(a.map(r=>K(n,r)))}static fromJSON(n,a){if(a.$typeName!==i.$typeName)throw new Error("not a vector json object");return i.fromJSONField(n,a.elements)}};function ca(i){return Bs.r(i)}function he(i){return typeof i=="string"?{phantomType:i,kind:"PhantomReified"}:{get phantomType(){return i.fullTypeName},kind:"PhantomReified"}}var Eu=B.bytes(32).transform({input:i=>(0,de.fromHex)(i),output:i=>(0,de.toHex)(i)});function $a(i){switch(i){case"bool":return B.bool();case"u8":return B.u8();case"u16":return B.u16();case"u32":return B.u32();case"u64":return B.u64();case"u128":return B.u128();case"u256":return B.u256();case"address":return Eu;default:return i.bcs}}function M(i){switch(i){case"u8":case"u16":case"u32":case"u64":case"u128":case"u256":case"bool":case"address":return i}switch(i.kind){case"PhantomReified":return i.phantomType;case"StructClassReified":return i.fullTypeName;case"VectorClassReified":return i.fullTypeName;case"EnumClassReified":return i.fullTypeName}throw new Error("unreachable")}function ee(i,n){switch(i){case"bool":case"u8":case"u16":case"u32":return n;case"u64":case"u128":case"u256":return BigInt(n);case"address":return`0x${n}`}if(i.kind==="VectorClassReified")return i.fromFields(n).elements;switch(i.typeName){case"0x1::string::String":case"0x1::ascii::String":return new TextDecoder().decode(Uint8Array.from(n.bytes)).toString();case"0x2::url::Url":return new TextDecoder().decode(Uint8Array.from(n.url.bytes)).toString();case"0x2::object::ID":return`0x${n.bytes}`;case"0x2::object::UID":return`0x${n.id.bytes}`;case"0x1::type_name::TypeName":return new TextDecoder().decode(Uint8Array.from(n.name.bytes)).toString();case"0x1::option::Option":return n.vec.length===0?null:i.fromFields(n).vec[0];default:return i.fromFields(n)}}function Q(i,n){switch(i){case"bool":case"u8":case"u16":case"u32":return n;case"u64":case"u128":case"u256":return BigInt(n);case"address":return n}if(i.kind==="VectorClassReified")return i.fromFieldsWithTypes(n).elements;switch(i.typeName){case"0x1::string::String":case"0x1::ascii::String":case"0x2::url::Url":case"0x2::object::ID":return n;case"0x2::object::UID":return n.id;case"0x1::type_name::TypeName":return n.fields.name;case"0x2::balance::Balance":return i.fromFields({value:BigInt(n)});case"0x1::option::Option":return n===null?null:Q(i.reifiedTypeArgs[0],n);default:return i.fromFieldsWithTypes(n)}}function wt(i,n,a){if(a.length!==n.length)throw new Error(`provided item has mismatching number of type argments ${i} (expected ${a.length}, got ${n.length}))`);for(let r=0;r<n.length;r++)if(X(n[r])!==X(M(a[r])))throw new Error(`provided item has mismatching type argments ${i} (expected ${M(a[r])}, got ${n[r]}))`)}function Jt(i,n){let{typeArgs:a}=me(i.type);wt(i.type,a,n)}function kn(i,n){let{typeName:a,typeArgs:r}=me(i);switch(a){case"bool":return n;case"u8":case"u16":case"u32":return n;case"u64":case"u128":case"u256":return n.toString();case"address":case"signer":return n;case"vector":return n.map(o=>kn(r[0],o));case"0x1::string::String":case"0x1::ascii::String":case"0x2::url::Url":case"0x2::object::ID":case"0x2::object::UID":case"0x1::type_name::TypeName":return n;case"0x1::option::Option":return n===null?null:kn(r[0],n);default:return n.toJSONField()}}function K(i,n){switch(i){case"bool":case"u8":case"u16":case"u32":return n;case"u64":case"u128":case"u256":return BigInt(n);case"address":return n}if(i.kind==="VectorClassReified")return i.fromJSONField(n).elements;switch(i.typeName){case"0x1::string::String":case"0x1::ascii::String":case"0x2::url::Url":case"0x2::object::ID":case"0x2::object::UID":case"0x1::type_name::TypeName":return n;case"0x1::option::Option":return n===null?null:K(i.reifiedTypeArgs[0],n);default:return i.fromJSONField(n)}}function qa(i){return i=X(i),i==="0x1::string::String"}var hr=class i{__StructClass=!0;static $typeName="0x1::string::String";static $numTypeParams=0;static $isPhantom=[];$typeName=i.$typeName;$fullTypeName;$typeArgs;$isPhantom=i.$isPhantom;bytes;constructor(n,a){this.$fullTypeName=ie(i.$typeName,...n),this.$typeArgs=n,this.bytes=a.bytes}static reified(){let n=i.bcs;return{get typeName(){return i.$typeName},get fullTypeName(){return ie(i.$typeName)},typeArgs:[],isPhantom:i.$isPhantom,reifiedTypeArgs:[],fromFields:a=>i.fromFields(a),fromFieldsWithTypes:a=>i.fromFieldsWithTypes(a),fromBcs:a=>i.fromFields(n.parse(a)),bcs:n,fromJSONField:a=>i.fromJSONField(a),fromJSON:a=>i.fromJSON(a),fromCoreObject:a=>i.fromCoreObject(a),fromSuiParsedData:a=>i.fromSuiParsedData(a),fromSuiObjectData:a=>i.fromSuiObjectData(a),fetch:async(a,r)=>i.fetch(a,r),new:a=>new i([],a),kind:"StructClassReified"}}static get r(){return i.reified()}static phantom(){return he(i.reified())}static get p(){return i.phantom()}static instantiateBcs(){return B.struct("String",{bytes:B.vector(B.u8())})}static cachedBcs=null;static get bcs(){return i.cachedBcs||(i.cachedBcs=i.instantiateBcs()),i.cachedBcs}static fromFields(n){return i.reified().new({bytes:ee(ca("u8"),n.bytes)})}static fromFieldsWithTypes(n){if(!qa(n.type))throw new Error("not a String type");return i.reified().new({bytes:Q(ca("u8"),n.fields.bytes)})}static fromBcs(n){return i.fromFields(i.bcs.parse(n))}toJSONField(){return{bytes:kn("vector<u8>",this.bytes)}}toJSON(){return{$typeName:this.$typeName,$typeArgs:this.$typeArgs,...this.toJSONField()}}static fromJSONField(n){return i.reified().new({bytes:K(ca("u8"),n.bytes)})}static fromJSON(n){if(n.$typeName!==i.$typeName)throw new Error(`not a String json object: expected '${i.$typeName}' but got '${n.$typeName}'`);return i.fromJSONField(n)}static fromCoreObject(n){if(!qa(n.type))throw new Error(`object at ${n.objectId} is not a String object`);return i.fromBcs(n.content)}static fromSuiParsedData(n){if(n.dataType!=="moveObject")throw new Error("not an object");if(!qa(n.type))throw new Error(`object at ${n.fields.id} is not a String object`);return i.fromFieldsWithTypes(n)}static fromSuiObjectData(n){if(n.bcs){if(n.bcs.dataType!=="moveObject"||!qa(n.bcs.type))throw new Error("object at is not a String object");return i.fromBcs((0,de.fromBase64)(n.bcs.bcsBytes))}if(n.content)return i.fromSuiParsedData(n.content);throw new Error("Both `bcs` and `content` fields are missing from the data. Include `showBcs` or `showContent` in the request.")}static async fetch(n,a){let{object:r}=await n.core.getObject({objectId:a,include:{content:!0}});if(!qa(r.type))throw new Error(`object at id ${a} is not a String object`);return i.fromBcs(r.content)}};function ei(i){return i=X(i),i==="0x2::object::ID"}var Vn=class i{__StructClass=!0;static $typeName="0x2::object::ID";static $numTypeParams=0;static $isPhantom=[];$typeName=i.$typeName;$fullTypeName;$typeArgs;$isPhantom=i.$isPhantom;bytes;constructor(n,a){this.$fullTypeName=ie(i.$typeName,...n),this.$typeArgs=n,this.bytes=a.bytes}static reified(){let n=i.bcs;return{get typeName(){return i.$typeName},get fullTypeName(){return ie(i.$typeName)},typeArgs:[],isPhantom:i.$isPhantom,reifiedTypeArgs:[],fromFields:a=>i.fromFields(a),fromFieldsWithTypes:a=>i.fromFieldsWithTypes(a),fromBcs:a=>i.fromFields(n.parse(a)),bcs:n,fromJSONField:a=>i.fromJSONField(a),fromJSON:a=>i.fromJSON(a),fromCoreObject:a=>i.fromCoreObject(a),fromSuiParsedData:a=>i.fromSuiParsedData(a),fromSuiObjectData:a=>i.fromSuiObjectData(a),fetch:async(a,r)=>i.fetch(a,r),new:a=>new i([],a),kind:"StructClassReified"}}static get r(){return i.reified()}static phantom(){return he(i.reified())}static get p(){return i.phantom()}static instantiateBcs(){return B.struct("ID",{bytes:B.bytes(32).transform({input:n=>(0,de.fromHex)(n),output:n=>(0,de.toHex)(n)})})}static cachedBcs=null;static get bcs(){return i.cachedBcs||(i.cachedBcs=i.instantiateBcs()),i.cachedBcs}static fromFields(n){return i.reified().new({bytes:ee("address",n.bytes)})}static fromFieldsWithTypes(n){if(!ei(n.type))throw new Error("not a ID type");return i.reified().new({bytes:Q("address",n.fields.bytes)})}static fromBcs(n){return i.fromFields(i.bcs.parse(n))}toJSONField(){return{bytes:this.bytes}}toJSON(){return{$typeName:this.$typeName,$typeArgs:this.$typeArgs,...this.toJSONField()}}static fromJSONField(n){return i.reified().new({bytes:K("address",n.bytes)})}static fromJSON(n){if(n.$typeName!==i.$typeName)throw new Error(`not a ID json object: expected '${i.$typeName}' but got '${n.$typeName}'`);return i.fromJSONField(n)}static fromCoreObject(n){if(!ei(n.type))throw new Error(`object at ${n.objectId} is not a ID object`);return i.fromBcs(n.content)}static fromSuiParsedData(n){if(n.dataType!=="moveObject")throw new Error("not an object");if(!ei(n.type))throw new Error(`object at ${n.fields.id} is not a ID object`);return i.fromFieldsWithTypes(n)}static fromSuiObjectData(n){if(n.bcs){if(n.bcs.dataType!=="moveObject"||!ei(n.bcs.type))throw new Error("object at is not a ID object");return i.fromBcs((0,de.fromBase64)(n.bcs.bcsBytes))}if(n.content)return i.fromSuiParsedData(n.content);throw new Error("Both `bcs` and `content` fields are missing from the data. Include `showBcs` or `showContent` in the request.")}static async fetch(n,a){let{object:r}=await n.core.getObject({objectId:a,include:{content:!0}});if(!ei(r.type))throw new Error(`object at id ${a} is not a ID object`);return i.fromBcs(r.content)}};function ti(i){return i=X(i),i==="0x2::object::UID"}var bt=class i{__StructClass=!0;static $typeName="0x2::object::UID";static $numTypeParams=0;static $isPhantom=[];$typeName=i.$typeName;$fullTypeName;$typeArgs;$isPhantom=i.$isPhantom;id;constructor(n,a){this.$fullTypeName=ie(i.$typeName,...n),this.$typeArgs=n,this.id=a.id}static reified(){let n=i.bcs;return{get typeName(){return i.$typeName},get fullTypeName(){return ie(i.$typeName)},typeArgs:[],isPhantom:i.$isPhantom,reifiedTypeArgs:[],fromFields:a=>i.fromFields(a),fromFieldsWithTypes:a=>i.fromFieldsWithTypes(a),fromBcs:a=>i.fromFields(n.parse(a)),bcs:n,fromJSONField:a=>i.fromJSONField(a),fromJSON:a=>i.fromJSON(a),fromCoreObject:a=>i.fromCoreObject(a),fromSuiParsedData:a=>i.fromSuiParsedData(a),fromSuiObjectData:a=>i.fromSuiObjectData(a),fetch:async(a,r)=>i.fetch(a,r),new:a=>new i([],a),kind:"StructClassReified"}}static get r(){return i.reified()}static phantom(){return he(i.reified())}static get p(){return i.phantom()}static instantiateBcs(){return B.struct("UID",{id:Vn.bcs})}static cachedBcs=null;static get bcs(){return i.cachedBcs||(i.cachedBcs=i.instantiateBcs()),i.cachedBcs}static fromFields(n){return i.reified().new({id:ee(Vn.reified(),n.id)})}static fromFieldsWithTypes(n){if(!ti(n.type))throw new Error("not a UID type");return i.reified().new({id:Q(Vn.reified(),n.fields.id)})}static fromBcs(n){return i.fromFields(i.bcs.parse(n))}toJSONField(){return{id:this.id}}toJSON(){return{$typeName:this.$typeName,$typeArgs:this.$typeArgs,...this.toJSONField()}}static fromJSONField(n){return i.reified().new({id:K(Vn.reified(),n.id)})}static fromJSON(n){if(n.$typeName!==i.$typeName)throw new Error(`not a UID json object: expected '${i.$typeName}' but got '${n.$typeName}'`);return i.fromJSONField(n)}static fromCoreObject(n){if(!ti(n.type))throw new Error(`object at ${n.objectId} is not a UID object`);return i.fromBcs(n.content)}static fromSuiParsedData(n){if(n.dataType!=="moveObject")throw new Error("not an object");if(!ti(n.type))throw new Error(`object at ${n.fields.id} is not a UID object`);return i.fromFieldsWithTypes(n)}static fromSuiObjectData(n){if(n.bcs){if(n.bcs.dataType!=="moveObject"||!ti(n.bcs.type))throw new Error("object at is not a UID object");return i.fromBcs((0,de.fromBase64)(n.bcs.bcsBytes))}if(n.content)return i.fromSuiParsedData(n.content);throw new Error("Both `bcs` and `content` fields are missing from the data. Include `showBcs` or `showContent` in the request.")}static async fetch(n,a){let{object:r}=await n.core.getObject({objectId:a,include:{content:!0}});if(!ti(r.type))throw new Error(`object at id ${a} is not a UID object`);return i.fromBcs(r.content)}};function Wt(i,n,a){return i.moveCall({target:`${rt("utils",a?.env)}::bytes32::from_hex`,arguments:[mt(i,n,`${hr.$typeName}`)]})}async function Ot(i,n,a=[]){let r=await i(n),o=a.concat(r.data);return r.hasNextPage&&r.nextCursor?Ot(i,r.nextCursor,o):o}var da=class extends ke{constructor(a,r,o){super();this.nodeRpcUrlsConfig=a;this.params=r;this.api=o;this.client=new Sn({url:a.getNodeRpcUrl(this.chainSymbol),network:r.suiIsTestnet?"testnet":"mainnet"})}nodeRpcUrlsConfig;params;api;chainType="SUI";chainSymbol="SUI";client;send(){throw new f("Method send not implemented.")}async buildRawTransactionSwap(a){let r=a.sourceToken.suiAddresses;if(!r)throw new f("SUI token must contain 'suiAddresses'");on(r.bridgeAddress,r.bridgeAddressOrigin);let o=tt(this.chainType,a);return await this.buildRawTransactionSwapFromParams(o,r)}async buildRawTransactionSwapFromParams(a,r){let{amount:o,fromAccountAddress:s,fromTokenAddress:c,toTokenAddress:d,minimumReceiveAmount:g}=a,l=new pt;l.setSender(s);let A={bridge:r.bridgeObjectAddress,coin:pe({balance:BigInt(o),type:c}),receiveAmountMin:BigInt(g)},u=qd(l,[c,d],A),m=await Ot(y=>this.client.getCoins({owner:a.toAccountAddress,coinType:d,cursor:y}));return m.length===0||!m[0]?l.transferObjects([u],a.toAccountAddress):l.mergeCoins(m[0].coinObjectId,[u]),await l.toJSON({client:this.client})}async buildRawTransactionSendFromCustomTx(a,r,o){let s=pt.from(a);return this.buildRawTransactionSendFromTx(o,s,r)}async buildRawTransactionSend(a){return this.buildRawTransactionSendFromTx(a,new pt)}async buildRawTransactionSendFromTx(a,r,o){let s=await Ee(this.chainType,a,this.api),{messenger:c}=s,d=a.sourceToken.suiAddresses;if(!d)throw new f("SUI token must contain 'suiAddresses'");switch(on(d.bridgeAddress,d.bridgeAddressOrigin),og(d.utilsAddress),c){case 1:return this.buildRawTransactionAllbridgeSend(s,d,r,o);case 2:return this.buildRawTransactionWormholeSend(s,d,r,o);case 3:case 4:return this.buildRawTransactionCctpSend(a,s,d,r,o);case 6:throw new f("Messenger xReserve is not supported for SUI bridge");case 5:throw new Ze("Messenger OFT is not supported yet.")}}async buildRawTransactionAllbridgeSend(a,r,o,s){let{amount:c,fromAccountAddress:d,fromTokenAddress:g,toChainId:l,toAccountAddress:A,toTokenAddress:u,fee:m,gasFeePaymentMethod:y,extraGas:v}=a,C=m;switch(v&&(C=(0,vr.Big)(C).plus(v).toFixed()),o.setSender(d),y){case"native":{let R=C==="0"?pe({balance:BigInt(C),useGasCoin:!1}):pe({balance:BigInt(C)}),Y={bridge:r.bridgeObjectAddress,messenger:r.allbridgeMessengerObjectAddress,amount:s??pe({balance:BigInt(c),type:g}),destinationChainId:l,nonce:Pt(),recipient:Wt(o,Ct(A)),receiveToken:Wt(o,Ct(u)),gasOracle:r.gasOracleObjectAddress,feeTokenCoin:pe({balance:BigInt(0),type:g}),feeSuiCoin:R};fs(o,g,Y);break}case"stablecoin":{let R=BigInt(c)-BigInt(C),Y,h;if(s){let[G]=o.splitCoins(s,[C]);Y=s,h=G}else Y=pe({balance:R,type:g}),h=pe({balance:BigInt(C),type:g});let F={bridge:r.bridgeObjectAddress,messenger:r.allbridgeMessengerObjectAddress,amount:Y,destinationChainId:l,nonce:Pt(),recipient:Wt(o,Ct(A)),receiveToken:Wt(o,Ct(u)),gasOracle:r.gasOracleObjectAddress,feeTokenCoin:h,feeSuiCoin:pe({balance:BigInt(0),useGasCoin:!1})};fs(o,g,F);break}case"abr":throw new f("SUI bridge does not support ABR payment method");default:return se(y,"Unhandled FeePaymentMethod")}return await o.toJSON({client:this.client})}async buildRawTransactionWormholeSend(a,r,o,s){let{amount:c,fromAccountAddress:d,fromTokenAddress:g,toChainId:l,toAccountAddress:A,toTokenAddress:u,fee:m,gasFeePaymentMethod:y,extraGas:v}=a,C=m;switch(v&&(C=(0,vr.Big)(C).plus(v).toFixed()),o.setSender(d),y){case"native":{let R=C==="0"?pe({balance:BigInt(C),useGasCoin:!1}):pe({balance:BigInt(C)}),Y={bridge:r.bridgeObjectAddress,messenger:r.wormholeMessengerObjectAddress,wormholeState:r.wormholeStateObjectAddress,theClock:ia,amount:s??pe({balance:BigInt(c),type:g}),destinationChainId:l,nonce:Pt(),recipient:Wt(o,Ct(A)),receiveToken:Wt(o,Ct(u)),gasOracle:r.gasOracleObjectAddress,feeTokenCoin:pe({balance:BigInt(0),type:g}),feeSuiCoin:R};Rs(o,g,Y);break}case"stablecoin":{let R=BigInt(c)-BigInt(C),Y,h;if(s){let[G]=o.splitCoins(s,[C]);Y=s,h=G}else Y=pe({balance:R,type:g}),h=pe({balance:BigInt(C),type:g});let F={bridge:r.bridgeObjectAddress,messenger:r.wormholeMessengerObjectAddress,wormholeState:r.wormholeStateObjectAddress,theClock:ia,amount:Y,destinationChainId:l,nonce:Pt(),recipient:Wt(o,Ct(A)),receiveToken:Wt(o,Ct(u)),gasOracle:r.gasOracleObjectAddress,feeTokenCoin:h,feeSuiCoin:pe({balance:BigInt(0),useGasCoin:!1})};Rs(o,g,F);break}case"abr":throw new f("SUI bridge does not support ABR payment method");default:return se(y,"Unhandled FeePaymentMethod")}return await o.toJSON({client:this.client})}async buildRawTransactionCctpSend(a,r,o,s,c){let{amount:d,fromAccountAddress:g,fromTokenAddress:l,toChainId:A,toAccountAddress:u,fee:m,gasFeePaymentMethod:y,extraGas:v}=r;rg(o.cctpAddress,o.cctpAddressOrigin);let C=m;v&&(C=(0,vr.Big)(C).plus(v).toFixed()),s.setSender(g);let R=Wt(s,Ct(u)),Y;if(a.destinationToken.chainType==="SOLANA"){let h=await Ji(this.chainType,a.toAccountAddress,a.destinationToken.tokenAddress,this.nodeRpcUrlsConfig.getNodeRpcUrl("SOL"));Y=Wt(s,Ct(h))}else Y=R;switch(y){case"native":{let h=C==="0"?pe({balance:BigInt(C),useGasCoin:!1}):pe({balance:BigInt(C)}),F={cctpBridge:o.cctpObjectAddress,tokenMessengerMinterState:o.cctpTokenMessengerMinterStateObjectAddress,messageTransmitterState:o.cctpMessageTransmitterStateObjectAddress,treasury:o.cctpTreasuryObjectAddress,denyList:o.cctpDenyListObjectAddress,amount:c??pe({balance:BigInt(d),type:l}),destinationChainId:A,recipient:Y,recipientWalletAddress:R,gasOracle:o.gasOracleObjectAddress,feeTokenCoin:pe({balance:BigInt(0),type:l}),feeSuiCoin:h};Ts(s,l,F);break}case"stablecoin":{let h=BigInt(d)-BigInt(C),F,G;if(c){let[k]=s.splitCoins(c,[C]);F=c,G=k}else F=pe({balance:h,type:l}),G=pe({balance:BigInt(C),type:l});let N={cctpBridge:o.cctpObjectAddress,tokenMessengerMinterState:o.cctpTokenMessengerMinterStateObjectAddress,messageTransmitterState:o.cctpMessageTransmitterStateObjectAddress,treasury:o.cctpTreasuryObjectAddress,denyList:o.cctpDenyListObjectAddress,amount:F,destinationChainId:A,recipient:Y,recipientWalletAddress:R,gasOracle:o.gasOracleObjectAddress,feeTokenCoin:G,feeSuiCoin:pe({balance:BigInt(0),useGasCoin:!1})};Ts(s,l,N);break}case"abr":throw new f("SUI bridge does not support ABR payment method");default:return se(y,"Unhandled FeePaymentMethod")}return await s.toJSON({client:this.client})}};var dg=require("big.js");var sg=Ft(require("bn.js"));function fr(i){return"0x"+new sg.default(i).toString("hex")}function cg(i){return new Promise(n=>setTimeout(()=>n(),i))}async function Rr(i,n){let a=await i.trx.sign(n);if(!a.signature)throw new Rn("Transaction was not signed properly");let o=(await i.trx.sendRawTransaction(a)).transaction.txID;return await _u(i,o),{txId:o}}async function _u(i,n,a=1e4){let r=Date.now();for(;;){if(Date.now()-r>a)throw new Ln("Transaction not found");let o=await i.trx.getUnconfirmedTransactionInfo(n);if(!o?.receipt){await cg(2e3);continue}if(o.receipt.result==="SUCCESS")return o;throw new Ln(`Transaction status is ${o.receipt.result}`)}}var ni=class extends ke{constructor(a,r){super();this.tronWeb=a;this.api=r}tronWeb;api;chainType="TRX";async send(a){let r=await Ee(this.chainType,a,this.api),o=await this.buildRawTransactionSendFromParams(a,r);return await Rr(this.tronWeb,o)}async buildRawTransactionSwap(a){let r=tt(this.chainType,a);return await this.buildRawTransactionSwapFromParams(r)}async buildRawTransactionSwapFromParams(a){let{amount:r,contractAddress:o,fromAccountAddress:s,fromTokenAddress:c,toAccountAddress:d,toTokenAddress:g,minimumReceiveAmount:l}=a,A=[{type:"uint256",value:r},{type:"bytes32",value:c},{type:"bytes32",value:g},{type:"address",value:d},{type:"uint256",value:l}];return this.buildRawTransaction(o,"swap(uint256,bytes32,bytes32,address,uint256)",A,"0",s)}async buildRawTransactionSend(a){let r=await Ee(this.chainType,a,this.api);return this.buildRawTransactionSendFromParams(a,r)}async buildRawTransactionSendFromParams(a,r){let{amount:o,contractAddress:s,fromAccountAddress:c,fromTokenAddress:d,toChainId:g,toAccountAddress:l,toTokenAddress:A,messenger:u,fee:m,gasFeePaymentMethod:y,extraGas:v,extraGasDest:C}=r,R=m;v&&(R=(0,dg.Big)(R).plus(v).toFixed());let Y=Pt().toString(),h,F,G;switch(u){case 3:case 4:switch(y){case"native":{h=[{type:"uint256",value:o},{type:"bytes32",value:l},{type:"uint256",value:g},{type:"uint256",value:0}],F=R;break}case"stablecoin":{h=[{type:"uint256",value:o},{type:"bytes32",value:l},{type:"uint256",value:g},{type:"uint256",value:R}],F="0";break}case"abr":throw new f("TRX bridge does not support ABR payment method");default:return se(y,"Unhandled FeePaymentMethod")}G="bridge(uint256,bytes32,uint256,uint256)";break;case 5:switch(y){case"native":{h=[{type:"address",value:a.sourceToken.tokenAddress},{type:"uint256",value:o},{type:"bytes32",value:l},{type:"uint256",value:g},{type:"uint256",value:0},{type:"uint256",value:C??"0"},{type:"uint256",value:"10"}],F=R;break}case"stablecoin":{h=[{type:"address",value:a.sourceToken.tokenAddress},{type:"uint256",value:o},{type:"bytes32",value:l},{type:"uint256",value:g},{type:"uint256",value:R},{type:"uint256",value:C??"0"},{type:"uint256",value:"10"}],F="0";break}case"abr":throw new f("TRX bridge does not support ABR payment method");default:return se(y,"Unhandled FeePaymentMethod")}G="bridge(address,uint256,bytes32,uint256,uint256,uint256,uint256)";break;case 6:throw new f("Messenger xReserve is not supported for TRX bridge");case 1:case 2:switch(y){case"native":{h=[{type:"bytes32",value:d},{type:"uint256",value:o},{type:"bytes32",value:l},{type:"uint256",value:g},{type:"bytes32",value:A},{type:"uint256",value:Y},{type:"uint8",value:u},{type:"uint256",value:0}],F=R;break}case"stablecoin":{h=[{type:"bytes32",value:d},{type:"uint256",value:o},{type:"bytes32",value:l},{type:"uint256",value:g},{type:"bytes32",value:A},{type:"uint256",value:Y},{type:"uint8",value:u},{type:"uint256",value:R}],F="0";break}case"abr":throw new f("TRX bridge does not support ABR payment method");default:return se(y,"Unhandled FeePaymentMethod")}G="swapAndBridge(bytes32,uint256,bytes32,uint256,bytes32,uint256,uint8,uint256)";break}return this.buildRawTransaction(s,G,h,F,c)}async buildRawTransaction(a,r,o,s,c){let d=await this.tronWeb.transactionBuilder.triggerSmartContract(a,r,{callValue:+s},o,c);if(!d?.result?.result)throw new f("Unknown error: "+JSON.stringify(d,null,2));return d.transaction}};var Tr=class{constructor(n,a,r,o){this.api=n;this.nodeRpcUrlsConfig=a;this.params=r;this.tokenService=o;this.rawTxBuilder=new Oi(n,a,r,o)}api;nodeRpcUrlsConfig;params;tokenService;rawTxBuilder;async getAllowance(n,a){let r,o;a?(r=n,o=a):o=n;let s=Ha(o.token,o.messenger,o.gasFeePaymentMethod);return await this.tokenService.getAllowance({...o,spender:s},r)}async checkAllowance(n,a){let r,o;a?(r=n,o=a):o=n;let s=Ha(o.token,o.messenger,o.gasFeePaymentMethod);return this.tokenService.checkAllowance({...o,spender:s},r)}async approve(n,a){let r=Ha(a.token,a.messenger,a.gasFeePaymentMethod);return this.tokenService.approve(n,{...a,spender:r})}async send(n,a){return D(a.amount),O("amount",a.amount,a.sourceToken.decimals),zi(a.sourceToken.chainSymbol,this.api,this.nodeRpcUrlsConfig,this.params,n).send(a)}};function Ha(i,n=1,a="native"){if(a==="abr"){if(i.abrPayer)return i.abrPayer.payerAddress;throw new f("Token must contain 'abrPayer' for ABR payment method")}switch(n){case 3:if(i.cctpAddress)return i.cctpAddress;throw new we("Such route does not support CCTP protocol");case 4:if(i.cctpV2Address)return i.cctpV2Address;throw new we("Such route does not support CCTP V2 protocol");case 5:if(i.oftBridgeAddress)return i.oftBridgeAddress;throw new Ze("Such route does not support OFT protocol");case 6:if(i.xReserve?.bridgeAddress)return i.xReserve.bridgeAddress;throw new f("Such route does not support xReserve protocol");case 1:case 2:return i.bridgeAddress}}function zi(i,n,a,r,o){switch(x.getChainProperty(i).chainType){case"EVM":{if(o)return new xa(o,n,a);{let s=a.getNodeRpcUrl(i);return new xa(new lg.Web3(s),n,a)}}case"TRX":{if(o)return new ni(o,n);{let s=a.getNodeRpcUrl(i);return new ni(new gg.TronWeb({fullHost:s,solidityNode:s,eventServer:s}),n)}}case"SOLANA":return new qi(a.getNodeRpcUrl("SOL"),{wormholeMessengerProgramId:r.wormholeMessengerProgramId,solanaLookUpTable:r.solanaLookUpTable,cctpParams:r.cctpParams,jupiterParams:{jupiterUrl:r.jupiterUrl,jupiterApiKeyHeader:r.jupiterApiKeyHeader,jupiterMaxAccounts:r.jupiterMaxAccounts}},n);case"SRB":return new nr(a,r,n);case"SUI":return new da(a,r,n);case"ALG":if(o){let s=o,c=Ys.AlgorandClient.fromClients({algod:s});return new ja(c,n)}else{let s=a.getNodeRpcUrl(i),c=Ys.AlgorandClient.fromConfig({algodConfig:{server:s}});return new ja(c,n)}case"STX":{let s=a.getNodeRpcUrl(i);return new ar(s,r,n)}}}var Ns=require("@algorandfoundation/algokit-utils"),Tg=require("big.js");var $u=(i,n)=>i!==null&&Object.prototype.hasOwnProperty.call(i,n),Ag="__cache__",ws=function(i){return typeof i!="string"?Ag+JSON.stringify(i):Ag+i},Ws=class{constructor(n={defaultTtl:60*1e3}){this.cache={},this.defaultTtl=n.defaultTtl||60*1e3}put(n,a,r){let o=(r?r.ttl:void 0)||this.defaultTtl,s=(r?r.callback:void 0)||function(){},c=ws(n),d=this.cache[c];d&&clearTimeout(d.handle);let g=setTimeout(()=>this.remove(n),o);this.cache[c]={handle:g,data:a,callback:s}}get(n){let a=this.cache[ws(n)];return a&&a.data}remove(n){let a=ws(n),r=this.cache[a];r&&(clearTimeout(r.handle),delete this.cache[a],r.callback(n,r.data))}clear(){for(let n in this.cache)$u(this.cache,n)&&clearTimeout(this.cache[n].handle);this.cache={}}size(){return Object.keys(this.cache).length}},sn=Ws;var Bg=require("tronweb"),la=require("web3");var zt=require("big.js");function ug(i,n,a,r,o){let s=j(i,3),c=(0,zt.Big)(s),d=(0,zt.Big)(a),g=(0,zt.Big)(r).plus(o),l,A;if(d.eq(0)||g.eq(0)){let m=c.div(2);l=(0,zt.Big)(r).plus(m),A=(0,zt.Big)(o).plus(m)}else l=(0,zt.Big)(r).plus(c.mul(r).div(g)),A=(0,zt.Big)(o).plus(c.mul(o).div(g));return(0,zt.Big)(Qs(n,l.toFixed(),A.toFixed())).minus(d).toFixed()}function pg(i){let n=j(i,3);return(0,zt.Big)(n).round().toFixed()}var cn=require("algosdk");var mg=require("@algorandfoundation/algokit-utils/types/app-arc56"),ai=require("@algorandfoundation/algokit-utils/types/app-client"),qu=require("@algorandfoundation/algokit-utils/types/app-factory"),bg=require("algosdk"),Br={name:"Pool",structs:{},methods:[{name:"createApplication",args:[{type:"address",name:"owner"},{type:"address",name:"router"},{type:"uint64",name:"a"},{type:"uint64",name:"asset"},{type:"uint64",name:"feeShareBP"},{type:"uint64",name:"balanceRatioMinBP"}],returns:{type:"void"},actions:{create:["NoOp"],call:[]},readonly:!1,events:[],recommendations:{}},{name:"optInToApplication",args:[],returns:{type:"void"},actions:{create:[],call:["OptIn"]},readonly:!1,events:[],recommendations:{}},{name:"closeOutOfApplication",args:[{type:"uint64",name:"budget",defaultValue:{source:"literal",data:"AAAAAAAAC7g=",type:"uint64"}}],returns:{type:"void"},actions:{create:[],call:["CloseOut"]},readonly:!1,events:[{name:"RewardsClaimed",args:[{type:"address",name:"user"},{type:"uint64",name:"pending"}]},{name:"Withdraw",args:[{type:"address",name:"from"},{type:"uint64",name:"lpAmount"}]}],recommendations:{}},{name:"optInAsset",args:[],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,desc:"Opt-in the application account to the ASA stored in `this.asset`.\nThis performs an inner axfer of 0 to the app's own address.\nCall once after deploy (or whenever you change the asset).",events:[],recommendations:{}},{name:"deposit",args:[{type:"axfer",name:"assetTransferRef"},{type:"uint64",name:"budget",defaultValue:{source:"literal",data:"AAAAAAAAC7g=",type:"uint64"}}],returns:{type:"void"},actions:{create:[],call:["NoOp","OptIn"]},readonly:!1,events:[{name:"RewardsClaimed",args:[{type:"address",name:"user"},{type:"uint64",name:"pending"}]},{name:"Deposit",args:[{type:"address",name:"to"},{type:"uint64",name:"lpAmount"}]}],recommendations:{}},{name:"withdraw",args:[{type:"uint64",name:"amountLp",desc:"The Withdrawn amount"},{type:"uint64",name:"budget",defaultValue:{source:"literal",data:"AAAAAAAAC7g=",type:"uint64"}}],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[{name:"RewardsClaimed",args:[{type:"address",name:"user"},{type:"uint64",name:"pending"}]},{name:"Withdraw",args:[{type:"address",name:"from"},{type:"uint64",name:"lpAmount"}]}],recommendations:{}},{name:"swapToVUsd",args:[{type:"address",name:"user",desc:"The address of the sender."},{type:"uint64",name:"amount",desc:"The amount of tokens to swap."},{type:"bool",name:"zeroFee",desc:`When true it allows to swap without incurring any fees. It is intended for use with service
2
2
  accounts.`}],returns:{type:"uint64",desc:"returns the difference between the old and the new value of vUsdBalance"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[{name:"SwappedToVUsd",args:[{type:"address",name:"sender"},{type:"uint64",name:"tokenId"},{type:"uint64",name:"amount"},{type:"uint64",name:"vUsdAmount"},{type:"uint64",name:"fee"}]}],recommendations:{}},{name:"swapFromVUsd",args:[{type:"address",name:"user",desc:"The address of the recipient."},{type:"uint64",name:"amount",desc:"The amount of vUSD to swap."},{type:"uint64",name:"receiveAmountMin",desc:`The minimum amount of tokens required to be received during the swap, otherwise the
3
3
  transaction reverts.`},{type:"bool",name:"zeroFee",desc:`When true it allows to swap without incurring any fees. It is intended for use with service
4
4
  accounts.`}],returns:{type:"uint64",desc:"returns the difference between the old and the new value of vUsdBalance"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[{name:"SwappedFromVUsd",args:[{type:"address",name:"recipient"},{type:"uint64",name:"tokenId"},{type:"uint64",name:"vUsdAmount"},{type:"uint64",name:"amount"},{type:"uint64",name:"fee"}]}],recommendations:{}},{name:"setFeeShare",args:[{type:"uint64",name:"feeShareBP"}],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[],recommendations:{}},{name:"adjustTotalLpAmount",args:[],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[{name:"RewardsClaimed",args:[{type:"address",name:"user"},{type:"uint64",name:"pending"}]},{name:"Deposit",args:[{type:"address",name:"to"},{type:"uint64",name:"lpAmount"}]}],recommendations:{}},{name:"setBalanceRatioMinBP",args:[{type:"uint64",name:"balanceRatioMinBP"}],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[],recommendations:{}},{name:"stopDeposit",args:[],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[],recommendations:{}},{name:"startDeposit",args:[],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[],recommendations:{}},{name:"stopWithdraw",args:[],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[],recommendations:{}},{name:"startWithdraw",args:[],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[],recommendations:{}},{name:"setStopAuthority",args:[{type:"address",name:"stopAuthority"}],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[],recommendations:{}},{name:"setRouter",args:[{type:"address",name:"router"}],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[],recommendations:{}},{name:"claimRewards",args:[],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[{name:"RewardsClaimed",args:[{type:"address",name:"user"},{type:"uint64",name:"pending"}]}],recommendations:{}},{name:"setAdminFeeShare",args:[{type:"uint64",name:"adminFeeShareBP"}],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[],recommendations:{}},{name:"claimAdminFee",args:[],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[],recommendations:{}},{name:"pendingReward",args:[{type:"address",name:"user"}],returns:{type:"uint64"},actions:{create:[],call:["NoOp"]},readonly:!0,events:[],recommendations:{}},{name:"transferOwnership",args:[{type:"address",name:"newOwner"}],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[],recommendations:{}}],arcs:[22,28],desc:`4AD - D = 4A(x + y) - (D\xB3 / 4xy)
5
5
  X - is value of real stable token
6
- Y - is value of virtual usd`,networks:{},state:{schema:{global:{ints:15,bytes:4},local:{ints:2,bytes:0}},keys:{global:{feeShareBP:{keyType:"AVMString",valueType:"AVMUint64",key:"ZmVlU2hhcmVCUA=="},router:{keyType:"AVMString",valueType:"address",key:"cm91dGVy"},tokenBalance:{keyType:"AVMString",valueType:"AVMUint64",key:"dG9rZW5CYWxhbmNl"},vUsdBalance:{keyType:"AVMString",valueType:"AVMUint64",key:"dlVzZEJhbGFuY2U="},balanceRatioMinBP:{keyType:"AVMString",valueType:"AVMUint64",key:"YmFsYW5jZVJhdGlvTWluQlA="},reserves:{keyType:"AVMString",valueType:"AVMUint64",key:"cmVzZXJ2ZXM="},a:{keyType:"AVMString",valueType:"AVMUint64",key:"YQ=="},d:{keyType:"AVMString",valueType:"AVMUint64",key:"ZA=="},tokenAmountReduce:{keyType:"AVMString",valueType:"AVMUint64",key:"dG9rZW5BbW91bnRSZWR1Y2U="},tokenAmountIncrease:{keyType:"AVMString",valueType:"AVMUint64",key:"dG9rZW5BbW91bnRJbmNyZWFzZQ=="},stopAuthority:{keyType:"AVMString",valueType:"address",key:"c3RvcEF1dGhvcml0eQ=="},canDeposit:{keyType:"AVMString",valueType:"AVMUint64",key:"Y2FuRGVwb3NpdA=="},canWithdraw:{keyType:"AVMString",valueType:"AVMUint64",key:"Y2FuV2l0aGRyYXc="},asset:{keyType:"AVMString",valueType:"AVMUint64",key:"YXNzZXQ="},adminFeeShareBP:{keyType:"AVMString",valueType:"AVMUint64",key:"YWRtaW5GZWVTaGFyZUJQ"},totalSupply:{keyType:"AVMString",valueType:"AVMUint64",key:"dG90YWxTdXBwbHk="},accRewardPerShareP:{keyType:"AVMString",valueType:"AVMBytes",key:"YWNjUmV3YXJkUGVyU2hhcmVQ"},adminFeeAmount:{keyType:"AVMString",valueType:"AVMUint64",key:"YWRtaW5GZWVBbW91bnQ="},owner:{keyType:"AVMString",valueType:"address",key:"b3duZXI="}},local:{balance:{keyType:"AVMString",valueType:"AVMUint64",key:"YmFsYW5jZQ=="},userRewardDebt:{keyType:"AVMString",valueType:"AVMUint64",key:"dXNlclJld2FyZERlYnQ="}},box:{}},maps:{global:{},local:{},box:{}}},bareActions:{create:[],call:[]},sourceInfo:{approval:{sourceInfo:[{pc:[2040],errorMessage:'"Pool: withdraw prohibited'},{pc:[984],errorMessage:"Asset must go to app"},{pc:[998],errorMessage:"CloseTo not allowed"},{pc:[548],errorMessage:"OnCompletion must be CloseOut && can only call when not creating"},{pc:[372],errorMessage:"OnCompletion must be NoOp"},{pc:[559],errorMessage:"OnCompletion must be OptIn && can only call when not creating"},{pc:[536],errorMessage:"OnCompletion must be one of NoOp, OptIn && can only call when not creating"},{pc:[3277],errorMessage:"Only owner"},{pc:[955],errorMessage:"Pool: deposit prohibited"},{pc:[1959],errorMessage:"Pool: is not stopAuthority"},{pc:[2024],errorMessage:"Pool: low token balance"},{pc:[2e3],errorMessage:"Pool: low vUSD balance"},{pc:[1949],errorMessage:"Pool: only router"},{pc:[1480,2289],errorMessage:"Pool: reserves"},{pc:[1521],errorMessage:"Pool: slippage"},{pc:[1605,1667],errorMessage:"Pool: too large"},{pc:[1008],errorMessage:"Pool: too little"},{pc:[1100],errorMessage:"Pool: too much"},{pc:[2308],errorMessage:"Pool: zero D changes"},{pc:[2278],errorMessage:"Pool: zero changes"},{pc:[991],errorMessage:"Rekey not allowed"},{pc:[855],errorMessage:"RewardManager: claim rewards before close out"},{pc:[2061],errorMessage:"RewardManager: not enough amount"},{pc:[1851],errorMessage:"RewardManager: too high"},{pc:[850],errorMessage:"RewardManager: withdraw LP before close out"},{pc:[977],errorMessage:"Wrong asset"},{pc:[757],errorMessage:"asset exists"},{pc:[750,865,954,966,975,1013,1028,1038,1057,1067,1081,1091,1106,1144,1243,1274,1285,1294,1304,1312,1329,1426,1449,1471,1496,1526,1549,1623,1634,1767,1804,1869,1877,1882,1947,1957,1971,1981,1998,2022,2039,2045,2069,2122,2154,2206,2210,2248,2275,2283,2304,2313,2349,2358,2506,2511,2519,2627,2635,2676,2684,3037,3065,3073,3091,3111,3125,3186,3220,3275],errorMessage:"check GlobalState exists"},{pc:[832,848,1757,1784,2056,2093,2108,3031,3051,3136,3158,3172],errorMessage:"check LocalState exists"},{pc:[1220,1407],errorMessage:"invalid number of bytes for arc4.bool"},{pc:[669,677,1202,1379,1717,1734,1912,1931],errorMessage:"invalid number of bytes for arc4.static_array<arc4.uint8, 32>"},{pc:[685,694,703,712,820,932,1177,1186,1210,1387,1397,1596,1658,1842],errorMessage:"invalid number of bytes for arc4.uint64"},{pc:[2724],errorMessage:"n must be non-negative"},{pc:[1127,1158,2230,2262],errorMessage:"overflow"},{pc:[924],errorMessage:"transaction type is axfer"}],pcOffsetMethod:"none"},clear:{sourceInfo:[],pcOffsetMethod:"none"}},source:{approval:"I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMCAxIDggMzIgMTAwMDAKICAgIGJ5dGVjYmxvY2sgInRva2VuQmFsYW5jZSIgInZVc2RCYWxhbmNlIiAiYXNzZXQiICJiYWxhbmNlIiAicmVzZXJ2ZXMiICJ1c2VyUmV3YXJkRGVidCIgImQiICJ0b3RhbFN1cHBseSIgImFjY1Jld2FyZFBlclNoYXJlUCIgMHgwMTAwMDAwMDAwMDAwMCAweDAxICJhZG1pbkZlZUFtb3VudCIgImNhbkRlcG9zaXQiICJjYW5XaXRoZHJhdyIgIm93bmVyIiAiZmVlU2hhcmVCUCIgImJhbGFuY2VSYXRpb01pbkJQIiAweDAyICJhZG1pbkZlZVNoYXJlQlAiICJhIiAicm91dGVyIiAic3RvcEF1dGhvcml0eSIgInRva2VuQW1vdW50UmVkdWNlIiAidG9rZW5BbW91bnRJbmNyZWFzZSIgMHgxNTFmN2M3NSAweGJhODE4MDc2IDB4MDMgMHgwNjgxMDEgMHgwMTAwMDAwMDAwMDAwMDAwMDAKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBibnogbWFpbl9hZnRlcl9pZl9lbHNlQDIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoyOAogICAgLy8gYWRtaW5GZWVTaGFyZUJQID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogQlAgLyA1IH0pOyAvLyBEZWZhdWx0IGFkbWluIGZlZSBpcyAyMCUKICAgIGJ5dGVjIDE4IC8vICJhZG1pbkZlZVNoYXJlQlAiCiAgICBwdXNoaW50IDIwMDAgLy8gMjAwMAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoyOQogICAgLy8gdG90YWxTdXBwbHkgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgYnl0ZWMgNyAvLyAidG90YWxTdXBwbHkiCiAgICBpbnRjXzAgLy8gMAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czozMAogICAgLy8gYWNjUmV3YXJkUGVyU2hhcmVQID0gR2xvYmFsU3RhdGU8YmlndWludD4oeyBpbml0aWFsVmFsdWU6IDBuIH0pOwogICAgYnl0ZWMgOCAvLyAiYWNjUmV3YXJkUGVyU2hhcmVQIgogICAgcHVzaGJ5dGVzIDB4CiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjMxCiAgICAvLyBhZG1pbkZlZUFtb3VudCA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBieXRlYyAxMSAvLyAiYWRtaW5GZWVBbW91bnQiCiAgICBpbnRjXzAgLy8gMAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ2CiAgICAvLyB0b2tlbkJhbGFuY2UgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgYnl0ZWNfMCAvLyAidG9rZW5CYWxhbmNlIgogICAgaW50Y18wIC8vIDAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NwogICAgLy8gdlVzZEJhbGFuY2UgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgYnl0ZWNfMSAvLyAidlVzZEJhbGFuY2UiCiAgICBpbnRjXzAgLy8gMAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ5CiAgICAvLyByZXNlcnZlcyA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBieXRlYyA0IC8vICJyZXNlcnZlcyIKICAgIGludGNfMCAvLyAwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NTEKICAgIC8vIGQgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgYnl0ZWMgNiAvLyAiZCIKICAgIGludGNfMCAvLyAwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NTcKICAgIC8vIGNhbkRlcG9zaXQgPSBHbG9iYWxTdGF0ZTxib29sZWFuPih7IGluaXRpYWxWYWx1ZTogdHJ1ZSB9KTsvLyBpcyBkZXBvc2l0IG9wZXJhdGlvbiBhbGxvd2VkCiAgICBieXRlYyAxMiAvLyAiY2FuRGVwb3NpdCIKICAgIGludGNfMSAvLyAxCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NTgKICAgIC8vIGNhbldpdGhkcmF3ID0gR2xvYmFsU3RhdGU8Ym9vbGVhbj4oeyBpbml0aWFsVmFsdWU6IHRydWUgfSk7Ly8gaXMgd2l0aGRyYXduIG9wZXJhdGlvbiBhbGxvd2VkCiAgICBieXRlYyAxMyAvLyAiY2FuV2l0aGRyYXciCiAgICBpbnRjXzEgLy8gMQogICAgYXBwX2dsb2JhbF9wdXQKCm1haW5fYWZ0ZXJfaWZfZWxzZUAyOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MzgKICAgIC8vIGV4cG9ydCBjbGFzcyBQb29sIGV4dGVuZHMgUmV3YXJkTWFuYWdlciBpbXBsZW1lbnRzIENvbnZlbnRpb25hbFJvdXRpbmcgewogICAgcHVzaGJ5dGVzcyAweDAxYTNhM2ZmIDB4MDQ1OWI3YWMgMHg5YjRiODIzNCAvLyBtZXRob2QgIm9wdEluVG9BcHBsaWNhdGlvbigpdm9pZCIsIG1ldGhvZCAiY2xvc2VPdXRPZkFwcGxpY2F0aW9uKHVpbnQ2NCl2b2lkIiwgbWV0aG9kICJkZXBvc2l0KGF4ZmVyLHVpbnQ2NCl2b2lkIgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAogICAgbWF0Y2ggbWFpbl9vcHRJblRvQXBwbGljYXRpb25fcm91dGVANCBtYWluX2Nsb3NlT3V0T2ZBcHBsaWNhdGlvbl9yb3V0ZUA1IG1haW5fZGVwb3NpdF9yb3V0ZUA2CgptYWluX3N3aXRjaF9jYXNlX25leHRANzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjM4CiAgICAvLyBleHBvcnQgY2xhc3MgUG9vbCBleHRlbmRzIFJld2FyZE1hbmFnZXIgaW1wbGVtZW50cyBDb252ZW50aW9uYWxSb3V0aW5nIHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gbXVzdCBiZSBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYnogbWFpbl9jcmVhdGVfTm9PcEAyOAogICAgcHVzaGJ5dGVzcyAweDc2MTBhNDYwIDB4ZTNhZWIyNWMgMHhkOTc4YWQxNCAweDBkMWI0YzA2IDB4NzViZjlhMjggMHhmNDkzZDdlZCAweDhkNWNiNmRmIDB4ZmUwNGE1Y2UgMHgwMjhlMDg1OSAweDQxZmM5NjZlIDB4YWJmMjAwMTQgMHgwNGIxNjFmMSAweDY2NTkxY2NmIDB4YTVhZTZiZDEgMHhhMDRjNWJjNCAweDM2MWI2MTU5IDB4NTM4ZTkxMjcgMHhlMTdiYWZiNCAvLyBtZXRob2QgIm9wdEluQXNzZXQoKXZvaWQiLCBtZXRob2QgIndpdGhkcmF3KHVpbnQ2NCx1aW50NjQpdm9pZCIsIG1ldGhvZCAic3dhcFRvVlVzZChhZGRyZXNzLHVpbnQ2NCxib29sKXVpbnQ2NCIsIG1ldGhvZCAic3dhcEZyb21WVXNkKGFkZHJlc3MsdWludDY0LHVpbnQ2NCxib29sKXVpbnQ2NCIsIG1ldGhvZCAic2V0RmVlU2hhcmUodWludDY0KXZvaWQiLCBtZXRob2QgImFkanVzdFRvdGFsTHBBbW91bnQoKXZvaWQiLCBtZXRob2QgInNldEJhbGFuY2VSYXRpb01pbkJQKHVpbnQ2NCl2b2lkIiwgbWV0aG9kICJzdG9wRGVwb3NpdCgpdm9pZCIsIG1ldGhvZCAic3RhcnREZXBvc2l0KCl2b2lkIiwgbWV0aG9kICJzdG9wV2l0aGRyYXcoKXZvaWQiLCBtZXRob2QgInN0YXJ0V2l0aGRyYXcoKXZvaWQiLCBtZXRob2QgInNldFN0b3BBdXRob3JpdHkoYWRkcmVzcyl2b2lkIiwgbWV0aG9kICJzZXRSb3V0ZXIoYWRkcmVzcyl2b2lkIiwgbWV0aG9kICJjbGFpbVJld2FyZHMoKXZvaWQiLCBtZXRob2QgInNldEFkbWluRmVlU2hhcmUodWludDY0KXZvaWQiLCBtZXRob2QgImNsYWltQWRtaW5GZWUoKXZvaWQiLCBtZXRob2QgInBlbmRpbmdSZXdhcmQoYWRkcmVzcyl1aW50NjQiLCBtZXRob2QgInRyYW5zZmVyT3duZXJzaGlwKGFkZHJlc3Mpdm9pZCIKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDAKICAgIG1hdGNoIG9wdEluQXNzZXQgd2l0aGRyYXcgc3dhcFRvVlVzZCBzd2FwRnJvbVZVc2Qgc2V0RmVlU2hhcmUgYWRqdXN0VG90YWxMcEFtb3VudCBzZXRCYWxhbmNlUmF0aW9NaW5CUCBzdG9wRGVwb3NpdCBzdGFydERlcG9zaXQgc3RvcFdpdGhkcmF3IHN0YXJ0V2l0aGRyYXcgc2V0U3RvcEF1dGhvcml0eSBzZXRSb3V0ZXIgY2xhaW1SZXdhcmRzIHNldEFkbWluRmVlU2hhcmUgY2xhaW1BZG1pbkZlZSBwZW5kaW5nUmV3YXJkIHRyYW5zZmVyT3duZXJzaGlwCiAgICBlcnIKCm1haW5fY3JlYXRlX05vT3BAMjg6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozOAogICAgLy8gZXhwb3J0IGNsYXNzIFBvb2wgZXh0ZW5kcyBSZXdhcmRNYW5hZ2VyIGltcGxlbWVudHMgQ29udmVudGlvbmFsUm91dGluZyB7CiAgICBwdXNoYnl0ZXMgMHg1MTZkMzQ3YiAvLyBtZXRob2QgImNyZWF0ZUFwcGxpY2F0aW9uKGFkZHJlc3MsYWRkcmVzcyx1aW50NjQsdWludDY0LHVpbnQ2NCx1aW50NjQpdm9pZCIKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDAKICAgIG1hdGNoIGNyZWF0ZUFwcGxpY2F0aW9uCiAgICBlcnIKCm1haW5fZGVwb3NpdF9yb3V0ZUA2OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MTUwCiAgICAvLyBAYWJpbWV0aG9kKHsgYWxsb3dBY3Rpb25zOiBbJ05vT3AnLCAnT3B0SW4nXSwgZGVmYXVsdEFyZ3VtZW50czogeyBidWRnZXQ6IHsgY29uc3RhbnQ6IDMwMDAgfSB9IH0pCiAgICBpbnRjXzEgLy8gMQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgc2hsCiAgICBwdXNoaW50IDMgLy8gMwogICAgJgogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgICYmCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIG11c3QgYmUgb25lIG9mIE5vT3AsIE9wdEluICYmIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGIgZGVwb3NpdAoKbWFpbl9jbG9zZU91dE9mQXBwbGljYXRpb25fcm91dGVANToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjg0CiAgICAvLyBAYWJpbWV0aG9kKHsgZGVmYXVsdEFyZ3VtZW50czogeyBidWRnZXQ6IHsgY29uc3RhbnQ6IDMwMDAgfSB9IH0pCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBwdXNoaW50IDIgLy8gQ2xvc2VPdXQKICAgID09CiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgJiYKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gbXVzdCBiZSBDbG9zZU91dCAmJiBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBiIGNsb3NlT3V0T2ZBcHBsaWNhdGlvbgoKbWFpbl9vcHRJblRvQXBwbGljYXRpb25fcm91dGVANDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjczCiAgICAvLyBvcHRJblRvQXBwbGljYXRpb24oKTogdm9pZCB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBpbnRjXzEgLy8gT3B0SW4KICAgID09CiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgJiYKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gbXVzdCBiZSBPcHRJbiAmJiBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBiIG9wdEluVG9BcHBsaWNhdGlvbgoKCi8vIF9wdXlhX2xpYi51dGlsLmVuc3VyZV9idWRnZXQocmVxdWlyZWRfYnVkZ2V0OiB1aW50NjQsIGZlZV9zb3VyY2U6IHVpbnQ2NCkgLT4gdm9pZDoKZW5zdXJlX2J1ZGdldDoKICAgIHByb3RvIDIgMAogICAgZnJhbWVfZGlnIC0yCiAgICBwdXNoaW50IDEwIC8vIDEwCiAgICArCgplbnN1cmVfYnVkZ2V0X3doaWxlX3RvcEAxOgogICAgZnJhbWVfZGlnIDAKICAgIGdsb2JhbCBPcGNvZGVCdWRnZXQKICAgID4KICAgIGJ6IGVuc3VyZV9idWRnZXRfYWZ0ZXJfd2hpbGVANgogICAgaXR4bl9iZWdpbgogICAgcHVzaGludCA2IC8vIGFwcGwKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIHB1c2hpbnQgNSAvLyBEZWxldGVBcHBsaWNhdGlvbgogICAgaXR4bl9maWVsZCBPbkNvbXBsZXRpb24KICAgIGJ5dGVjIDI3IC8vIDB4MDY4MTAxCiAgICBpdHhuX2ZpZWxkIEFwcHJvdmFsUHJvZ3JhbQogICAgYnl0ZWMgMjcgLy8gMHgwNjgxMDEKICAgIGl0eG5fZmllbGQgQ2xlYXJTdGF0ZVByb2dyYW0KICAgIGZyYW1lX2RpZyAtMQogICAgc3dpdGNoIGVuc3VyZV9idWRnZXRfc3dpdGNoX2Nhc2VfMEAzIGVuc3VyZV9idWRnZXRfc3dpdGNoX2Nhc2VfMUA0CgplbnN1cmVfYnVkZ2V0X3N3aXRjaF9jYXNlX25leHRANToKICAgIGl0eG5fc3VibWl0CiAgICBiIGVuc3VyZV9idWRnZXRfd2hpbGVfdG9wQDEKCmVuc3VyZV9idWRnZXRfc3dpdGNoX2Nhc2VfMUA0OgogICAgZ2xvYmFsIE1pblR4bkZlZQogICAgaXR4bl9maWVsZCBGZWUKICAgIGIgZW5zdXJlX2J1ZGdldF9zd2l0Y2hfY2FzZV9uZXh0QDUKCmVuc3VyZV9idWRnZXRfc3dpdGNoX2Nhc2VfMEAzOgogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICBiIGVuc3VyZV9idWRnZXRfc3dpdGNoX2Nhc2VfbmV4dEA1CgplbnN1cmVfYnVkZ2V0X2FmdGVyX3doaWxlQDY6CiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3V0aWxzLmFsZ28udHM6OmJpZ3VpbnRUb1VpbnQ2NE1vZHVsbyh2OiBieXRlcykgLT4gdWludDY0OgpiaWd1aW50VG9VaW50NjRNb2R1bG86CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3V0aWxzLmFsZ28udHM6MTUKICAgIC8vIGV4cG9ydCBmdW5jdGlvbiBiaWd1aW50VG9VaW50NjRNb2R1bG8odjogYmlndWludCk6IHVpbnQ2NCB7CiAgICBwcm90byAxIDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvdXRpbHMuYWxnby50czoxNwogICAgLy8gY29uc3QgbGVuID0gb3AubGVuKGIpOwogICAgZnJhbWVfZGlnIC0xCiAgICBsZW4KICAgIGR1cAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy91dGlscy5hbGdvLnRzOjE4CiAgICAvLyBjb25zdCBzdGFydDogdWludDY0ID0gbGVuID4gOCA/IChsZW4gLSA4KSA6IDA7CiAgICBpbnRjXzIgLy8gOAogICAgPgogICAgYnogYmlndWludFRvVWludDY0TW9kdWxvX3Rlcm5hcnlfZmFsc2VAMgogICAgZnJhbWVfZGlnIDAKICAgIGludGNfMiAvLyA4CiAgICAtCgpiaWd1aW50VG9VaW50NjRNb2R1bG9fdGVybmFyeV9tZXJnZUAzOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy91dGlscy5hbGdvLnRzOjE5CiAgICAvLyBjb25zdCBsYXN0OCA9IGIuc2xpY2Uoc3RhcnQpOyAgICAgICAgICAgLy8ga2VlcCBsZWFzdC1zaWduaWZpY2FudCA4IGJ5dGVzCiAgICBkdXAKICAgIGZyYW1lX2RpZyAwCiAgICBkdXAKICAgIGNvdmVyIDMKICAgID49CiAgICBkaWcgMgogICAgc3dhcAogICAgc2VsZWN0CiAgICBmcmFtZV9kaWcgLTEKICAgIHN3YXAKICAgIHVuY292ZXIgMgogICAgc3Vic3RyaW5nMwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy91dGlscy5hbGdvLnRzOjIwCiAgICAvLyByZXR1cm4gb3AuYnRvaShsYXN0OCk7ICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNvbnZlcnQgdG8gdWludDY0CiAgICBidG9pCiAgICBzd2FwCiAgICByZXRzdWIKCmJpZ3VpbnRUb1VpbnQ2NE1vZHVsb190ZXJuYXJ5X2ZhbHNlQDI6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3V0aWxzLmFsZ28udHM6MTgKICAgIC8vIGNvbnN0IHN0YXJ0OiB1aW50NjQgPSBsZW4gPiA4ID8gKGxlbiAtIDgpIDogMDsKICAgIGludGNfMCAvLyAwCiAgICBiIGJpZ3VpbnRUb1VpbnQ2NE1vZHVsb190ZXJuYXJ5X21lcmdlQDMKCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo6UG9vbC5jcmVhdGVBcHBsaWNhdGlvbltyb3V0aW5nXSgpIC0+IHZvaWQ6CmNyZWF0ZUFwcGxpY2F0aW9uOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NjAKICAgIC8vIGNyZWF0ZUFwcGxpY2F0aW9uKG93bmVyOiBBZGRyZXNzLCByb3V0ZXI6IEFkZHJlc3MsIGE6IHVpbnQ2NCwgYXNzZXQ6IEFzc2V0LCBmZWVTaGFyZUJQOiB1aW50NjQsIGJhbGFuY2VSYXRpb01pbkJQOiB1aW50NjQpOiB2b2lkIHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzMgLy8gMzIKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQuc3RhdGljX2FycmF5PGFyYzQudWludDgsIDMyPgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZHVwCiAgICBsZW4KICAgIGludGNfMyAvLyAzMgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC5zdGF0aWNfYXJyYXk8YXJjNC51aW50OCwgMzI+CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAzCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyA0CiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyA1CiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyA2CiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL293bmFibGUuYWxnby50czo2CiAgICAvLyBwcm90ZWN0ZWQgb3duZXIgPSBHbG9iYWxTdGF0ZTxBZGRyZXNzPigpOwogICAgYnl0ZWMgMTQgLy8gIm93bmVyIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9vd25hYmxlLmFsZ28udHM6OQogICAgLy8gdGhpcy5vd25lci52YWx1ZSA9IG93bmVyOwogICAgZGlnIDYKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MjcKICAgIC8vIGFzc2V0ID0gR2xvYmFsU3RhdGU8QXNzZXQ+KCk7CiAgICBieXRlY18yIC8vICJhc3NldCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czozOAogICAgLy8gdGhpcy5hc3NldC52YWx1ZSA9IGFzc2V0OwogICAgdW5jb3ZlciAzCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NTAKICAgIC8vIGEgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KCk7CiAgICBieXRlYyAxOSAvLyAiYSIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjYyCiAgICAvLyB0aGlzLmEudmFsdWUgPSBhOwogICAgdW5jb3ZlciAzCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDUKICAgIC8vIHJvdXRlciA9IEdsb2JhbFN0YXRlPEFkZHJlc3M+KCk7Ly8gaXMgZGVwb3NpdCBvcGVyYXRpb24gYWxsb3dlZAogICAgYnl0ZWMgMjAgLy8gInJvdXRlciIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjYzCiAgICAvLyB0aGlzLnJvdXRlci52YWx1ZSA9IHJvdXRlcjsKICAgIHVuY292ZXIgMwogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjU2CiAgICAvLyBwcml2YXRlIHN0b3BBdXRob3JpdHkgPSBHbG9iYWxTdGF0ZTxBZGRyZXNzPigpOy8vIGNhbiByZXN0cmljdCBkZXBvc2l0IG9yIHdpdGhkcmF3IG9wZXJhdGlvbnMKICAgIGJ5dGVjIDIxIC8vICJzdG9wQXV0aG9yaXR5IgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NjQKICAgIC8vIHRoaXMuc3RvcEF1dGhvcml0eS52YWx1ZSA9IG93bmVyOwogICAgdW5jb3ZlciAzCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDQKICAgIC8vIGZlZVNoYXJlQlAgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KCk7CiAgICBieXRlYyAxNSAvLyAiZmVlU2hhcmVCUCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjY1CiAgICAvLyB0aGlzLmZlZVNoYXJlQlAudmFsdWUgPSBmZWVTaGFyZUJQOwogICAgdW5jb3ZlciAyCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDgKICAgIC8vIGJhbGFuY2VSYXRpb01pbkJQID0gR2xvYmFsU3RhdGU8dWludDY0PigpOwogICAgYnl0ZWMgMTYgLy8gImJhbGFuY2VSYXRpb01pbkJQIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NjYKICAgIC8vIHRoaXMuYmFsYW5jZVJhdGlvTWluQlAudmFsdWUgPSBiYWxhbmNlUmF0aW9NaW5CUDsKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo2OAogICAgLy8gY29uc3QgZGVjaW1hbHMgPSB0aGlzLmFzc2V0LnZhbHVlLmRlY2ltYWxzOwogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoyNwogICAgLy8gYXNzZXQgPSBHbG9iYWxTdGF0ZTxBc3NldD4oKTsKICAgIGJ5dGVjXzIgLy8gImFzc2V0IgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NjgKICAgIC8vIGNvbnN0IGRlY2ltYWxzID0gdGhpcy5hc3NldC52YWx1ZS5kZWNpbWFsczsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICBhc3NldF9wYXJhbXNfZ2V0IEFzc2V0RGVjaW1hbHMKICAgIHN3YXAKICAgIGR1cAogICAgdW5jb3ZlciAyCiAgICBhc3NlcnQgLy8gYXNzZXQgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo2OQogICAgLy8gdGhpcy50b2tlbkFtb3VudFJlZHVjZS52YWx1ZSA9IGRlY2ltYWxzID4gU1lTVEVNX1BSRUNJU0lPTiA/IDEwICoqIChkZWNpbWFscyAtIFNZU1RFTV9QUkVDSVNJT04pIDogMDsKICAgIHB1c2hpbnQgMyAvLyAzCiAgICA+CiAgICBieiBjcmVhdGVBcHBsaWNhdGlvbl90ZXJuYXJ5X2ZhbHNlQDMKICAgIGR1cAogICAgcHVzaGludCAzIC8vIDMKICAgIC0KICAgIHB1c2hpbnQgMTAgLy8gMTAKICAgIHN3YXAKICAgIGV4cAoKY3JlYXRlQXBwbGljYXRpb25fdGVybmFyeV9tZXJnZUA0OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NTMKICAgIC8vIHByaXZhdGUgdG9rZW5BbW91bnRSZWR1Y2UgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KCk7CiAgICBieXRlYyAyMiAvLyAidG9rZW5BbW91bnRSZWR1Y2UiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo2OQogICAgLy8gdGhpcy50b2tlbkFtb3VudFJlZHVjZS52YWx1ZSA9IGRlY2ltYWxzID4gU1lTVEVNX1BSRUNJU0lPTiA/IDEwICoqIChkZWNpbWFscyAtIFNZU1RFTV9QUkVDSVNJT04pIDogMDsKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo3MAogICAgLy8gdGhpcy50b2tlbkFtb3VudEluY3JlYXNlLnZhbHVlID0gZGVjaW1hbHMgPCBTWVNURU1fUFJFQ0lTSU9OID8gMTAgKiogKFNZU1RFTV9QUkVDSVNJT04gLSBkZWNpbWFscykgOiAwOwogICAgZHVwCiAgICBwdXNoaW50IDMgLy8gMwogICAgPAogICAgYnogY3JlYXRlQXBwbGljYXRpb25fdGVybmFyeV9mYWxzZUA2CiAgICBwdXNoaW50IDMgLy8gMwogICAgZGlnIDEKICAgIC0KICAgIHB1c2hpbnQgMTAgLy8gMTAKICAgIHN3YXAKICAgIGV4cAoKY3JlYXRlQXBwbGljYXRpb25fdGVybmFyeV9tZXJnZUA3OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NTQKICAgIC8vIHByaXZhdGUgdG9rZW5BbW91bnRJbmNyZWFzZSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oKTsKICAgIGJ5dGVjIDIzIC8vICJ0b2tlbkFtb3VudEluY3JlYXNlIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NzAKICAgIC8vIHRoaXMudG9rZW5BbW91bnRJbmNyZWFzZS52YWx1ZSA9IGRlY2ltYWxzIDwgU1lTVEVNX1BSRUNJU0lPTiA/IDEwICoqIChTWVNURU1fUFJFQ0lTSU9OIC0gZGVjaW1hbHMpIDogMDsKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo2MAogICAgLy8gY3JlYXRlQXBwbGljYXRpb24ob3duZXI6IEFkZHJlc3MsIHJvdXRlcjogQWRkcmVzcywgYTogdWludDY0LCBhc3NldDogQXNzZXQsIGZlZVNoYXJlQlA6IHVpbnQ2NCwgYmFsYW5jZVJhdGlvTWluQlA6IHVpbnQ2NCk6IHZvaWQgewogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKY3JlYXRlQXBwbGljYXRpb25fdGVybmFyeV9mYWxzZUA2OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NzAKICAgIC8vIHRoaXMudG9rZW5BbW91bnRJbmNyZWFzZS52YWx1ZSA9IGRlY2ltYWxzIDwgU1lTVEVNX1BSRUNJU0lPTiA/IDEwICoqIChTWVNURU1fUFJFQ0lTSU9OIC0gZGVjaW1hbHMpIDogMDsKICAgIGludGNfMCAvLyAwCiAgICBiIGNyZWF0ZUFwcGxpY2F0aW9uX3Rlcm5hcnlfbWVyZ2VANwoKY3JlYXRlQXBwbGljYXRpb25fdGVybmFyeV9mYWxzZUAzOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NjkKICAgIC8vIHRoaXMudG9rZW5BbW91bnRSZWR1Y2UudmFsdWUgPSBkZWNpbWFscyA+IFNZU1RFTV9QUkVDSVNJT04gPyAxMCAqKiAoZGVjaW1hbHMgLSBTWVNURU1fUFJFQ0lTSU9OKSA6IDA7CiAgICBpbnRjXzAgLy8gMAogICAgYiBjcmVhdGVBcHBsaWNhdGlvbl90ZXJuYXJ5X21lcmdlQDQKCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo6UG9vbC5vcHRJblRvQXBwbGljYXRpb25bcm91dGluZ10oKSAtPiB2b2lkOgpvcHRJblRvQXBwbGljYXRpb246CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo3NAogICAgLy8gc3VwZXIub3B0SW5Ub0FwcGxpY2F0aW9uKFR4bi5zZW5kZXIpOwogICAgdHhuIFNlbmRlcgogICAgY2FsbHN1YiBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6OlJld2FyZE1hbmFnZXIub3B0SW5Ub0FwcGxpY2F0aW9uCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo3MwogICAgLy8gb3B0SW5Ub0FwcGxpY2F0aW9uKCk6IHZvaWQgewogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjpQb29sLmNsb3NlT3V0T2ZBcHBsaWNhdGlvbltyb3V0aW5nXSgpIC0+IHZvaWQ6CmNsb3NlT3V0T2ZBcHBsaWNhdGlvbjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjg0CiAgICAvLyBAYWJpbWV0aG9kKHsgZGVmYXVsdEFyZ3VtZW50czogeyBidWRnZXQ6IHsgY29uc3RhbnQ6IDMwMDAgfSB9IH0pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo4NgogICAgLy8gY29uc3Qgc2VuZGVyID0gVHhuLnNlbmRlcjsKICAgIHR4biBTZW5kZXIKICAgIGR1cAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6ODgKICAgIC8vIGNvbnN0IGxwQmFsYW5jZTogdWludDY0ID0gdGhpcy5iYWxhbmNlKHNlbmRlcikudmFsdWU7CiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjMzCiAgICAvLyBiYWxhbmNlID0gTG9jYWxTdGF0ZTx1aW50NjQ+KCk7CiAgICBieXRlY18zIC8vICJiYWxhbmNlIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6ODgKICAgIC8vIGNvbnN0IGxwQmFsYW5jZTogdWludDY0ID0gdGhpcy5iYWxhbmNlKHNlbmRlcikudmFsdWU7CiAgICBhcHBfbG9jYWxfZ2V0X2V4CiAgICBzd2FwCiAgICBkdXAKICAgIHVuY292ZXIgMgogICAgYXNzZXJ0IC8vIGNoZWNrIExvY2FsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo5MAogICAgLy8gaWYgKGxwQmFsYW5jZSA+IDApIHsKICAgIGJ6IGNsb3NlT3V0T2ZBcHBsaWNhdGlvbl9hZnRlcl9pZl9lbHNlQDMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjkxCiAgICAvLyB0aGlzLndpdGhkcmF3KGxwQmFsYW5jZSwgYnVkZ2V0KTsKICAgIGR1cAogICAgZGlnIDMKICAgIGNhbGxzdWIgc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6OlBvb2wud2l0aGRyYXcKCmNsb3NlT3V0T2ZBcHBsaWNhdGlvbl9hZnRlcl9pZl9lbHNlQDM6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6NTEKICAgIC8vIGNvbnN0IGxwQW1vdW50ID0gdGhpcy5iYWxhbmNlKGZyb20pLnZhbHVlOwogICAgZGlnIDEKICAgIGR1cAogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czozMwogICAgLy8gYmFsYW5jZSA9IExvY2FsU3RhdGU8dWludDY0PigpOwogICAgYnl0ZWNfMyAvLyAiYmFsYW5jZSIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czo1MQogICAgLy8gY29uc3QgbHBBbW91bnQgPSB0aGlzLmJhbGFuY2UoZnJvbSkudmFsdWU7CiAgICBhcHBfbG9jYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgTG9jYWxTdGF0ZSBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czo1MgogICAgLy8gYXNzZXJ0KGxwQW1vdW50ID09PSAwLCAnUmV3YXJkTWFuYWdlcjogd2l0aGRyYXcgTFAgYmVmb3JlIGNsb3NlIG91dCcpOwogICAgIQogICAgYXNzZXJ0IC8vIFJld2FyZE1hbmFnZXI6IHdpdGhkcmF3IExQIGJlZm9yZSBjbG9zZSBvdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czo1NAogICAgLy8gY29uc3QgcGVuZGluZyA9IHRoaXMucGVuZGluZ1Jld2FyZChmcm9tKTsKICAgIGNhbGxzdWIgc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjpSZXdhcmRNYW5hZ2VyLnBlbmRpbmdSZXdhcmQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czo1NQogICAgLy8gYXNzZXJ0KHBlbmRpbmcgPT09IDAsICdSZXdhcmRNYW5hZ2VyOiBjbGFpbSByZXdhcmRzIGJlZm9yZSBjbG9zZSBvdXQnKTsKICAgICEKICAgIGFzc2VydCAvLyBSZXdhcmRNYW5hZ2VyOiBjbGFpbSByZXdhcmRzIGJlZm9yZSBjbG9zZSBvdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjg0CiAgICAvLyBAYWJpbWV0aG9kKHsgZGVmYXVsdEFyZ3VtZW50czogeyBidWRnZXQ6IHsgY29uc3RhbnQ6IDMwMDAgfSB9IH0pCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6OlBvb2wub3B0SW5Bc3NldFtyb3V0aW5nXSgpIC0+IHZvaWQ6Cm9wdEluQXNzZXQ6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoxMDMKICAgIC8vIHRoaXMub25seU93bmVyKCk7CiAgICBjYWxsc3ViIG9ubHlPd25lcgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MTA2LTExMgogICAgLy8gaXR4bgogICAgLy8gICAuYXNzZXRUcmFuc2Zlcih7CiAgICAvLyAgICAgeGZlckFzc2V0OiB0aGlzLmFzc2V0LnZhbHVlLAogICAgLy8gICAgIGFzc2V0QW1vdW50OiAwLAogICAgLy8gICAgIGFzc2V0UmVjZWl2ZXI6IEdsb2JhbC5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzLAogICAgLy8gICB9KQogICAgLy8gICAuc3VibWl0KCk7CiAgICBpdHhuX2JlZ2luCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoxMDgKICAgIC8vIHhmZXJBc3NldDogdGhpcy5hc3NldC52YWx1ZSwKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MjcKICAgIC8vIGFzc2V0ID0gR2xvYmFsU3RhdGU8QXNzZXQ+KCk7CiAgICBieXRlY18yIC8vICJhc3NldCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjEwOAogICAgLy8geGZlckFzc2V0OiB0aGlzLmFzc2V0LnZhbHVlLAogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjExMAogICAgLy8gYXNzZXRSZWNlaXZlcjogR2xvYmFsLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MsCiAgICBnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwogICAgaXR4bl9maWVsZCBBc3NldFJlY2VpdmVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoxMDkKICAgIC8vIGFzc2V0QW1vdW50OiAwLAogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgQXNzZXRBbW91bnQKICAgIGl0eG5fZmllbGQgWGZlckFzc2V0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoxMDYtMTExCiAgICAvLyBpdHhuCiAgICAvLyAgIC5hc3NldFRyYW5zZmVyKHsKICAgIC8vICAgICB4ZmVyQXNzZXQ6IHRoaXMuYXNzZXQudmFsdWUsCiAgICAvLyAgICAgYXNzZXRBbW91bnQ6IDAsCiAgICAvLyAgICAgYXNzZXRSZWNlaXZlcjogR2xvYmFsLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MsCiAgICAvLyAgIH0pCiAgICBwdXNoaW50IDQgLy8gNAogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoxMDYtMTEyCiAgICAvLyBpdHhuCiAgICAvLyAgIC5hc3NldFRyYW5zZmVyKHsKICAgIC8vICAgICB4ZmVyQXNzZXQ6IHRoaXMuYXNzZXQudmFsdWUsCiAgICAvLyAgICAgYXNzZXRBbW91bnQ6IDAsCiAgICAvLyAgICAgYXNzZXRSZWNlaXZlcjogR2xvYmFsLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MsCiAgICAvLyAgIH0pCiAgICAvLyAgIC5zdWJtaXQoKTsKICAgIGl0eG5fc3VibWl0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoxMTQKICAgIC8vIGxvZygnUG9vbDogb3B0LWluIGNvbXBsZXRlZCcpOwogICAgcHVzaGJ5dGVzICJQb29sOiBvcHQtaW4gY29tcGxldGVkIgogICAgbG9nCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoxMDIKICAgIC8vIG9wdEluQXNzZXQoKTogdm9pZCB7CiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6OlBvb2wuZGVwb3NpdFtyb3V0aW5nXSgpIC0+IHZvaWQ6CmRlcG9zaXQ6CiAgICBwdXNoYnl0ZXMgIiIKICAgIGR1cG4gNAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MTUwCiAgICAvLyBAYWJpbWV0aG9kKHsgYWxsb3dBY3Rpb25zOiBbJ05vT3AnLCAnT3B0SW4nXSwgZGVmYXVsdEFyZ3VtZW50czogeyBidWRnZXQ6IHsgY29uc3RhbnQ6IDMwMDAgfSB9IH0pCiAgICB0eG4gR3JvdXBJbmRleAogICAgaW50Y18xIC8vIDEKICAgIC0KICAgIGR1cAogICAgZ3R4bnMgVHlwZUVudW0KICAgIHB1c2hpbnQgNCAvLyBheGZlcgogICAgPT0KICAgIGFzc2VydCAvLyB0cmFuc2FjdGlvbiB0eXBlIGlzIGF4ZmVyCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoxNTIKICAgIC8vIGVuc3VyZUJ1ZGdldChidWRnZXQsIE9wVXBGZWVTb3VyY2UuR3JvdXBDcmVkaXQpOwogICAgaW50Y18wIC8vIDAKICAgIGNhbGxzdWIgZW5zdXJlX2J1ZGdldAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MTU1CiAgICAvLyBpZiAoVHhuLm9uQ29tcGxldGlvbiA9PT0gT25Db21wbGV0ZUFjdGlvbi5PcHRJbikgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgaW50Y18xIC8vIDEKICAgID09CiAgICBieiBkZXBvc2l0X2FmdGVyX2lmX2Vsc2VAMwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MTU2CiAgICAvLyBzdXBlci5vcHRJblRvQXBwbGljYXRpb24oVHhuLnNlbmRlcik7CiAgICB0eG4gU2VuZGVyCiAgICBjYWxsc3ViIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czo6UmV3YXJkTWFuYWdlci5vcHRJblRvQXBwbGljYXRpb24KCmRlcG9zaXRfYWZ0ZXJfaWZfZWxzZUAzOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MTM5CiAgICAvLyBhc3NlcnQodGhpcy5jYW5EZXBvc2l0LnZhbHVlLCAnUG9vbDogZGVwb3NpdCBwcm9oaWJpdGVkJyk7CiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NTcKICAgIC8vIGNhbkRlcG9zaXQgPSBHbG9iYWxTdGF0ZTxib29sZWFuPih7IGluaXRpYWxWYWx1ZTogdHJ1ZSB9KTsvLyBpcyBkZXBvc2l0IG9wZXJhdGlvbiBhbGxvd2VkCiAgICBieXRlYyAxMiAvLyAiY2FuRGVwb3NpdCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjEzOQogICAgLy8gYXNzZXJ0KHRoaXMuY2FuRGVwb3NpdC52YWx1ZSwgJ1Bvb2w6IGRlcG9zaXQgcHJvaGliaXRlZCcpOwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIGFzc2VydCAvLyBQb29sOiBkZXBvc2l0IHByb2hpYml0ZWQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjE2MQogICAgLy8gY29uc3Qgb2xkRCA9IHRoaXMuZC52YWx1ZTsKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo1MQogICAgLy8gZCA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBieXRlYyA2IC8vICJkIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MTYxCiAgICAvLyBjb25zdCBvbGREID0gdGhpcy5kLnZhbHVlOwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIHN3YXAKICAgIGR1cAogICAgY292ZXIgMgogICAgYnVyeSA2CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoxNjMKICAgIC8vIGFzc2VydChhc3NldFRyYW5zZmVyUmVmLnhmZXJBc3NldC5pZCA9PT0gdGhpcy5hc3NldC52YWx1ZS5pZCwgYFdyb25nIGFzc2V0YCk7CiAgICBkaWcgMQogICAgZHVwCiAgICBndHhucyBYZmVyQXNzZXQKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MjcKICAgIC8vIGFzc2V0ID0gR2xvYmFsU3RhdGU8QXNzZXQ+KCk7CiAgICBieXRlY18yIC8vICJhc3NldCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjE2MwogICAgLy8gYXNzZXJ0KGFzc2V0VHJhbnNmZXJSZWYueGZlckFzc2V0LmlkID09PSB0aGlzLmFzc2V0LnZhbHVlLmlkLCBgV3JvbmcgYXNzZXRgKTsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICA9PQogICAgYXNzZXJ0IC8vIFdyb25nIGFzc2V0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3V0aWxzLmFsZ28udHM6MjQKICAgIC8vIGFzc2VydChhc3NldFRyYW5zZmVyVHhuLmFzc2V0UmVjZWl2ZXIgPT09IEdsb2JhbC5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzLCBgQXNzZXQgbXVzdCBnbyB0byBhcHBgKTsKICAgIGR1cAogICAgZ3R4bnMgQXNzZXRSZWNlaXZlcgogICAgZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKICAgID09CiAgICBhc3NlcnQgLy8gQXNzZXQgbXVzdCBnbyB0byBhcHAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvdXRpbHMuYWxnby50czoyNwogICAgLy8gYXNzZXJ0KGFzc2V0VHJhbnNmZXJUeG4ucmVrZXlUbyA9PT0gR2xvYmFsLnplcm9BZGRyZXNzLCBgUmVrZXkgbm90IGFsbG93ZWRgKTsKICAgIGR1cAogICAgZ3R4bnMgUmVrZXlUbwogICAgZ2xvYmFsIFplcm9BZGRyZXNzCiAgICA9PQogICAgYXNzZXJ0IC8vIFJla2V5IG5vdCBhbGxvd2VkCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3V0aWxzLmFsZ28udHM6MjgKICAgIC8vIGFzc2VydChhc3NldFRyYW5zZmVyVHhuLmFzc2V0Q2xvc2VUbyA9PT0gR2xvYmFsLnplcm9BZGRyZXNzLCBgQ2xvc2VUbyBub3QgYWxsb3dlZGApOwogICAgZHVwCiAgICBndHhucyBBc3NldENsb3NlVG8KICAgIGdsb2JhbCBaZXJvQWRkcmVzcwogICAgPT0KICAgIGFzc2VydCAvLyBDbG9zZVRvIG5vdCBhbGxvd2VkCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3V0aWxzLmFsZ28udHM6MjkKICAgIC8vIHJldHVybiBhc3NldFRyYW5zZmVyVHhuLmFzc2V0QW1vdW50OwogICAgZ3R4bnMgQXNzZXRBbW91bnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjE2NQogICAgLy8gY29uc3QgYW1vdW50U1AgPSB0aGlzLnRvU3lzdGVtUHJlY2lzaW9uKGFtb3VudCk7CiAgICBjYWxsc3ViIHRvU3lzdGVtUHJlY2lzaW9uCiAgICBkdXAKICAgIGJ1cnkgOAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MTY2CiAgICAvLyBhc3NlcnQoYW1vdW50U1AgPiAwLCAnUG9vbDogdG9vIGxpdHRsZScpOwogICAgZHVwCiAgICBhc3NlcnQgLy8gUG9vbDogdG9vIGxpdHRsZQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MTY5CiAgICAvLyB0aGlzLnJlc2VydmVzLnZhbHVlICs9IGFtb3VudFNQOwogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ5CiAgICAvLyByZXNlcnZlcyA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBieXRlYyA0IC8vICJyZXNlcnZlcyIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjE2OQogICAgLy8gdGhpcy5yZXNlcnZlcy52YWx1ZSArPSBhbW91bnRTUDsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICArCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0OQogICAgLy8gcmVzZXJ2ZXMgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgYnl0ZWMgNCAvLyAicmVzZXJ2ZXMiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoxNjkKICAgIC8vIHRoaXMucmVzZXJ2ZXMudmFsdWUgKz0gYW1vdW50U1A7CiAgICBzd2FwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MTcxCiAgICAvLyBjb25zdCB0b2tlbkJhbGFuY2UgPSB0aGlzLnRva2VuQmFsYW5jZS52YWx1ZTsKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NgogICAgLy8gdG9rZW5CYWxhbmNlID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogMCB9KTsKICAgIGJ5dGVjXzAgLy8gInRva2VuQmFsYW5jZSIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjE3MQogICAgLy8gY29uc3QgdG9rZW5CYWxhbmNlID0gdGhpcy50b2tlbkJhbGFuY2UudmFsdWU7CiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgc3dhcAogICAgZHVwCiAgICBjb3ZlciAyCiAgICBidXJ5IDYKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjE3MgogICAgLy8gY29uc3QgdlVzZEJhbGFuY2UgPSB0aGlzLnZVc2RCYWxhbmNlLnZhbHVlOwogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ3CiAgICAvLyB2VXNkQmFsYW5jZSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBieXRlY18xIC8vICJ2VXNkQmFsYW5jZSIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjE3MgogICAgLy8gY29uc3QgdlVzZEJhbGFuY2UgPSB0aGlzLnZVc2RCYWxhbmNlLnZhbHVlOwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIHN3YXAKICAgIGR1cAogICAgY292ZXIgMgogICAgYnVyeSA2CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoxNzQKICAgIC8vIGNvbnN0IG9sZEJhbGFuY2U6IHVpbnQ2NCA9ICh0b2tlbkJhbGFuY2UgKyB2VXNkQmFsYW5jZSk7CiAgICArCiAgICBidXJ5IDYKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjE3NQogICAgLy8gaWYgKG9sZEQgPT09IDAgfHwgb2xkQmFsYW5jZSA9PT0gMCkgewogICAgYnogZGVwb3NpdF9pZl9ib2R5QDUKICAgIGRpZyA0CiAgICBibnogZGVwb3NpdF9lbHNlX2JvZHlANgoKZGVwb3NpdF9pZl9ib2R5QDU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoxNzcKICAgIC8vIGNvbnN0IGhhbGZBbW91bnQ6IHVpbnQ2NCA9IGFtb3VudFNQID4+IDE7CiAgICBkaWcgNQogICAgaW50Y18xIC8vIDEKICAgIHNocgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MTc4CiAgICAvLyB0aGlzLnRva2VuQmFsYW5jZS52YWx1ZSArPSBoYWxmQW1vdW50OwogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ2CiAgICAvLyB0b2tlbkJhbGFuY2UgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgYnl0ZWNfMCAvLyAidG9rZW5CYWxhbmNlIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MTc4CiAgICAvLyB0aGlzLnRva2VuQmFsYW5jZS52YWx1ZSArPSBoYWxmQW1vdW50OwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIGRpZyAxCiAgICArCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NgogICAgLy8gdG9rZW5CYWxhbmNlID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogMCB9KTsKICAgIGJ5dGVjXzAgLy8gInRva2VuQmFsYW5jZSIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjE3OAogICAgLy8gdGhpcy50b2tlbkJhbGFuY2UudmFsdWUgKz0gaGFsZkFtb3VudDsKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoxNzkKICAgIC8vIHRoaXMudlVzZEJhbGFuY2UudmFsdWUgKz0gaGFsZkFtb3VudDsKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NwogICAgLy8gdlVzZEJhbGFuY2UgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgYnl0ZWNfMSAvLyAidlVzZEJhbGFuY2UiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoxNzkKICAgIC8vIHRoaXMudlVzZEJhbGFuY2UudmFsdWUgKz0gaGFsZkFtb3VudDsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICArCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NwogICAgLy8gdlVzZEJhbGFuY2UgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgYnl0ZWNfMSAvLyAidlVzZEJhbGFuY2UiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoxNzkKICAgIC8vIHRoaXMudlVzZEJhbGFuY2UudmFsdWUgKz0gaGFsZkFtb3VudDsKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CgpkZXBvc2l0X2FmdGVyX2lmX2Vsc2VANzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjE4NQogICAgLy8gdGhpcy51cGRhdGVEKCk7CiAgICBjYWxsc3ViIHVwZGF0ZUQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjE4NwogICAgLy8gdGhpcy5kZXBvc2l0THAoVHhuLnNlbmRlciwgdGhpcy5kLnZhbHVlIC0gb2xkRCk7CiAgICB0eG4gU2VuZGVyCiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NTEKICAgIC8vIGQgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgYnl0ZWMgNiAvLyAiZCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjE4NwogICAgLy8gdGhpcy5kZXBvc2l0THAoVHhuLnNlbmRlciwgdGhpcy5kLnZhbHVlIC0gb2xkRCk7CiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgZGlnIDUKICAgIC0KICAgIGNhbGxzdWIgZGVwb3NpdExwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoxODkKICAgIC8vIGFzc2VydCh0aGlzLnRva2VuQmFsYW5jZS52YWx1ZSA8IE1BWF9UT0tFTl9CQUxBTkNFLCAnUG9vbDogdG9vIG11Y2gnKTsKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NgogICAgLy8gdG9rZW5CYWxhbmNlID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogMCB9KTsKICAgIGJ5dGVjXzAgLy8gInRva2VuQmFsYW5jZSIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjE4OQogICAgLy8gYXNzZXJ0KHRoaXMudG9rZW5CYWxhbmNlLnZhbHVlIDwgTUFYX1RPS0VOX0JBTEFOQ0UsICdQb29sOiB0b28gbXVjaCcpOwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIHB1c2hpbnQgMTA5OTUxMTYyNzc3NiAvLyAxMDk5NTExNjI3Nzc2CiAgICA8CiAgICBhc3NlcnQgLy8gUG9vbDogdG9vIG11Y2gKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjE1MAogICAgLy8gQGFiaW1ldGhvZCh7IGFsbG93QWN0aW9uczogWydOb09wJywgJ09wdEluJ10sIGRlZmF1bHRBcmd1bWVudHM6IHsgYnVkZ2V0OiB7IGNvbnN0YW50OiAzMDAwIH0gfSB9KQogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKZGVwb3NpdF9lbHNlX2JvZHlANjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjE4MgogICAgLy8gdGhpcy50b2tlbkJhbGFuY2UudmFsdWUgKz0gbmV3IFVpbnQ8NjQ+KChCaWdVaW50KGFtb3VudFNQKSAqIEJpZ1VpbnQodG9rZW5CYWxhbmNlKSkgLyBCaWdVaW50KG9sZEJhbGFuY2UpKS5hc1VpbnQ2NCgpOwogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ2CiAgICAvLyB0b2tlbkJhbGFuY2UgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgYnl0ZWNfMCAvLyAidG9rZW5CYWxhbmNlIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MTgyCiAgICAvLyB0aGlzLnRva2VuQmFsYW5jZS52YWx1ZSArPSBuZXcgVWludDw2ND4oKEJpZ1VpbnQoYW1vdW50U1ApICogQmlnVWludCh0b2tlbkJhbGFuY2UpKSAvIEJpZ1VpbnQob2xkQmFsYW5jZSkpLmFzVWludDY0KCk7CiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgZGlnIDYKICAgIGl0b2IKICAgIGRpZyA0CiAgICBpdG9iCiAgICBkaWcgMQogICAgYioKICAgIGRpZyA3CiAgICBpdG9iCiAgICBzd2FwCiAgICBkaWcgMQogICAgYi8KICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzIgLy8gOAogICAgPD0KICAgIGFzc2VydCAvLyBvdmVyZmxvdwogICAgaW50Y18yIC8vIDgKICAgIGJ6ZXJvCiAgICBzd2FwCiAgICBkaWcgMQogICAgYnwKICAgIGJ0b2kKICAgIHVuY292ZXIgNAogICAgKwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDYKICAgIC8vIHRva2VuQmFsYW5jZSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBieXRlY18wIC8vICJ0b2tlbkJhbGFuY2UiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoxODIKICAgIC8vIHRoaXMudG9rZW5CYWxhbmNlLnZhbHVlICs9IG5ldyBVaW50PDY0PigoQmlnVWludChhbW91bnRTUCkgKiBCaWdVaW50KHRva2VuQmFsYW5jZSkpIC8gQmlnVWludChvbGRCYWxhbmNlKSkuYXNVaW50NjQoKTsKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoxODMKICAgIC8vIHRoaXMudlVzZEJhbGFuY2UudmFsdWUgKz0gbmV3IFVpbnQ8NjQ+KChCaWdVaW50KGFtb3VudFNQKSAqIEJpZ1VpbnQodlVzZEJhbGFuY2UpKSAvIEJpZ1VpbnQob2xkQmFsYW5jZSkpLmFzVWludDY0KCk7CiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDcKICAgIC8vIHZVc2RCYWxhbmNlID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogMCB9KTsKICAgIGJ5dGVjXzEgLy8gInZVc2RCYWxhbmNlIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MTgzCiAgICAvLyB0aGlzLnZVc2RCYWxhbmNlLnZhbHVlICs9IG5ldyBVaW50PDY0PigoQmlnVWludChhbW91bnRTUCkgKiBCaWdVaW50KHZVc2RCYWxhbmNlKSkgLyBCaWdVaW50KG9sZEJhbGFuY2UpKS5hc1VpbnQ2NCgpOwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIGRpZyA1CiAgICBpdG9iCiAgICB1bmNvdmVyIDQKICAgIGIqCiAgICB1bmNvdmVyIDMKICAgIGIvCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDgKICAgIDw9CiAgICBhc3NlcnQgLy8gb3ZlcmZsb3cKICAgIHVuY292ZXIgMgogICAgYnwKICAgIGJ0b2kKICAgICsKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ3CiAgICAvLyB2VXNkQmFsYW5jZSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBieXRlY18xIC8vICJ2VXNkQmFsYW5jZSIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjE4MwogICAgLy8gdGhpcy52VXNkQmFsYW5jZS52YWx1ZSArPSBuZXcgVWludDw2ND4oKEJpZ1VpbnQoYW1vdW50U1ApICogQmlnVWludCh2VXNkQmFsYW5jZSkpIC8gQmlnVWludChvbGRCYWxhbmNlKSkuYXNVaW50NjQoKTsKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICBiIGRlcG9zaXRfYWZ0ZXJfaWZfZWxzZUA3CgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6OlBvb2wud2l0aGRyYXdbcm91dGluZ10oKSAtPiB2b2lkOgp3aXRoZHJhdzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjE5NwogICAgLy8gQGFiaW1ldGhvZCh7IGRlZmF1bHRBcmd1bWVudHM6IHsgYnVkZ2V0OiB7IGNvbnN0YW50OiAzMDAwIH0gfSB9KQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgYnRvaQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgYnRvaQogICAgY2FsbHN1YiBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo6UG9vbC53aXRoZHJhdwogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjpQb29sLnN3YXBUb1ZVc2Rbcm91dGluZ10oKSAtPiB2b2lkOgpzd2FwVG9WVXNkOgogICAgcHVzaGJ5dGVzICIiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyNDUtMjQ5CiAgICAvLyBzd2FwVG9WVXNkKAogICAgLy8gICB1c2VyOiBBZGRyZXNzLAogICAgLy8gICBhbW91bnQ6IHVpbnQ2NCwKICAgIC8vICAgemVyb0ZlZTogYm9vbGVhbiwKICAgIC8vICk6IHVpbnQ2NCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18zIC8vIDMyCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnN0YXRpY19hcnJheTxhcmM0LnVpbnQ4LCAzMj4KICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzIgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50NjQKICAgIGJ0b2kKICAgIGR1cAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMwogICAgZHVwCiAgICBsZW4KICAgIGludGNfMSAvLyAxCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LmJvb2wKICAgIGludGNfMCAvLyAwCiAgICBnZXRiaXQKICAgIHN3YXAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjI1MAogICAgLy8gdGhpcy5vbmx5Um91dGVyKCk7CiAgICBjYWxsc3ViIG9ubHlSb3V0ZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjI1MgogICAgLy8gbGV0IHJlc3VsdDogdWludDY0ID0gMDsgLy8gMCBieSBkZWZhdWx0CiAgICBpbnRjXzAgLy8gMAogICAgc3dhcAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MjUzCiAgICAvLyBsZXQgZmVlOiB1aW50NjQgPSAwOwogICAgaW50Y18wIC8vIDAKICAgIHN3YXAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjI1NAogICAgLy8gaWYgKGFtb3VudCA+IDApIHsKICAgIGJ6IHN3YXBUb1ZVc2RfYWZ0ZXJfaWZfZWxzZUA3CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyNTUKICAgIC8vIGlmICghemVyb0ZlZSkgewogICAgZGlnIDIKICAgIGJueiBzd2FwVG9WVXNkX2FmdGVyX2lmX2Vsc2VANAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MjU2CiAgICAvLyBmZWUgPSAoYW1vdW50ICogdGhpcy5mZWVTaGFyZUJQLnZhbHVlKSAvIEJQOwogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ0CiAgICAvLyBmZWVTaGFyZUJQID0gR2xvYmFsU3RhdGU8dWludDY0PigpOwogICAgYnl0ZWMgMTUgLy8gImZlZVNoYXJlQlAiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyNTYKICAgIC8vIGZlZSA9IChhbW91bnQgKiB0aGlzLmZlZVNoYXJlQlAudmFsdWUpIC8gQlA7CiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgZGlnIDQKICAgICoKICAgIGludGMgNCAvLyAxMDAwMAogICAgLwogICAgYnVyeSAxCgpzd2FwVG9WVXNkX2FmdGVyX2lmX2Vsc2VANDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjI1OAogICAgLy8gY29uc3QgYW1vdW50SW4gPSB0aGlzLnRvU3lzdGVtUHJlY2lzaW9uKGFtb3VudCAtIGZlZSk7CiAgICBkaWcgMwogICAgZHVwCiAgICBkaWcgMgogICAgLQogICAgY2FsbHN1YiB0b1N5c3RlbVByZWNpc2lvbgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MjYwCiAgICAvLyBmZWUgPSBhbW91bnQgLSB0aGlzLmZyb21TeXN0ZW1QcmVjaXNpb24oYW1vdW50SW4pOwogICAgZHVwCiAgICBjYWxsc3ViIGZyb21TeXN0ZW1QcmVjaXNpb24KICAgIHVuY292ZXIgMgogICAgc3dhcAogICAgLQogICAgYnVyeSAyCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyNjMKICAgIC8vIHRoaXMudG9rZW5CYWxhbmNlLnZhbHVlICs9IGFtb3VudEluOwogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ2CiAgICAvLyB0b2tlbkJhbGFuY2UgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgYnl0ZWNfMCAvLyAidG9rZW5CYWxhbmNlIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MjYzCiAgICAvLyB0aGlzLnRva2VuQmFsYW5jZS52YWx1ZSArPSBhbW91bnRJbjsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICBkaWcgMQogICAgKwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDYKICAgIC8vIHRva2VuQmFsYW5jZSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBieXRlY18wIC8vICJ0b2tlbkJhbGFuY2UiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyNjMKICAgIC8vIHRoaXMudG9rZW5CYWxhbmNlLnZhbHVlICs9IGFtb3VudEluOwogICAgc3dhcAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjI2NAogICAgLy8gdGhpcy5yZXNlcnZlcy52YWx1ZSArPSBhbW91bnRJbjsKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0OQogICAgLy8gcmVzZXJ2ZXMgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgYnl0ZWMgNCAvLyAicmVzZXJ2ZXMiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyNjQKICAgIC8vIHRoaXMucmVzZXJ2ZXMudmFsdWUgKz0gYW1vdW50SW47CiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgKwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDkKICAgIC8vIHJlc2VydmVzID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogMCB9KTsKICAgIGJ5dGVjIDQgLy8gInJlc2VydmVzIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MjY0CiAgICAvLyB0aGlzLnJlc2VydmVzLnZhbHVlICs9IGFtb3VudEluOwogICAgc3dhcAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjI2NgogICAgLy8gY29uc3QgdlVzZE5ld0Ftb3VudCA9IHRoaXMuZ2V0WSh0aGlzLnRva2VuQmFsYW5jZS52YWx1ZSk7CiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDYKICAgIC8vIHRva2VuQmFsYW5jZSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBieXRlY18wIC8vICJ0b2tlbkJhbGFuY2UiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyNjYKICAgIC8vIGNvbnN0IHZVc2ROZXdBbW91bnQgPSB0aGlzLmdldFkodGhpcy50b2tlbkJhbGFuY2UudmFsdWUpOwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIGNhbGxzdWIgZ2V0WQogICAgZHVwCiAgICBidXJ5IDcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjI2NwogICAgLy8gaWYgKHRoaXMudlVzZEJhbGFuY2UudmFsdWUgPiB2VXNkTmV3QW1vdW50KSB7CiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDcKICAgIC8vIHZVc2RCYWxhbmNlID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogMCB9KTsKICAgIGJ5dGVjXzEgLy8gInZVc2RCYWxhbmNlIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MjY3CiAgICAvLyBpZiAodGhpcy52VXNkQmFsYW5jZS52YWx1ZSA+IHZVc2ROZXdBbW91bnQpIHsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICA8CiAgICBieiBzd2FwVG9WVXNkX2FmdGVyX2lmX2Vsc2VANgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MjY4CiAgICAvLyByZXN1bHQgPSB0aGlzLnZVc2RCYWxhbmNlLnZhbHVlIC0gdlVzZE5ld0Ftb3VudDsKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NwogICAgLy8gdlVzZEJhbGFuY2UgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgYnl0ZWNfMSAvLyAidlVzZEJhbGFuY2UiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyNjgKICAgIC8vIHJlc3VsdCA9IHRoaXMudlVzZEJhbGFuY2UudmFsdWUgLSB2VXNkTmV3QW1vdW50OwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIGRpZyA2CiAgICAtCiAgICBidXJ5IDIKCnN3YXBUb1ZVc2RfYWZ0ZXJfaWZfZWxzZUA2OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDcKICAgIC8vIHZVc2RCYWxhbmNlID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogMCB9KTsKICAgIGJ5dGVjXzEgLy8gInZVc2RCYWxhbmNlIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MjcwCiAgICAvLyB0aGlzLnZVc2RCYWxhbmNlLnZhbHVlID0gdlVzZE5ld0Ftb3VudDsKICAgIGRpZyA2CiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MjcxCiAgICAvLyB0aGlzLmFkZFJld2FyZHMoZmVlKTsKICAgIGR1cAogICAgY2FsbHN1YiBhZGRSZXdhcmRzCgpzd2FwVG9WVXNkX2FmdGVyX2lmX2Vsc2VANzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjI3NAogICAgLy8gZW1pdDxTd2FwcGVkVG9WVXNkPih7IHNlbmRlcjogdXNlciwgdG9rZW5JZDogdGhpcy5hc3NldC52YWx1ZS5pZCwgYW1vdW50LCB2VXNkQW1vdW50OiByZXN1bHQsIGZlZSB9KTsKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MjcKICAgIC8vIGFzc2V0ID0gR2xvYmFsU3RhdGU8QXNzZXQ+KCk7CiAgICBieXRlY18yIC8vICJhc3NldCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjI3NAogICAgLy8gZW1pdDxTd2FwcGVkVG9WVXNkPih7IHNlbmRlcjogdXNlciwgdG9rZW5JZDogdGhpcy5hc3NldC52YWx1ZS5pZCwgYW1vdW50LCB2VXNkQW1vdW50OiByZXN1bHQsIGZlZSB9KTsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICBpdG9iCiAgICBkaWcgNQogICAgc3dhcAogICAgY29uY2F0CiAgICBkaWcgNAogICAgaXRvYgogICAgY29uY2F0CiAgICBkaWcgMgogICAgaXRvYgogICAgc3dhcAogICAgZGlnIDEKICAgIGNvbmNhdAogICAgZGlnIDIKICAgIGl0b2IKICAgIGNvbmNhdAogICAgcHVzaGJ5dGVzIDB4MmJiYmVjYTMgLy8gbWV0aG9kICJTd2FwcGVkVG9WVXNkKGFkZHJlc3MsdWludDY0LHVpbnQ2NCx1aW50NjQsdWludDY0KSIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyNzYKICAgIC8vIHRoaXMudmFsaWRhdGVCYWxhbmNlUmF0aW8oKTsKICAgIGNhbGxzdWIgdmFsaWRhdGVCYWxhbmNlUmF0aW8KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjI0NS0yNDkKICAgIC8vIHN3YXBUb1ZVc2QoCiAgICAvLyAgIHVzZXI6IEFkZHJlc3MsCiAgICAvLyAgIGFtb3VudDogdWludDY0LAogICAgLy8gICB6ZXJvRmVlOiBib29sZWFuLAogICAgLy8gKTogdWludDY0IHsKICAgIGJ5dGVjIDI0IC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6OlBvb2wuc3dhcEZyb21WVXNkW3JvdXRpbmddKCkgLT4gdm9pZDoKc3dhcEZyb21WVXNkOgogICAgcHVzaGJ5dGVzICIiCiAgICBkdXAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjI5MS0yOTYKICAgIC8vIHN3YXBGcm9tVlVzZCgKICAgIC8vICAgdXNlcjogQWRkcmVzcywKICAgIC8vICAgYW1vdW50OiB1aW50NjQsCiAgICAvLyAgIHJlY2VpdmVBbW91bnRNaW46IHVpbnQ2NCwKICAgIC8vICAgemVyb0ZlZTogYm9vbGVhbiwKICAgIC8vICk6IHVpbnQ2NCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18zIC8vIDMyCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnN0YXRpY19hcnJheTxhcmM0LnVpbnQ4LCAzMj4KICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzIgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50NjQKICAgIGJ0b2kKICAgIGR1cAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMwogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgYnRvaQogICAgc3dhcAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgNAogICAgZHVwCiAgICBsZW4KICAgIGludGNfMSAvLyAxCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LmJvb2wKICAgIGludGNfMCAvLyAwCiAgICBnZXRiaXQKICAgIHN3YXAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjI5NwogICAgLy8gdGhpcy5vbmx5Um91dGVyKCk7CiAgICBjYWxsc3ViIG9ubHlSb3V0ZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjI5OQogICAgLy8gbGV0IHJlc3VsdFNQOiB1aW50NjQgPSAwOyAvLyAwIGJ5IGRlZmF1bHQKICAgIGludGNfMCAvLyAwCiAgICBzd2FwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozMDAKICAgIC8vIGxldCByZXN1bHQ6IHVpbnQ2NCA9IDA7IC8vIDAgYnkgZGVmYXVsdAogICAgaW50Y18wIC8vIDAKICAgIHN3YXAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjMwMQogICAgLy8gbGV0IGZlZTogdWludDY0ID0gMDsKICAgIGludGNfMCAvLyAwCiAgICBzd2FwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozMDIKICAgIC8vIGlmIChhbW91bnQgPiAwKSB7CiAgICBieiBzd2FwRnJvbVZVc2RfYWZ0ZXJfaWZfZWxzZUA4CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozMDMKICAgIC8vIHRoaXMudlVzZEJhbGFuY2UudmFsdWUgKz0gYW1vdW50OwogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ3CiAgICAvLyB2VXNkQmFsYW5jZSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBieXRlY18xIC8vICJ2VXNkQmFsYW5jZSIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjMwMwogICAgLy8gdGhpcy52VXNkQmFsYW5jZS52YWx1ZSArPSBhbW91bnQ7CiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgZGlnIDYKICAgICsKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ3CiAgICAvLyB2VXNkQmFsYW5jZSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBieXRlY18xIC8vICJ2VXNkQmFsYW5jZSIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjMwMwogICAgLy8gdGhpcy52VXNkQmFsYW5jZS52YWx1ZSArPSBhbW91bnQ7CiAgICBkaWcgMQogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjMwNAogICAgLy8gY29uc3QgbmV3QW1vdW50ID0gdGhpcy5nZXRZKHRoaXMudlVzZEJhbGFuY2UudmFsdWUpOwogICAgY2FsbHN1YiBnZXRZCiAgICBkdXAKICAgIGJ1cnkgMTAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjMwNQogICAgLy8gY29uc3QgdG9rZW5CYWxhbmNlID0gdGhpcy50b2tlbkJhbGFuY2UudmFsdWU7CiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDYKICAgIC8vIHRva2VuQmFsYW5jZSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBieXRlY18wIC8vICJ0b2tlbkJhbGFuY2UiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozMDUKICAgIC8vIGNvbnN0IHRva2VuQmFsYW5jZSA9IHRoaXMudG9rZW5CYWxhbmNlLnZhbHVlOwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIHN3YXAKICAgIGR1cAogICAgY292ZXIgMgogICAgYnVyeSAxMQogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MzA2CiAgICAvLyBpZiAodG9rZW5CYWxhbmNlID4gbmV3QW1vdW50KSB7CiAgICA8CiAgICBieiBzd2FwRnJvbVZVc2RfYWZ0ZXJfaWZfZWxzZUA0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozMDcKICAgIC8vIHJlc3VsdFNQID0gdG9rZW5CYWxhbmNlIC0gbmV3QW1vdW50OwogICAgZGlnIDcKICAgIGRpZyA5CiAgICAtCiAgICBkdXAKICAgIGJ1cnkgNAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MzA4CiAgICAvLyByZXN1bHQgPSB0aGlzLmZyb21TeXN0ZW1QcmVjaXNpb24ocmVzdWx0U1ApOwogICAgY2FsbHN1YiBmcm9tU3lzdGVtUHJlY2lzaW9uCiAgICBidXJ5IDIKCnN3YXBGcm9tVlVzZF9hZnRlcl9pZl9lbHNlQDQ6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozMTIKICAgIC8vIGFzc2VydChyZXN1bHRTUCA8PSB0aGlzLnJlc2VydmVzLnZhbHVlLCAnUG9vbDogcmVzZXJ2ZXMnKTsKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0OQogICAgLy8gcmVzZXJ2ZXMgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgYnl0ZWMgNCAvLyAicmVzZXJ2ZXMiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozMTIKICAgIC8vIGFzc2VydChyZXN1bHRTUCA8PSB0aGlzLnJlc2VydmVzLnZhbHVlLCAnUG9vbDogcmVzZXJ2ZXMnKTsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICBkaWcgMwogICAgZHVwCiAgICBjb3ZlciAyCiAgICBkaWcgMQogICAgPD0KICAgIGFzc2VydCAvLyBQb29sOiByZXNlcnZlcwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MzE0CiAgICAvLyB0aGlzLnJlc2VydmVzLnZhbHVlIC09IHJlc3VsdFNQOwogICAgc3dhcAogICAgLQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDkKICAgIC8vIHJlc2VydmVzID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogMCB9KTsKICAgIGJ5dGVjIDQgLy8gInJlc2VydmVzIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MzE0CiAgICAvLyB0aGlzLnJlc2VydmVzLnZhbHVlIC09IHJlc3VsdFNQOwogICAgc3dhcAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjMxNQogICAgLy8gaWYgKCF6ZXJvRmVlKSB7CiAgICBkaWcgMwogICAgYm56IHN3YXBGcm9tVlVzZF9hZnRlcl9pZl9lbHNlQDYKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjMxNgogICAgLy8gZmVlID0gKHJlc3VsdCAqIHRoaXMuZmVlU2hhcmVCUC52YWx1ZSkgLyBCUDsKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NAogICAgLy8gZmVlU2hhcmVCUCA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oKTsKICAgIGJ5dGVjIDE1IC8vICJmZWVTaGFyZUJQIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MzE2CiAgICAvLyBmZWUgPSAocmVzdWx0ICogdGhpcy5mZWVTaGFyZUJQLnZhbHVlKSAvIEJQOwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIGRpZyAyCiAgICAqCiAgICBpbnRjIDQgLy8gMTAwMDAKICAgIC8KICAgIGJ1cnkgMQoKc3dhcEZyb21WVXNkX2FmdGVyX2lmX2Vsc2VANjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjMxOQogICAgLy8gcmVzdWx0IC09IGZlZTsKICAgIGR1cDIKICAgIGR1cAogICAgY292ZXIgMgogICAgLQogICAgZHVwCiAgICBidXJ5IDQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ2CiAgICAvLyB0b2tlbkJhbGFuY2UgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgYnl0ZWNfMCAvLyAidG9rZW5CYWxhbmNlIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MzIxCiAgICAvLyB0aGlzLnRva2VuQmFsYW5jZS52YWx1ZSA9IG5ld0Ftb3VudDsKICAgIGRpZyAxMQogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjMyMgogICAgLy8gYXNzZXJ0KHJlc3VsdCA+PSByZWNlaXZlQW1vdW50TWluLCAnUG9vbDogc2xpcHBhZ2UnKTsKICAgIGR1cAogICAgZGlnIDcKICAgID49CiAgICBhc3NlcnQgLy8gUG9vbDogc2xpcHBhZ2UKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjMyMy0zMjcKICAgIC8vIGl0eG4uYXNzZXRUcmFuc2Zlcih7CiAgICAvLyAgIHhmZXJBc3NldDogdGhpcy5hc3NldC52YWx1ZSwKICAgIC8vICAgYXNzZXRBbW91bnQ6IHJlc3VsdCwKICAgIC8vICAgYXNzZXRSZWNlaXZlcjogdXNlci5uYXRpdmUsCiAgICAvLyB9KS5zdWJtaXQoKTsKICAgIGl0eG5fYmVnaW4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjMyNAogICAgLy8geGZlckFzc2V0OiB0aGlzLmFzc2V0LnZhbHVlLAogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoyNwogICAgLy8gYXNzZXQgPSBHbG9iYWxTdGF0ZTxBc3NldD4oKTsKICAgIGJ5dGVjXzIgLy8gImFzc2V0IgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MzI0CiAgICAvLyB4ZmVyQXNzZXQ6IHRoaXMuYXNzZXQudmFsdWUsCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgZGlnIDkKICAgIGl0eG5fZmllbGQgQXNzZXRSZWNlaXZlcgogICAgaXR4bl9maWVsZCBYZmVyQXNzZXQKICAgIGl0eG5fZmllbGQgQXNzZXRBbW91bnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjMyMy0zMjcKICAgIC8vIGl0eG4uYXNzZXRUcmFuc2Zlcih7CiAgICAvLyAgIHhmZXJBc3NldDogdGhpcy5hc3NldC52YWx1ZSwKICAgIC8vICAgYXNzZXRBbW91bnQ6IHJlc3VsdCwKICAgIC8vICAgYXNzZXRSZWNlaXZlcjogdXNlci5uYXRpdmUsCiAgICAvLyB9KS5zdWJtaXQoKTsKICAgIHB1c2hpbnQgNCAvLyA0CiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnRjXzAgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKICAgIGl0eG5fc3VibWl0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozMjgKICAgIC8vIHRoaXMuYWRkUmV3YXJkcyhmZWUpOwogICAgY2FsbHN1YiBhZGRSZXdhcmRzCgpzd2FwRnJvbVZVc2RfYWZ0ZXJfaWZfZWxzZUA4OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MzMwCiAgICAvLyBlbWl0PFN3YXBwZWRGcm9tVlVzZD4oeyByZWNpcGllbnQ6IHVzZXIsIHRva2VuSWQ6IHRoaXMuYXNzZXQudmFsdWUuaWQsIHZVc2RBbW91bnQ6IGFtb3VudCwgYW1vdW50OiByZXN1bHQsIGZlZSB9KTsKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MjcKICAgIC8vIGFzc2V0ID0gR2xvYmFsU3RhdGU8QXNzZXQ+KCk7CiAgICBieXRlY18yIC8vICJhc3NldCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjMzMAogICAgLy8gZW1pdDxTd2FwcGVkRnJvbVZVc2Q+KHsgcmVjaXBpZW50OiB1c2VyLCB0b2tlbklkOiB0aGlzLmFzc2V0LnZhbHVlLmlkLCB2VXNkQW1vdW50OiBhbW91bnQsIGFtb3VudDogcmVzdWx0LCBmZWUgfSk7CiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgaXRvYgogICAgZGlnIDcKICAgIHN3YXAKICAgIGNvbmNhdAogICAgZGlnIDYKICAgIGl0b2IKICAgIGNvbmNhdAogICAgZGlnIDIKICAgIGl0b2IKICAgIHN3YXAKICAgIGRpZyAxCiAgICBjb25jYXQKICAgIGRpZyAyCiAgICBpdG9iCiAgICBjb25jYXQKICAgIHB1c2hieXRlcyAweGQzZjFkNTQyIC8vIG1ldGhvZCAiU3dhcHBlZEZyb21WVXNkKGFkZHJlc3MsdWludDY0LHVpbnQ2NCx1aW50NjQsdWludDY0KSIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozMzIKICAgIC8vIHRoaXMudmFsaWRhdGVCYWxhbmNlUmF0aW8oKTsKICAgIGNhbGxzdWIgdmFsaWRhdGVCYWxhbmNlUmF0aW8KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjI5MS0yOTYKICAgIC8vIHN3YXBGcm9tVlVzZCgKICAgIC8vICAgdXNlcjogQWRkcmVzcywKICAgIC8vICAgYW1vdW50OiB1aW50NjQsCiAgICAvLyAgIHJlY2VpdmVBbW91bnRNaW46IHVpbnQ2NCwKICAgIC8vICAgemVyb0ZlZTogYm9vbGVhbiwKICAgIC8vICk6IHVpbnQ2NCB7CiAgICBieXRlYyAyNCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjpQb29sLnNldEZlZVNoYXJlW3JvdXRpbmddKCkgLT4gdm9pZDoKc2V0RmVlU2hhcmU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozMzkKICAgIC8vIHNldEZlZVNoYXJlKGZlZVNoYXJlQlA6IHVpbnQ2NCk6IHZvaWQgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgYnRvaQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MzQwCiAgICAvLyB0aGlzLm9ubHlPd25lcigpOwogICAgY2FsbHN1YiBvbmx5T3duZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjM0MQogICAgLy8gYXNzZXJ0KGZlZVNoYXJlQlAgPD0gQlAsICdQb29sOiB0b28gbGFyZ2UnKTsKICAgIGR1cAogICAgaW50YyA0IC8vIDEwMDAwCiAgICA8PQogICAgYXNzZXJ0IC8vIFBvb2w6IHRvbyBsYXJnZQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDQKICAgIC8vIGZlZVNoYXJlQlAgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KCk7CiAgICBieXRlYyAxNSAvLyAiZmVlU2hhcmVCUCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjM0MgogICAgLy8gdGhpcy5mZWVTaGFyZUJQLnZhbHVlID0gZmVlU2hhcmVCUDsKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozMzkKICAgIC8vIHNldEZlZVNoYXJlKGZlZVNoYXJlQlA6IHVpbnQ2NCk6IHZvaWQgewogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjpQb29sLmFkanVzdFRvdGFsTHBBbW91bnRbcm91dGluZ10oKSAtPiB2b2lkOgphZGp1c3RUb3RhbExwQW1vdW50OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MzQ2CiAgICAvLyB0aGlzLm9ubHlPd25lcigpOwogICAgY2FsbHN1YiBvbmx5T3duZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjM0NwogICAgLy8gY29uc3QgZCA9IHRoaXMuZC52YWx1ZTsKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo1MQogICAgLy8gZCA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBieXRlYyA2IC8vICJkIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MzQ3CiAgICAvLyBjb25zdCBkID0gdGhpcy5kLnZhbHVlOwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIHN3YXAKICAgIGR1cAogICAgdW5jb3ZlciAyCiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozNDgKICAgIC8vIGNvbnN0IHRvdGFsU3VwcGx5ID0gdGhpcy50b3RhbFN1cHBseS52YWx1ZTsKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MjkKICAgIC8vIHRvdGFsU3VwcGx5ID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogMCB9KTsKICAgIGJ5dGVjIDcgLy8gInRvdGFsU3VwcGx5IgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MzQ4CiAgICAvLyBjb25zdCB0b3RhbFN1cHBseSA9IHRoaXMudG90YWxTdXBwbHkudmFsdWU7CiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgc3dhcAogICAgZHVwCiAgICBjb3ZlciAyCiAgICBjb3ZlciAzCiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozNTAKICAgIC8vIGlmIChkID4gdG90YWxTdXBwbHkpIHsKICAgID4KICAgIGJ6IGFkanVzdFRvdGFsTHBBbW91bnRfYWZ0ZXJfaWZfZWxzZUAzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozNTEKICAgIC8vIHRoaXMuZGVwb3NpdExwKFR4bi5zZW5kZXIsIGQgLSB0b3RhbFN1cHBseSk7CiAgICB0eG4gU2VuZGVyCiAgICBkaWcgMgogICAgZGlnIDIKICAgIC0KICAgIGNhbGxzdWIgZGVwb3NpdExwCgphZGp1c3RUb3RhbExwQW1vdW50X2FmdGVyX2lmX2Vsc2VAMzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjM0NQogICAgLy8gYWRqdXN0VG90YWxMcEFtb3VudCgpOiB2b2lkIHsKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo6UG9vbC5zZXRCYWxhbmNlUmF0aW9NaW5CUFtyb3V0aW5nXSgpIC0+IHZvaWQ6CnNldEJhbGFuY2VSYXRpb01pbkJQOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MzU4CiAgICAvLyBzZXRCYWxhbmNlUmF0aW9NaW5CUChiYWxhbmNlUmF0aW9NaW5CUDogdWludDY0KTogdm9pZCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozNTkKICAgIC8vIHRoaXMub25seU93bmVyKCk7CiAgICBjYWxsc3ViIG9ubHlPd25lcgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MzYwCiAgICAvLyBhc3NlcnQoYmFsYW5jZVJhdGlvTWluQlAgPD0gQlAsICdQb29sOiB0b28gbGFyZ2UnKTsKICAgIGR1cAogICAgaW50YyA0IC8vIDEwMDAwCiAgICA8PQogICAgYXNzZXJ0IC8vIFBvb2w6IHRvbyBsYXJnZQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDgKICAgIC8vIGJhbGFuY2VSYXRpb01pbkJQID0gR2xvYmFsU3RhdGU8dWludDY0PigpOwogICAgYnl0ZWMgMTYgLy8gImJhbGFuY2VSYXRpb01pbkJQIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MzYxCiAgICAvLyB0aGlzLmJhbGFuY2VSYXRpb01pbkJQLnZhbHVlID0gYmFsYW5jZVJhdGlvTWluQlA7CiAgICBzd2FwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MzU4CiAgICAvLyBzZXRCYWxhbmNlUmF0aW9NaW5CUChiYWxhbmNlUmF0aW9NaW5CUDogdWludDY0KTogdm9pZCB7CiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6OlBvb2wuc3RvcERlcG9zaXRbcm91dGluZ10oKSAtPiB2b2lkOgpzdG9wRGVwb3NpdDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjM2NQogICAgLy8gdGhpcy5vbmx5U3RvcEF1dGhvcml0eSgpOwogICAgY2FsbHN1YiBvbmx5U3RvcEF1dGhvcml0eQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NTcKICAgIC8vIGNhbkRlcG9zaXQgPSBHbG9iYWxTdGF0ZTxib29sZWFuPih7IGluaXRpYWxWYWx1ZTogdHJ1ZSB9KTsvLyBpcyBkZXBvc2l0IG9wZXJhdGlvbiBhbGxvd2VkCiAgICBieXRlYyAxMiAvLyAiY2FuRGVwb3NpdCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjM2NgogICAgLy8gdGhpcy5jYW5EZXBvc2l0LnZhbHVlID0gZmFsc2U7CiAgICBpbnRjXzAgLy8gMAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjM2NAogICAgLy8gc3RvcERlcG9zaXQoKTogdm9pZCB7CiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6OlBvb2wuc3RhcnREZXBvc2l0W3JvdXRpbmddKCkgLT4gdm9pZDoKc3RhcnREZXBvc2l0OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MzcwCiAgICAvLyB0aGlzLm9ubHlPd25lcigpOwogICAgY2FsbHN1YiBvbmx5T3duZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjU3CiAgICAvLyBjYW5EZXBvc2l0ID0gR2xvYmFsU3RhdGU8Ym9vbGVhbj4oeyBpbml0aWFsVmFsdWU6IHRydWUgfSk7Ly8gaXMgZGVwb3NpdCBvcGVyYXRpb24gYWxsb3dlZAogICAgYnl0ZWMgMTIgLy8gImNhbkRlcG9zaXQiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozNzEKICAgIC8vIHRoaXMuY2FuRGVwb3NpdC52YWx1ZSA9IHRydWU7CiAgICBpbnRjXzEgLy8gMQogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjM2OQogICAgLy8gc3RhcnREZXBvc2l0KCk6IHZvaWQgewogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjpQb29sLnN0b3BXaXRoZHJhd1tyb3V0aW5nXSgpIC0+IHZvaWQ6CnN0b3BXaXRoZHJhdzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjM3NQogICAgLy8gdGhpcy5vbmx5U3RvcEF1dGhvcml0eSgpOwogICAgY2FsbHN1YiBvbmx5U3RvcEF1dGhvcml0eQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NTgKICAgIC8vIGNhbldpdGhkcmF3ID0gR2xvYmFsU3RhdGU8Ym9vbGVhbj4oeyBpbml0aWFsVmFsdWU6IHRydWUgfSk7Ly8gaXMgd2l0aGRyYXduIG9wZXJhdGlvbiBhbGxvd2VkCiAgICBieXRlYyAxMyAvLyAiY2FuV2l0aGRyYXciCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozNzYKICAgIC8vIHRoaXMuY2FuV2l0aGRyYXcudmFsdWUgPSBmYWxzZTsKICAgIGludGNfMCAvLyAwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6Mzc0CiAgICAvLyBzdG9wV2l0aGRyYXcoKTogdm9pZCB7CiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6OlBvb2wuc3RhcnRXaXRoZHJhd1tyb3V0aW5nXSgpIC0+IHZvaWQ6CnN0YXJ0V2l0aGRyYXc6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozODAKICAgIC8vIHRoaXMub25seU93bmVyKCk7CiAgICBjYWxsc3ViIG9ubHlPd25lcgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NTgKICAgIC8vIGNhbldpdGhkcmF3ID0gR2xvYmFsU3RhdGU8Ym9vbGVhbj4oeyBpbml0aWFsVmFsdWU6IHRydWUgfSk7Ly8gaXMgd2l0aGRyYXduIG9wZXJhdGlvbiBhbGxvd2VkCiAgICBieXRlYyAxMyAvLyAiY2FuV2l0aGRyYXciCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozODEKICAgIC8vIHRoaXMuY2FuV2l0aGRyYXcudmFsdWUgPSB0cnVlOwogICAgaW50Y18xIC8vIDEKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozNzkKICAgIC8vIHN0YXJ0V2l0aGRyYXcoKTogdm9pZCB7CiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6OlBvb2wuc2V0U3RvcEF1dGhvcml0eVtyb3V0aW5nXSgpIC0+IHZvaWQ6CnNldFN0b3BBdXRob3JpdHk6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozODQKICAgIC8vIHNldFN0b3BBdXRob3JpdHkoc3RvcEF1dGhvcml0eTogQWRkcmVzcyk6IHZvaWQgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMyAvLyAzMgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC5zdGF0aWNfYXJyYXk8YXJjNC51aW50OCwgMzI+CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozODUKICAgIC8vIHRoaXMub25seU93bmVyKCk7CiAgICBjYWxsc3ViIG9ubHlPd25lcgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NTYKICAgIC8vIHByaXZhdGUgc3RvcEF1dGhvcml0eSA9IEdsb2JhbFN0YXRlPEFkZHJlc3M+KCk7Ly8gY2FuIHJlc3RyaWN0IGRlcG9zaXQgb3Igd2l0aGRyYXcgb3BlcmF0aW9ucwogICAgYnl0ZWMgMjEgLy8gInN0b3BBdXRob3JpdHkiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozODYKICAgIC8vIHRoaXMuc3RvcEF1dGhvcml0eS52YWx1ZSA9IHN0b3BBdXRob3JpdHk7CiAgICBzd2FwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6Mzg0CiAgICAvLyBzZXRTdG9wQXV0aG9yaXR5KHN0b3BBdXRob3JpdHk6IEFkZHJlc3MpOiB2b2lkIHsKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo6UG9vbC5zZXRSb3V0ZXJbcm91dGluZ10oKSAtPiB2b2lkOgpzZXRSb3V0ZXI6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozODkKICAgIC8vIHNldFJvdXRlcihyb3V0ZXI6IEFkZHJlc3MpOiB2b2lkIHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzMgLy8gMzIKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQuc3RhdGljX2FycmF5PGFyYzQudWludDgsIDMyPgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MzkwCiAgICAvLyB0aGlzLm9ubHlPd25lcigpOwogICAgY2FsbHN1YiBvbmx5T3duZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ1CiAgICAvLyByb3V0ZXIgPSBHbG9iYWxTdGF0ZTxBZGRyZXNzPigpOy8vIGlzIGRlcG9zaXQgb3BlcmF0aW9uIGFsbG93ZWQKICAgIGJ5dGVjIDIwIC8vICJyb3V0ZXIiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozOTEKICAgIC8vIHRoaXMucm91dGVyLnZhbHVlID0gcm91dGVyOwogICAgc3dhcAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjM4OQogICAgLy8gc2V0Um91dGVyKHJvdXRlcjogQWRkcmVzcyk6IHZvaWQgewogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czo6UmV3YXJkTWFuYWdlci5jbGFpbVJld2FyZHNbcm91dGluZ10oKSAtPiB2b2lkOgpjbGFpbVJld2FyZHM6CiAgICBwdXNoYnl0ZXMgIiIKICAgIGR1cAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjYxCiAgICAvLyBjb25zdCB1c2VyID0gVHhuLnNlbmRlcjsKICAgIHR4biBTZW5kZXIKICAgIGR1cAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjYyCiAgICAvLyBjb25zdCB1c2VyTHBBbW91bnQgPSB0aGlzLmJhbGFuY2UodXNlcikudmFsdWU7CiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjMzCiAgICAvLyBiYWxhbmNlID0gTG9jYWxTdGF0ZTx1aW50NjQ+KCk7CiAgICBieXRlY18zIC8vICJiYWxhbmNlIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjYyCiAgICAvLyBjb25zdCB1c2VyTHBBbW91bnQgPSB0aGlzLmJhbGFuY2UodXNlcikudmFsdWU7CiAgICBhcHBfbG9jYWxfZ2V0X2V4CiAgICBzd2FwCiAgICBkdXAKICAgIHVuY292ZXIgMgogICAgYXNzZXJ0IC8vIGNoZWNrIExvY2FsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6NjMKICAgIC8vIGlmICh1c2VyTHBBbW91bnQgPiAwKSB7CiAgICBieiBjbGFpbVJld2FyZHNfYWZ0ZXJfaWZfZWxzZUA2CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6NjQKICAgIC8vIGNvbnN0IHJld2FyZHMgPSBiaWd1aW50VG9VaW50NjRNb2R1bG8oQmlnVWludCh1c2VyTHBBbW91bnQpICogdGhpcy5hY2NSZXdhcmRQZXJTaGFyZVAudmFsdWUgLyBQX1NDQUxFKTsKICAgIGR1cAogICAgaXRvYgogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czozMAogICAgLy8gYWNjUmV3YXJkUGVyU2hhcmVQID0gR2xvYmFsU3RhdGU8YmlndWludD4oeyBpbml0aWFsVmFsdWU6IDBuIH0pOwogICAgYnl0ZWMgOCAvLyAiYWNjUmV3YXJkUGVyU2hhcmVQIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjY0CiAgICAvLyBjb25zdCByZXdhcmRzID0gYmlndWludFRvVWludDY0TW9kdWxvKEJpZ1VpbnQodXNlckxwQW1vdW50KSAqIHRoaXMuYWNjUmV3YXJkUGVyU2hhcmVQLnZhbHVlIC8gUF9TQ0FMRSk7CiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgYioKICAgIGJ5dGVjIDkgLy8gMHgwMTAwMDAwMDAwMDAwMAogICAgYi8KICAgIGNhbGxzdWIgYmlndWludFRvVWludDY0TW9kdWxvCiAgICBkdXAKICAgIGJ1cnkgNAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjY1CiAgICAvLyBjb25zdCBwZW5kaW5nOiB1aW50NjQgPSByZXdhcmRzIC0gdGhpcy51c2VyUmV3YXJkRGVidCh1c2VyKS52YWx1ZTsKICAgIGRpZyAyCiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjM0CiAgICAvLyB1c2VyUmV3YXJkRGVidCA9IExvY2FsU3RhdGU8dWludDY0PigpOwogICAgYnl0ZWMgNSAvLyAidXNlclJld2FyZERlYnQiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6NjUKICAgIC8vIGNvbnN0IHBlbmRpbmc6IHVpbnQ2NCA9IHJld2FyZHMgLSB0aGlzLnVzZXJSZXdhcmREZWJ0KHVzZXIpLnZhbHVlOwogICAgYXBwX2xvY2FsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIExvY2FsU3RhdGUgZXhpc3RzCiAgICAtCiAgICBkdXAKICAgIGJ1cnkgNQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjY2CiAgICAvLyBpZiAocGVuZGluZyA+IDApIHsKICAgIGJ6IGNsYWltUmV3YXJkc19hZnRlcl9pZl9lbHNlQDYKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czo2NwogICAgLy8gdGhpcy51c2VyUmV3YXJkRGVidCh1c2VyKS52YWx1ZSA9IHJld2FyZHM7CiAgICBkaWcgMQogICAgZHVwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MzQKICAgIC8vIHVzZXJSZXdhcmREZWJ0ID0gTG9jYWxTdGF0ZTx1aW50NjQ+KCk7CiAgICBieXRlYyA1IC8vICJ1c2VyUmV3YXJkRGVidCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czo2NwogICAgLy8gdGhpcy51c2VyUmV3YXJkRGVidCh1c2VyKS52YWx1ZSA9IHJld2FyZHM7CiAgICBkaWcgNQogICAgYXBwX2xvY2FsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjY4CiAgICAvLyBpdHhuLmFzc2V0VHJhbnNmZXIoeyB4ZmVyQXNzZXQ6IHRoaXMuYXNzZXQudmFsdWUsIGFzc2V0QW1vdW50OiBwZW5kaW5nLCBhc3NldFJlY2VpdmVyOiB1c2VyIH0pLnN1Ym1pdCgpOwogICAgaXR4bl9iZWdpbgogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoyNwogICAgLy8gYXNzZXQgPSBHbG9iYWxTdGF0ZTxBc3NldD4oKTsKICAgIGJ5dGVjXzIgLy8gImFzc2V0IgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjY4CiAgICAvLyBpdHhuLmFzc2V0VHJhbnNmZXIoeyB4ZmVyQXNzZXQ6IHRoaXMuYXNzZXQudmFsdWUsIGFzc2V0QW1vdW50OiBwZW5kaW5nLCBhc3NldFJlY2VpdmVyOiB1c2VyIH0pLnN1Ym1pdCgpOwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIGRpZyAxCiAgICBpdHhuX2ZpZWxkIEFzc2V0UmVjZWl2ZXIKICAgIGRpZyA1CiAgICBkdXAKICAgIGNvdmVyIDIKICAgIGl0eG5fZmllbGQgQXNzZXRBbW91bnQKICAgIGl0eG5fZmllbGQgWGZlckFzc2V0CiAgICBwdXNoaW50IDQgLy8gNAogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICBpdHhuX3N1Ym1pdAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjY5CiAgICAvLyBlbWl0PFJld2FyZHNDbGFpbWVkPih7IHVzZXI6IG5ldyBBZGRyZXNzKHVzZXIpLCBwZW5kaW5nIH0pOwogICAgaXRvYgogICAgY29uY2F0CiAgICBieXRlYyAyNSAvLyBtZXRob2QgIlJld2FyZHNDbGFpbWVkKGFkZHJlc3MsdWludDY0KSIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCgpjbGFpbVJld2FyZHNfYWZ0ZXJfaWZfZWxzZUA2OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjU5CiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6OlJld2FyZE1hbmFnZXIuc2V0QWRtaW5GZWVTaGFyZVtyb3V0aW5nXSgpIC0+IHZvaWQ6CnNldEFkbWluRmVlU2hhcmU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6NzQKICAgIC8vIEBhYmltZXRob2QoKQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgYnRvaQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjc2CiAgICAvLyB0aGlzLm9ubHlPd25lcigpOwogICAgY2FsbHN1YiBvbmx5T3duZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czo3NwogICAgLy8gYXNzZXJ0KGFkbWluRmVlU2hhcmVCUCA8PSBCUCwgJ1Jld2FyZE1hbmFnZXI6IHRvbyBoaWdoJyk7CiAgICBkdXAKICAgIGludGMgNCAvLyAxMDAwMAogICAgPD0KICAgIGFzc2VydCAvLyBSZXdhcmRNYW5hZ2VyOiB0b28gaGlnaAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjI4CiAgICAvLyBhZG1pbkZlZVNoYXJlQlAgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiBCUCAvIDUgfSk7IC8vIERlZmF1bHQgYWRtaW4gZmVlIGlzIDIwJQogICAgYnl0ZWMgMTggLy8gImFkbWluRmVlU2hhcmVCUCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czo3OAogICAgLy8gdGhpcy5hZG1pbkZlZVNoYXJlQlAudmFsdWUgPSBhZG1pbkZlZVNoYXJlQlA7CiAgICBzd2FwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjc0CiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6OlJld2FyZE1hbmFnZXIuY2xhaW1BZG1pbkZlZVtyb3V0aW5nXSgpIC0+IHZvaWQ6CmNsYWltQWRtaW5GZWU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6ODMKICAgIC8vIHRoaXMub25seU93bmVyKCk7CiAgICBjYWxsc3ViIG9ubHlPd25lcgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjg0CiAgICAvLyBjb25zdCBhZG1pbkZlZUFtb3VudCA9IHRoaXMuYWRtaW5GZWVBbW91bnQudmFsdWU7CiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjMxCiAgICAvLyBhZG1pbkZlZUFtb3VudCA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBieXRlYyAxMSAvLyAiYWRtaW5GZWVBbW91bnQiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6ODQKICAgIC8vIGNvbnN0IGFkbWluRmVlQW1vdW50ID0gdGhpcy5hZG1pbkZlZUFtb3VudC52YWx1ZTsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBzd2FwCiAgICBkdXAKICAgIHVuY292ZXIgMgogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjg1CiAgICAvLyBpZiAoYWRtaW5GZWVBbW91bnQgPiAwKSB7CiAgICBieiBjbGFpbUFkbWluRmVlX2FmdGVyX2lmX2Vsc2VANAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjg2LTkwCiAgICAvLyBpdHhuLmFzc2V0VHJhbnNmZXIoewogICAgLy8gICB4ZmVyQXNzZXQ6IHRoaXMuYXNzZXQudmFsdWUsCiAgICAvLyAgIGFzc2V0QW1vdW50OiBhZG1pbkZlZUFtb3VudCwKICAgIC8vICAgYXNzZXRSZWNlaXZlcjogdGhpcy5vd25lci52YWx1ZS5ieXRlcywKICAgIC8vIH0pLnN1Ym1pdCgpOwogICAgaXR4bl9iZWdpbgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjg3CiAgICAvLyB4ZmVyQXNzZXQ6IHRoaXMuYXNzZXQudmFsdWUsCiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjI3CiAgICAvLyBhc3NldCA9IEdsb2JhbFN0YXRlPEFzc2V0PigpOwogICAgYnl0ZWNfMiAvLyAiYXNzZXQiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6ODcKICAgIC8vIHhmZXJBc3NldDogdGhpcy5hc3NldC52YWx1ZSwKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6ODkKICAgIC8vIGFzc2V0UmVjZWl2ZXI6IHRoaXMub3duZXIudmFsdWUuYnl0ZXMsCiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9vd25hYmxlLmFsZ28udHM6NgogICAgLy8gcHJvdGVjdGVkIG93bmVyID0gR2xvYmFsU3RhdGU8QWRkcmVzcz4oKTsKICAgIGJ5dGVjIDE0IC8vICJvd25lciIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czo4OQogICAgLy8gYXNzZXRSZWNlaXZlcjogdGhpcy5vd25lci52YWx1ZS5ieXRlcywKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICBpdHhuX2ZpZWxkIEFzc2V0UmVjZWl2ZXIKICAgIGRpZyAxCiAgICBpdHhuX2ZpZWxkIEFzc2V0QW1vdW50CiAgICBpdHhuX2ZpZWxkIFhmZXJBc3NldAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjg2LTkwCiAgICAvLyBpdHhuLmFzc2V0VHJhbnNmZXIoewogICAgLy8gICB4ZmVyQXNzZXQ6IHRoaXMuYXNzZXQudmFsdWUsCiAgICAvLyAgIGFzc2V0QW1vdW50OiBhZG1pbkZlZUFtb3VudCwKICAgIC8vICAgYXNzZXRSZWNlaXZlcjogdGhpcy5vd25lci52YWx1ZS5ieXRlcywKICAgIC8vIH0pLnN1Ym1pdCgpOwogICAgcHVzaGludCA0IC8vIDQKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludGNfMCAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgaXR4bl9zdWJtaXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czozMQogICAgLy8gYWRtaW5GZWVBbW91bnQgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgYnl0ZWMgMTEgLy8gImFkbWluRmVlQW1vdW50IgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjkxCiAgICAvLyB0aGlzLmFkbWluRmVlQW1vdW50LnZhbHVlID0gMDsKICAgIGludGNfMCAvLyAwCiAgICBhcHBfZ2xvYmFsX3B1dAoKY2xhaW1BZG1pbkZlZV9hZnRlcl9pZl9lbHNlQDQ6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6ODEKICAgIC8vIEBhYmltZXRob2QoKQogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czo6UmV3YXJkTWFuYWdlci5wZW5kaW5nUmV3YXJkW3JvdXRpbmddKCkgLT4gdm9pZDoKcGVuZGluZ1Jld2FyZDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czo5NQogICAgLy8gQGFiaW1ldGhvZCh7IHJlYWRvbmx5OiB0cnVlIH0pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18zIC8vIDMyCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnN0YXRpY19hcnJheTxhcmM0LnVpbnQ4LCAzMj4KICAgIGNhbGxzdWIgc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjpSZXdhcmRNYW5hZ2VyLnBlbmRpbmdSZXdhcmQKICAgIGl0b2IKICAgIGJ5dGVjIDI0IC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9vd25hYmxlLmFsZ28udHM6Ok93bmFibGUudHJhbnNmZXJPd25lcnNoaXBbcm91dGluZ10oKSAtPiB2b2lkOgp0cmFuc2Zlck93bmVyc2hpcDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvb3duYWJsZS5hbGdvLnRzOjE2CiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzMgLy8gMzIKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQuc3RhdGljX2FycmF5PGFyYzQudWludDgsIDMyPgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9vd25hYmxlLmFsZ28udHM6MTgKICAgIC8vIHRoaXMub25seU93bmVyKCk7CiAgICBjYWxsc3ViIG9ubHlPd25lcgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9vd25hYmxlLmFsZ28udHM6NgogICAgLy8gcHJvdGVjdGVkIG93bmVyID0gR2xvYmFsU3RhdGU8QWRkcmVzcz4oKTsKICAgIGJ5dGVjIDE0IC8vICJvd25lciIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvb3duYWJsZS5hbGdvLnRzOjE5CiAgICAvLyB0aGlzLm93bmVyLnZhbHVlID0gbmV3T3duZXI7CiAgICBzd2FwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9vd25hYmxlLmFsZ28udHM6MTYKICAgIC8vIEBhYmltZXRob2QoKQogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjpQb29sLm9ubHlSb3V0ZXIoKSAtPiB2b2lkOgpvbmx5Um91dGVyOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MTE4CiAgICAvLyBhc3NlcnQob3AuVHhuLnNlbmRlci5ieXRlcyA9PT0gdGhpcy5yb3V0ZXIudmFsdWUuYnl0ZXMsICdQb29sOiBvbmx5IHJvdXRlcicpOwogICAgdHhuIFNlbmRlcgogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ1CiAgICAvLyByb3V0ZXIgPSBHbG9iYWxTdGF0ZTxBZGRyZXNzPigpOy8vIGlzIGRlcG9zaXQgb3BlcmF0aW9uIGFsbG93ZWQKICAgIGJ5dGVjIDIwIC8vICJyb3V0ZXIiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoxMTgKICAgIC8vIGFzc2VydChvcC5UeG4uc2VuZGVyLmJ5dGVzID09PSB0aGlzLnJvdXRlci52YWx1ZS5ieXRlcywgJ1Bvb2w6IG9ubHkgcm91dGVyJyk7CiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgPT0KICAgIGFzc2VydCAvLyBQb29sOiBvbmx5IHJvdXRlcgogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6OlBvb2wub25seVN0b3BBdXRob3JpdHkoKSAtPiB2b2lkOgpvbmx5U3RvcEF1dGhvcml0eToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjEyMgogICAgLy8gYXNzZXJ0KG9wLlR4bi5zZW5kZXIuYnl0ZXMgPT09IHRoaXMuc3RvcEF1dGhvcml0eS52YWx1ZS5ieXRlcywgJ1Bvb2w6IGlzIG5vdCBzdG9wQXV0aG9yaXR5Jyk7CiAgICB0eG4gU2VuZGVyCiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NTYKICAgIC8vIHByaXZhdGUgc3RvcEF1dGhvcml0eSA9IEdsb2JhbFN0YXRlPEFkZHJlc3M+KCk7Ly8gY2FuIHJlc3RyaWN0IGRlcG9zaXQgb3Igd2l0aGRyYXcgb3BlcmF0aW9ucwogICAgYnl0ZWMgMjEgLy8gInN0b3BBdXRob3JpdHkiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoxMjIKICAgIC8vIGFzc2VydChvcC5UeG4uc2VuZGVyLmJ5dGVzID09PSB0aGlzLnN0b3BBdXRob3JpdHkudmFsdWUuYnl0ZXMsICdQb29sOiBpcyBub3Qgc3RvcEF1dGhvcml0eScpOwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgID09CiAgICBhc3NlcnQgLy8gUG9vbDogaXMgbm90IHN0b3BBdXRob3JpdHkKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjpQb29sLnZhbGlkYXRlQmFsYW5jZVJhdGlvKCkgLT4gdm9pZDoKdmFsaWRhdGVCYWxhbmNlUmF0aW86CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoxMjgKICAgIC8vIHByaXZhdGUgdmFsaWRhdGVCYWxhbmNlUmF0aW8oKTogdm9pZCB7CiAgICBwcm90byAwIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjEyOQogICAgLy8gY29uc3QgdG9rZW5CYWxhbmNlID0gdGhpcy50b2tlbkJhbGFuY2UudmFsdWU7CiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDYKICAgIC8vIHRva2VuQmFsYW5jZSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBieXRlY18wIC8vICJ0b2tlbkJhbGFuY2UiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoxMjkKICAgIC8vIGNvbnN0IHRva2VuQmFsYW5jZSA9IHRoaXMudG9rZW5CYWxhbmNlLnZhbHVlOwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIHN3YXAKICAgIGR1cAogICAgdW5jb3ZlciAyCiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoxMzAKICAgIC8vIGNvbnN0IHZVc2RCYWxhbmNlID0gdGhpcy52VXNkQmFsYW5jZS52YWx1ZTsKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NwogICAgLy8gdlVzZEJhbGFuY2UgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgYnl0ZWNfMSAvLyAidlVzZEJhbGFuY2UiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoxMzAKICAgIC8vIGNvbnN0IHZVc2RCYWxhbmNlID0gdGhpcy52VXNkQmFsYW5jZS52YWx1ZTsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBzd2FwCiAgICBkdXAKICAgIGNvdmVyIDIKICAgIGNvdmVyIDMKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjEzMQogICAgLy8gaWYgKHRva2VuQmFsYW5jZSA+IHZVc2RCYWxhbmNlKSB7CiAgICA+CiAgICBieiB2YWxpZGF0ZUJhbGFuY2VSYXRpb19lbHNlX2JvZHlAMgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MTMyCiAgICAvLyBhc3NlcnQoKHZVc2RCYWxhbmNlICogQlApIC8gdG9rZW5CYWxhbmNlID49IHRoaXMuYmFsYW5jZVJhdGlvTWluQlAudmFsdWUsICdQb29sOiBsb3cgdlVTRCBiYWxhbmNlJyk7CiAgICBmcmFtZV9kaWcgMQogICAgaW50YyA0IC8vIDEwMDAwCiAgICAqCiAgICBmcmFtZV9kaWcgMAogICAgLwogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ4CiAgICAvLyBiYWxhbmNlUmF0aW9NaW5CUCA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oKTsKICAgIGJ5dGVjIDE2IC8vICJiYWxhbmNlUmF0aW9NaW5CUCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjEzMgogICAgLy8gYXNzZXJ0KCh2VXNkQmFsYW5jZSAqIEJQKSAvIHRva2VuQmFsYW5jZSA+PSB0aGlzLmJhbGFuY2VSYXRpb01pbkJQLnZhbHVlLCAnUG9vbDogbG93IHZVU0QgYmFsYW5jZScpOwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgID49CiAgICBhc3NlcnQgLy8gUG9vbDogbG93IHZVU0QgYmFsYW5jZQoKdmFsaWRhdGVCYWxhbmNlUmF0aW9fYWZ0ZXJfaWZfZWxzZUA1OgogICAgcmV0c3ViCgp2YWxpZGF0ZUJhbGFuY2VSYXRpb19lbHNlX2JvZHlAMjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjEzMwogICAgLy8gfSBlbHNlIGlmICh0b2tlbkJhbGFuY2UgPCB2VXNkQmFsYW5jZSkgewogICAgZnJhbWVfZGlnIDAKICAgIGZyYW1lX2RpZyAxCiAgICA8CiAgICBieiB2YWxpZGF0ZUJhbGFuY2VSYXRpb19hZnRlcl9pZl9lbHNlQDUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjEzNAogICAgLy8gYXNzZXJ0KCh0b2tlbkJhbGFuY2UgKiBCUCkgLyB2VXNkQmFsYW5jZSA+PSB0aGlzLmJhbGFuY2VSYXRpb01pbkJQLnZhbHVlLCAnUG9vbDogbG93IHRva2VuIGJhbGFuY2UnKTsKICAgIGZyYW1lX2RpZyAwCiAgICBpbnRjIDQgLy8gMTAwMDAKICAgICoKICAgIGZyYW1lX2RpZyAxCiAgICAvCiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDgKICAgIC8vIGJhbGFuY2VSYXRpb01pbkJQID0gR2xvYmFsU3RhdGU8dWludDY0PigpOwogICAgYnl0ZWMgMTYgLy8gImJhbGFuY2VSYXRpb01pbkJQIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MTM0CiAgICAvLyBhc3NlcnQoKHRva2VuQmFsYW5jZSAqIEJQKSAvIHZVc2RCYWxhbmNlID49IHRoaXMuYmFsYW5jZVJhdGlvTWluQlAudmFsdWUsICdQb29sOiBsb3cgdG9rZW4gYmFsYW5jZScpOwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgID49CiAgICBhc3NlcnQgLy8gUG9vbDogbG93IHRva2VuIGJhbGFuY2UKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjpQb29sLndpdGhkcmF3KGFtb3VudExwOiB1aW50NjQsIGJ1ZGdldDogdWludDY0KSAtPiB2b2lkOgpzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo6UG9vbC53aXRoZHJhdzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjE5Ny0xOTgKICAgIC8vIEBhYmltZXRob2QoeyBkZWZhdWx0QXJndW1lbnRzOiB7IGJ1ZGdldDogeyBjb25zdGFudDogMzAwMCB9IH0gfSkKICAgIC8vIHdpdGhkcmF3KGFtb3VudExwOiB1aW50NjQsIGJ1ZGdldDogdWludDY0KTogdm9pZCB7CiAgICBwcm90byAyIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjE5OQogICAgLy8gZW5zdXJlQnVkZ2V0KGJ1ZGdldCwgT3BVcEZlZVNvdXJjZS5Hcm91cENyZWRpdCk7CiAgICBmcmFtZV9kaWcgLTEKICAgIGludGNfMCAvLyAwCiAgICBjYWxsc3ViIGVuc3VyZV9idWRnZXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjE0MwogICAgLy8gYXNzZXJ0KHRoaXMuY2FuV2l0aGRyYXcudmFsdWUsICciUG9vbDogd2l0aGRyYXcgcHJvaGliaXRlZCcpOwogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjU4CiAgICAvLyBjYW5XaXRoZHJhdyA9IEdsb2JhbFN0YXRlPGJvb2xlYW4+KHsgaW5pdGlhbFZhbHVlOiB0cnVlIH0pOy8vIGlzIHdpdGhkcmF3biBvcGVyYXRpb24gYWxsb3dlZAogICAgYnl0ZWMgMTMgLy8gImNhbldpdGhkcmF3IgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MTQzCiAgICAvLyBhc3NlcnQodGhpcy5jYW5XaXRoZHJhdy52YWx1ZSwgJyJQb29sOiB3aXRoZHJhdyBwcm9oaWJpdGVkJyk7CiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgYXNzZXJ0IC8vICJQb29sOiB3aXRoZHJhdyBwcm9oaWJpdGVkCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyMDMKICAgIC8vIGNvbnN0IG9sZEQgPSB0aGlzLmQudmFsdWU7CiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NTEKICAgIC8vIGQgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgYnl0ZWMgNiAvLyAiZCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjIwMwogICAgLy8gY29uc3Qgb2xkRCA9IHRoaXMuZC52YWx1ZTsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyMDQKICAgIC8vIHRoaXMud2l0aGRyYXdMcChUeG4uc2VuZGVyLCBhbW91bnRMcCk7CiAgICB0eG4gU2VuZGVyCiAgICBkdXAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoxMzAKICAgIC8vIGxldCB1c2VyTHBBbW91bnQgPSB0aGlzLmJhbGFuY2UoZnJvbSkudmFsdWU7CiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjMzCiAgICAvLyBiYWxhbmNlID0gTG9jYWxTdGF0ZTx1aW50NjQ+KCk7CiAgICBieXRlY18zIC8vICJiYWxhbmNlIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjEzMAogICAgLy8gbGV0IHVzZXJMcEFtb3VudCA9IHRoaXMuYmFsYW5jZShmcm9tKS52YWx1ZTsKICAgIGFwcF9sb2NhbF9nZXRfZXgKICAgIHN3YXAKICAgIGR1cAogICAgdW5jb3ZlciAyCiAgICBhc3NlcnQgLy8gY2hlY2sgTG9jYWxTdGF0ZSBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoxMzEKICAgIC8vIGFzc2VydCh1c2VyTHBBbW91bnQgPj0gbHBBbW91bnQsICdSZXdhcmRNYW5hZ2VyOiBub3QgZW5vdWdoIGFtb3VudCcpOwogICAgZHVwCiAgICBmcmFtZV9kaWcgLTIKICAgID49CiAgICBhc3NlcnQgLy8gUmV3YXJkTWFuYWdlcjogbm90IGVub3VnaCBhbW91bnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoxMzIKICAgIC8vIGNvbnN0IGFjY1Jld2FyZFBlclNoYXJlUCA9IHRoaXMuYWNjUmV3YXJkUGVyU2hhcmVQLnZhbHVlOwogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czozMAogICAgLy8gYWNjUmV3YXJkUGVyU2hhcmVQID0gR2xvYmFsU3RhdGU8YmlndWludD4oeyBpbml0aWFsVmFsdWU6IDBuIH0pOwogICAgYnl0ZWMgOCAvLyAiYWNjUmV3YXJkUGVyU2hhcmVQIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjEzMgogICAgLy8gY29uc3QgYWNjUmV3YXJkUGVyU2hhcmVQID0gdGhpcy5hY2NSZXdhcmRQZXJTaGFyZVAudmFsdWU7CiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgc3dhcAogICAgY292ZXIgMgogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjEzMwogICAgLy8gbGV0IHBlbmRpbmc6IHVpbnQ2NCA9IDA7CiAgICBpbnRjXzAgLy8gMAogICAgc3dhcAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjEzNAogICAgLy8gaWYgKHVzZXJMcEFtb3VudCA+IDApIHsKICAgIGJ6IHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjpQb29sLndpdGhkcmF3X2FmdGVyX2lmX2Vsc2VANgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjEzNQogICAgLy8gcGVuZGluZyA9IGJpZ3VpbnRUb1VpbnQ2NE1vZHVsbygoQmlnVWludCh1c2VyTHBBbW91bnQpICogYWNjUmV3YXJkUGVyU2hhcmVQKSAvIFBfU0NBTEUpIC0gdGhpcy51c2VyUmV3YXJkRGVidChmcm9tKS52YWx1ZTsKICAgIGZyYW1lX2RpZyAyCiAgICBpdG9iCiAgICBmcmFtZV9kaWcgMwogICAgYioKICAgIGJ5dGVjIDkgLy8gMHgwMTAwMDAwMDAwMDAwMAogICAgYi8KICAgIGNhbGxzdWIgYmlndWludFRvVWludDY0TW9kdWxvCiAgICBmcmFtZV9kaWcgMQogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czozNAogICAgLy8gdXNlclJld2FyZERlYnQgPSBMb2NhbFN0YXRlPHVpbnQ2ND4oKTsKICAgIGJ5dGVjIDUgLy8gInVzZXJSZXdhcmREZWJ0IgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjEzNQogICAgLy8gcGVuZGluZyA9IGJpZ3VpbnRUb1VpbnQ2NE1vZHVsbygoQmlnVWludCh1c2VyTHBBbW91bnQpICogYWNjUmV3YXJkUGVyU2hhcmVQKSAvIFBfU0NBTEUpIC0gdGhpcy51c2VyUmV3YXJkRGVidChmcm9tKS52YWx1ZTsKICAgIGFwcF9sb2NhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBMb2NhbFN0YXRlIGV4aXN0cwogICAgLQogICAgZnJhbWVfYnVyeSA0CgpzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo6UG9vbC53aXRoZHJhd19hZnRlcl9pZl9lbHNlQDY6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MTM3CiAgICAvLyB1c2VyTHBBbW91bnQgLT0gbHBBbW91bnQ7CiAgICBmcmFtZV9kaWcgMgogICAgZnJhbWVfZGlnIC0yCiAgICAtCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MTM4CiAgICAvLyB0aGlzLmJhbGFuY2UoZnJvbSkudmFsdWUgLT0gbHBBbW91bnQ7CiAgICBmcmFtZV9kaWcgMQogICAgZHVwCiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjMzCiAgICAvLyBiYWxhbmNlID0gTG9jYWxTdGF0ZTx1aW50NjQ+KCk7CiAgICBieXRlY18zIC8vICJiYWxhbmNlIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjEzOAogICAgLy8gdGhpcy5iYWxhbmNlKGZyb20pLnZhbHVlIC09IGxwQW1vdW50OwogICAgYXBwX2xvY2FsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIExvY2FsU3RhdGUgZXhpc3RzCiAgICBmcmFtZV9kaWcgLTIKICAgIC0KICAgIGRpZyAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MzMKICAgIC8vIGJhbGFuY2UgPSBMb2NhbFN0YXRlPHVpbnQ2ND4oKTsKICAgIGJ5dGVjXzMgLy8gImJhbGFuY2UiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MTM4CiAgICAvLyB0aGlzLmJhbGFuY2UoZnJvbSkudmFsdWUgLT0gbHBBbW91bnQ7CiAgICB1bmNvdmVyIDIKICAgIGFwcF9sb2NhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoxMzkKICAgIC8vIHRoaXMudG90YWxTdXBwbHkudmFsdWUgLT0gbHBBbW91bnQ7CiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjI5CiAgICAvLyB0b3RhbFN1cHBseSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBieXRlYyA3IC8vICJ0b3RhbFN1cHBseSIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoxMzkKICAgIC8vIHRoaXMudG90YWxTdXBwbHkudmFsdWUgLT0gbHBBbW91bnQ7CiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgZnJhbWVfZGlnIC0yCiAgICAtCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MjkKICAgIC8vIHRvdGFsU3VwcGx5ID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogMCB9KTsKICAgIGJ5dGVjIDcgLy8gInRvdGFsU3VwcGx5IgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjEzOQogICAgLy8gdGhpcy50b3RhbFN1cHBseS52YWx1ZSAtPSBscEFtb3VudDsKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MTQwCiAgICAvLyB0aGlzLnVzZXJSZXdhcmREZWJ0KGZyb20pLnZhbHVlID0gYmlndWludFRvVWludDY0TW9kdWxvKEJpZ1VpbnQodXNlckxwQW1vdW50KSAqIGFjY1Jld2FyZFBlclNoYXJlUCAvIFBfU0NBTEUpOwogICAgc3dhcAogICAgaXRvYgogICAgZnJhbWVfZGlnIDMKICAgIGIqCiAgICBieXRlYyA5IC8vIDB4MDEwMDAwMDAwMDAwMDAKICAgIGIvCiAgICBjYWxsc3ViIGJpZ3VpbnRUb1VpbnQ2NE1vZHVsbwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjM0CiAgICAvLyB1c2VyUmV3YXJkRGVidCA9IExvY2FsU3RhdGU8dWludDY0PigpOwogICAgYnl0ZWMgNSAvLyAidXNlclJld2FyZERlYnQiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MTQwCiAgICAvLyB0aGlzLnVzZXJSZXdhcmREZWJ0KGZyb20pLnZhbHVlID0gYmlndWludFRvVWludDY0TW9kdWxvKEJpZ1VpbnQodXNlckxwQW1vdW50KSAqIGFjY1Jld2FyZFBlclNoYXJlUCAvIFBfU0NBTEUpOwogICAgc3dhcAogICAgYXBwX2xvY2FsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjE0MQogICAgLy8gaWYgKHBlbmRpbmcgPiAwKSB7CiAgICBmcmFtZV9kaWcgNAogICAgYnogc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6OlBvb2wud2l0aGRyYXdfYWZ0ZXJfaWZfZWxzZUA5CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MTQyCiAgICAvLyBpdHhuLmFzc2V0VHJhbnNmZXIoeyB4ZmVyQXNzZXQ6IHRoaXMuYXNzZXQudmFsdWUsIGFzc2V0QW1vdW50OiBwZW5kaW5nLCBhc3NldFJlY2VpdmVyOiBmcm9tIH0pLnN1Ym1pdCgpOwogICAgaXR4bl9iZWdpbgogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoyNwogICAgLy8gYXNzZXQgPSBHbG9iYWxTdGF0ZTxBc3NldD4oKTsKICAgIGJ5dGVjXzIgLy8gImFzc2V0IgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjE0MgogICAgLy8gaXR4bi5hc3NldFRyYW5zZmVyKHsgeGZlckFzc2V0OiB0aGlzLmFzc2V0LnZhbHVlLCBhc3NldEFtb3VudDogcGVuZGluZywgYXNzZXRSZWNlaXZlcjogZnJvbSB9KS5zdWJtaXQoKTsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICBmcmFtZV9kaWcgMQogICAgZHVwCiAgICBjb3ZlciAyCiAgICBpdHhuX2ZpZWxkIEFzc2V0UmVjZWl2ZXIKICAgIGZyYW1lX2RpZyA0CiAgICBkdXAKICAgIGNvdmVyIDIKICAgIGl0eG5fZmllbGQgQXNzZXRBbW91bnQKICAgIGl0eG5fZmllbGQgWGZlckFzc2V0CiAgICBwdXNoaW50IDQgLy8gNAogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICBpdHhuX3N1Ym1pdAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjE0MwogICAgLy8gZW1pdDxSZXdhcmRzQ2xhaW1lZD4oeyB1c2VyOiBuZXcgQWRkcmVzcyhmcm9tKSwgcGVuZGluZyB9KTsKICAgIGl0b2IKICAgIGNvbmNhdAogICAgYnl0ZWMgMjUgLy8gbWV0aG9kICJSZXdhcmRzQ2xhaW1lZChhZGRyZXNzLHVpbnQ2NCkiCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwoKc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6OlBvb2wud2l0aGRyYXdfYWZ0ZXJfaWZfZWxzZUA5OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjE0NQogICAgLy8gZW1pdDxXaXRoZHJhdz4oeyBmcm9tOiBuZXcgQWRkcmVzcyhmcm9tKSwgbHBBbW91bnQgfSk7CiAgICBmcmFtZV9kaWcgLTIKICAgIGl0b2IKICAgIGZyYW1lX2RpZyAxCiAgICBkaWcgMQogICAgY29uY2F0CiAgICBwdXNoYnl0ZXMgMHhkM2FmYTRmMSAvLyBtZXRob2QgIldpdGhkcmF3KGFkZHJlc3MsdWludDY0KSIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyMDkKICAgIC8vIGNvbnN0IHRva2VuQmFsYW5jZSA9IHRoaXMudG9rZW5CYWxhbmNlLnZhbHVlOwogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ2CiAgICAvLyB0b2tlbkJhbGFuY2UgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgYnl0ZWNfMCAvLyAidG9rZW5CYWxhbmNlIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MjA5CiAgICAvLyBjb25zdCB0b2tlbkJhbGFuY2UgPSB0aGlzLnRva2VuQmFsYW5jZS52YWx1ZTsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyMTAKICAgIC8vIGNvbnN0IHZVc2RCYWxhbmNlID0gdGhpcy52VXNkQmFsYW5jZS52YWx1ZTsKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NwogICAgLy8gdlVzZEJhbGFuY2UgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgYnl0ZWNfMSAvLyAidlVzZEJhbGFuY2UiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyMTAKICAgIC8vIGNvbnN0IHZVc2RCYWxhbmNlID0gdGhpcy52VXNkQmFsYW5jZS52YWx1ZTsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyMTIKICAgIC8vIGNvbnN0IG9sZEJhbGFuY2U6IHVpbnQ2NCA9ICh0b2tlbkJhbGFuY2UgKyB2VXNkQmFsYW5jZSk7CiAgICBkdXAyCiAgICArCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyMTMKICAgIC8vIHRoaXMudG9rZW5CYWxhbmNlLnZhbHVlIC09IG5ldyBVaW50PDY0PigoQmlnVWludChhbW91bnRMcCkgKiBCaWdVaW50KHRva2VuQmFsYW5jZSkpIC8gQmlnVWludChvbGRCYWxhbmNlKSkuYXNVaW50NjQoKTsKICAgIGRpZyAyCiAgICBpdG9iCiAgICBkaWcgNAogICAgYioKICAgIGRpZyAxCiAgICBpdG9iCiAgICBzd2FwCiAgICBkaWcgMQogICAgYi8KICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzIgLy8gOAogICAgPD0KICAgIGFzc2VydCAvLyBvdmVyZmxvdwogICAgaW50Y18yIC8vIDgKICAgIGJ6ZXJvCiAgICBzd2FwCiAgICBkaWcgMQogICAgYnwKICAgIGJ0b2kKICAgIHVuY292ZXIgNQogICAgc3dhcAogICAgLQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDYKICAgIC8vIHRva2VuQmFsYW5jZSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBieXRlY18wIC8vICJ0b2tlbkJhbGFuY2UiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyMTMKICAgIC8vIHRoaXMudG9rZW5CYWxhbmNlLnZhbHVlIC09IG5ldyBVaW50PDY0PigoQmlnVWludChhbW91bnRMcCkgKiBCaWdVaW50KHRva2VuQmFsYW5jZSkpIC8gQmlnVWludChvbGRCYWxhbmNlKSkuYXNVaW50NjQoKTsKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyMTQKICAgIC8vIHRoaXMudlVzZEJhbGFuY2UudmFsdWUgLT0gbmV3IFVpbnQ8NjQ+KChCaWdVaW50KGFtb3VudExwKSAqIEJpZ1VpbnQodlVzZEJhbGFuY2UpKSAvIEJpZ1VpbnQob2xkQmFsYW5jZSkpLmFzVWludDY0KCk7CiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDcKICAgIC8vIHZVc2RCYWxhbmNlID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogMCB9KTsKICAgIGJ5dGVjXzEgLy8gInZVc2RCYWxhbmNlIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MjE0CiAgICAvLyB0aGlzLnZVc2RCYWxhbmNlLnZhbHVlIC09IG5ldyBVaW50PDY0PigoQmlnVWludChhbW91bnRMcCkgKiBCaWdVaW50KHZVc2RCYWxhbmNlKSkgLyBCaWdVaW50KG9sZEJhbGFuY2UpKS5hc1VpbnQ2NCgpOwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIHVuY292ZXIgNAogICAgaXRvYgogICAgdW5jb3ZlciA1CiAgICBiKgogICAgdW5jb3ZlciAzCiAgICBiLwogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyA4CiAgICA8PQogICAgYXNzZXJ0IC8vIG92ZXJmbG93CiAgICB1bmNvdmVyIDIKICAgIGJ8CiAgICBidG9pCiAgICAtCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NwogICAgLy8gdlVzZEJhbGFuY2UgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgYnl0ZWNfMSAvLyAidlVzZEJhbGFuY2UiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyMTQKICAgIC8vIHRoaXMudlVzZEJhbGFuY2UudmFsdWUgLT0gbmV3IFVpbnQ8NjQ+KChCaWdVaW50KGFtb3VudExwKSAqIEJpZ1VpbnQodlVzZEJhbGFuY2UpKSAvIEJpZ1VpbnQob2xkQmFsYW5jZSkpLmFzVWludDY0KCk7CiAgICBkaWcgMQogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjIxNgogICAgLy8gYXNzZXJ0KHRoaXMudG9rZW5CYWxhbmNlLnZhbHVlICsgdGhpcy52VXNkQmFsYW5jZS52YWx1ZSA8IG9sZEJhbGFuY2UsICdQb29sOiB6ZXJvIGNoYW5nZXMnKTsKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NgogICAgLy8gdG9rZW5CYWxhbmNlID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogMCB9KTsKICAgIGJ5dGVjXzAgLy8gInRva2VuQmFsYW5jZSIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjIxNgogICAgLy8gYXNzZXJ0KHRoaXMudG9rZW5CYWxhbmNlLnZhbHVlICsgdGhpcy52VXNkQmFsYW5jZS52YWx1ZSA8IG9sZEJhbGFuY2UsICdQb29sOiB6ZXJvIGNoYW5nZXMnKTsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICArCiAgICA+CiAgICBhc3NlcnQgLy8gUG9vbDogemVybyBjaGFuZ2VzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyMTkKICAgIC8vIGFzc2VydChhbW91bnRMcCA8PSB0aGlzLnJlc2VydmVzLnZhbHVlLCAnUG9vbDogcmVzZXJ2ZXMnKTsKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0OQogICAgLy8gcmVzZXJ2ZXMgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgYnl0ZWMgNCAvLyAicmVzZXJ2ZXMiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyMTkKICAgIC8vIGFzc2VydChhbW91bnRMcCA8PSB0aGlzLnJlc2VydmVzLnZhbHVlLCAnUG9vbDogcmVzZXJ2ZXMnKTsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICBmcmFtZV9kaWcgLTIKICAgIGRpZyAxCiAgICA8PQogICAgYXNzZXJ0IC8vIFBvb2w6IHJlc2VydmVzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyMjIKICAgIC8vIHRoaXMucmVzZXJ2ZXMudmFsdWUgLT0gYW1vdW50THA7CiAgICBmcmFtZV9kaWcgLTIKICAgIC0KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ5CiAgICAvLyByZXNlcnZlcyA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBieXRlYyA0IC8vICJyZXNlcnZlcyIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjIyMgogICAgLy8gdGhpcy5yZXNlcnZlcy52YWx1ZSAtPSBhbW91bnRMcDsKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyMjUKICAgIC8vIHRoaXMudXBkYXRlRCgpOwogICAgY2FsbHN1YiB1cGRhdGVECiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyMjYKICAgIC8vIGFzc2VydCh0aGlzLmQudmFsdWUgPCBvbGRELCAnUG9vbDogemVybyBEIGNoYW5nZXMnKTsKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo1MQogICAgLy8gZCA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBieXRlYyA2IC8vICJkIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MjI2CiAgICAvLyBhc3NlcnQodGhpcy5kLnZhbHVlIDwgb2xkRCwgJ1Bvb2w6IHplcm8gRCBjaGFuZ2VzJyk7CiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgZnJhbWVfZGlnIDAKICAgIDwKICAgIGFzc2VydCAvLyBQb29sOiB6ZXJvIEQgY2hhbmdlcwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MjI4LTIzMgogICAgLy8gaXR4bi5hc3NldFRyYW5zZmVyKHsKICAgIC8vICAgeGZlckFzc2V0OiB0aGlzLmFzc2V0LnZhbHVlLAogICAgLy8gICBhc3NldEFtb3VudDogdGhpcy5mcm9tU3lzdGVtUHJlY2lzaW9uKGFtb3VudExwKSwKICAgIC8vICAgYXNzZXRSZWNlaXZlcjogVHhuLnNlbmRlciwKICAgIC8vIH0pLnN1Ym1pdCgpOwogICAgaXR4bl9iZWdpbgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MjI5CiAgICAvLyB4ZmVyQXNzZXQ6IHRoaXMuYXNzZXQudmFsdWUsCiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjI3CiAgICAvLyBhc3NldCA9IEdsb2JhbFN0YXRlPEFzc2V0PigpOwogICAgYnl0ZWNfMiAvLyAiYXNzZXQiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyMjkKICAgIC8vIHhmZXJBc3NldDogdGhpcy5hc3NldC52YWx1ZSwKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyMzAKICAgIC8vIGFzc2V0QW1vdW50OiB0aGlzLmZyb21TeXN0ZW1QcmVjaXNpb24oYW1vdW50THApLAogICAgZnJhbWVfZGlnIC0yCiAgICBjYWxsc3ViIGZyb21TeXN0ZW1QcmVjaXNpb24KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjIzMQogICAgLy8gYXNzZXRSZWNlaXZlcjogVHhuLnNlbmRlciwKICAgIHR4biBTZW5kZXIKICAgIGl0eG5fZmllbGQgQXNzZXRSZWNlaXZlcgogICAgaXR4bl9maWVsZCBBc3NldEFtb3VudAogICAgaXR4bl9maWVsZCBYZmVyQXNzZXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjIyOC0yMzIKICAgIC8vIGl0eG4uYXNzZXRUcmFuc2Zlcih7CiAgICAvLyAgIHhmZXJBc3NldDogdGhpcy5hc3NldC52YWx1ZSwKICAgIC8vICAgYXNzZXRBbW91bnQ6IHRoaXMuZnJvbVN5c3RlbVByZWNpc2lvbihhbW91bnRMcCksCiAgICAvLyAgIGFzc2V0UmVjZWl2ZXI6IFR4bi5zZW5kZXIsCiAgICAvLyB9KS5zdWJtaXQoKTsKICAgIHB1c2hpbnQgNCAvLyA0CiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnRjXzAgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKICAgIGl0eG5fc3VibWl0CiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo6UG9vbC5nZXRZKHg6IHVpbnQ2NCkgLT4gdWludDY0OgpnZXRZOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6Mzk3CiAgICAvLyBwcml2YXRlIGdldFkoeDogdWludDY0KTogdWludDY0IHsKICAgIHByb3RvIDEgMQogICAgaW50Y18wIC8vIDAKICAgIGR1cAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6Mzk4CiAgICAvLyBjb25zdCB4XyA9IEJpZ1VpbnQoeCk7CiAgICBmcmFtZV9kaWcgLTEKICAgIGl0b2IKICAgIGR1cAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6Mzk5CiAgICAvLyBjb25zdCBkXyA9IEJpZ1VpbnQodGhpcy5kLnZhbHVlKTsKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo1MQogICAgLy8gZCA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBieXRlYyA2IC8vICJkIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6Mzk5CiAgICAvLyBjb25zdCBkXyA9IEJpZ1VpbnQodGhpcy5kLnZhbHVlKTsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICBpdG9iCiAgICBkdXAKICAgIGNvdmVyIDIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQwMAogICAgLy8gY29uc3QgYTQgPSBCaWdVaW50KHRoaXMuYS52YWx1ZSA8PCAyKTsKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo1MAogICAgLy8gYSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oKTsKICAgIGJ5dGVjIDE5IC8vICJhIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDAwCiAgICAvLyBjb25zdCBhNCA9IEJpZ1VpbnQodGhpcy5hLnZhbHVlIDw8IDIpOwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIHB1c2hpbnQgMiAvLyAyCiAgICBzaGwKICAgIGl0b2IKICAgIGR1cAogICAgY292ZXIgMwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDAxCiAgICAvLyBjb25zdCBhOCA9IEJpZ1VpbnQoYTQgKiAybik7CiAgICBieXRlYyAxNyAvLyAweDAyCiAgICBiKgogICAgY292ZXIgMgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDAzCiAgICAvLyBjb25zdCBkTWludXNYSXNQb3NpdGl2ZSA9IGRfID49IHhfOwogICAgYjw9CiAgICBkdXAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQwNAogICAgLy8gY29uc3QgZE1pbnVzWEFiczogYmlndWludCA9IGRNaW51c1hJc1Bvc2l0aXZlID8gKGRfIC0geF8pIDogKHhfIC0gZF8pOwogICAgYnogZ2V0WV90ZXJuYXJ5X2ZhbHNlQDIKICAgIGZyYW1lX2RpZyAzCiAgICBmcmFtZV9kaWcgMgogICAgYi0KCmdldFlfdGVybmFyeV9tZXJnZUAzOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDA2CiAgICAvLyBjb25zdCBhNEJ5RE1pbnVzWEFiczogYmlndWludCA9IGE0ICogZE1pbnVzWEFiczsKICAgIGZyYW1lX2RpZyA0CiAgICBiKgogICAgZnJhbWVfYnVyeSAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0MTEKICAgIC8vIGlmIChkTWludXNYSXNQb3NpdGl2ZSkgewogICAgZnJhbWVfZGlnIDYKICAgIGJ6IGdldFlfZWxzZV9ib2R5QDgKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQxMgogICAgLy8gaWYgKGE0QnlETWludXNYQWJzID49IGRfKSB7CiAgICBmcmFtZV9kaWcgMAogICAgZnJhbWVfZGlnIDMKICAgIGI+PQogICAgYnogZ2V0WV9lbHNlX2JvZHlANgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDEzCiAgICAvLyBwYXJ0MUFicyA9IGE0QnlETWludXNYQWJzIC0gZF87CiAgICBmcmFtZV9kaWcgMAogICAgZnJhbWVfZGlnIDMKICAgIGItCiAgICBmcmFtZV9idXJ5IDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQxNAogICAgLy8gcGFydDFJc1Bvc2l0aXZlID0gdHJ1ZTsKICAgIGludGNfMSAvLyAxCgpnZXRZX2FmdGVyX2lmX2Vsc2VAOToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQyNQogICAgLy8gY29uc3QgcGFydDI6IGJpZ3VpbnQgPSBCaWdVaW50KHgpICogKGE0ICogZF8gKiBkXyAqIGRfICsgeF8gKiAocGFydDFBYnMgKiBwYXJ0MUFicykpOwogICAgZnJhbWVfZGlnIDQKICAgIGZyYW1lX2RpZyAzCiAgICBkdXAKICAgIGNvdmVyIDIKICAgIGIqCiAgICBkaWcgMQogICAgYioKICAgIGIqCiAgICBmcmFtZV9kaWcgMQogICAgZHVwCiAgICBiKgogICAgZnJhbWVfZGlnIDIKICAgIGR1cAogICAgdW5jb3ZlciAyCiAgICBiKgogICAgdW5jb3ZlciAyCiAgICBiKwogICAgYioKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQyNgogICAgLy8gbGV0IG51bWVyYXRvcjogYmlndWludCA9IHRoaXMuc3FydChwYXJ0Mik7CiAgICBjYWxsc3ViIHNxcnQKICAgIHN3YXAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQyOQogICAgLy8gaWYgKHBhcnQxSXNQb3NpdGl2ZSkgewogICAgYnogZ2V0WV9lbHNlX2JvZHlAMTEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQzMAogICAgLy8gbnVtZXJhdG9yICs9IHhfICogcGFydDFBYnM7CiAgICBmcmFtZV9kaWcgMgogICAgZnJhbWVfZGlnIDEKICAgIGIqCiAgICBiKwoKZ2V0WV9hZnRlcl9pZl9lbHNlQDEyOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDM2CiAgICAvLyByZXR1cm4gYmlndWludFRvVWludDY0TW9kdWxvKG51bWVyYXRvciAvIChhOCAqIHhfKSArIDFuKTsgLy8gKzEgdG8gb2Zmc2V0IHJvdW5kaW5nIGVycm9ycwogICAgZnJhbWVfZGlnIDUKICAgIGZyYW1lX2RpZyAyCiAgICBiKgogICAgYi8KICAgIGJ5dGVjIDEwIC8vIDB4MDEKICAgIGIrCiAgICBjYWxsc3ViIGJpZ3VpbnRUb1VpbnQ2NE1vZHVsbwogICAgZnJhbWVfYnVyeSAwCiAgICByZXRzdWIKCmdldFlfZWxzZV9ib2R5QDExOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDMyCiAgICAvLyBudW1lcmF0b3IgLT0geF8gKiBwYXJ0MUFiczsKICAgIGZyYW1lX2RpZyAyCiAgICBmcmFtZV9kaWcgMQogICAgYioKICAgIGItCiAgICBiIGdldFlfYWZ0ZXJfaWZfZWxzZUAxMgoKZ2V0WV9lbHNlX2JvZHlANjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQxNgogICAgLy8gcGFydDFBYnMgPSBkXyAtIGE0QnlETWludXNYQWJzOwogICAgZnJhbWVfZGlnIDMKICAgIGZyYW1lX2RpZyAwCiAgICBiLQogICAgZnJhbWVfYnVyeSAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0MTcKICAgIC8vIHBhcnQxSXNQb3NpdGl2ZSA9IGZhbHNlOwogICAgaW50Y18wIC8vIDAKICAgIGIgZ2V0WV9hZnRlcl9pZl9lbHNlQDkKCmdldFlfZWxzZV9ib2R5QDg6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0MjAKICAgIC8vIHBhcnQxQWJzID0gYTRCeURNaW51c1hBYnMgKyBkXzsKICAgIGZyYW1lX2RpZyAwCiAgICBmcmFtZV9kaWcgMwogICAgYisKICAgIGZyYW1lX2J1cnkgMQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDIxCiAgICAvLyBwYXJ0MUlzUG9zaXRpdmUgPSBmYWxzZTsKICAgIGludGNfMCAvLyAwCiAgICBiIGdldFlfYWZ0ZXJfaWZfZWxzZUA5CgpnZXRZX3Rlcm5hcnlfZmFsc2VAMjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQwNAogICAgLy8gY29uc3QgZE1pbnVzWEFiczogYmlndWludCA9IGRNaW51c1hJc1Bvc2l0aXZlID8gKGRfIC0geF8pIDogKHhfIC0gZF8pOwogICAgZnJhbWVfZGlnIDIKICAgIGZyYW1lX2RpZyAzCiAgICBiLQogICAgYiBnZXRZX3Rlcm5hcnlfbWVyZ2VAMwoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjpQb29sLnVwZGF0ZUQoKSAtPiB2b2lkOgp1cGRhdGVEOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDM5CiAgICAvLyBwcml2YXRlIHVwZGF0ZUQoKTogdm9pZCB7CiAgICBwcm90byAwIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ0MAogICAgLy8gY29uc3QgeCA9IEJpZ1VpbnQodGhpcy50b2tlbkJhbGFuY2UudmFsdWUpOwogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ2CiAgICAvLyB0b2tlbkJhbGFuY2UgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgYnl0ZWNfMCAvLyAidG9rZW5CYWxhbmNlIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDQwCiAgICAvLyBjb25zdCB4ID0gQmlnVWludCh0aGlzLnRva2VuQmFsYW5jZS52YWx1ZSk7CiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgaXRvYgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDQxCiAgICAvLyBjb25zdCB5ID0gQmlnVWludCh0aGlzLnZVc2RCYWxhbmNlLnZhbHVlKTsKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NwogICAgLy8gdlVzZEJhbGFuY2UgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgYnl0ZWNfMSAvLyAidlVzZEJhbGFuY2UiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NDEKICAgIC8vIGNvbnN0IHkgPSBCaWdVaW50KHRoaXMudlVzZEJhbGFuY2UudmFsdWUpOwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIGl0b2IKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ0NgogICAgLy8gY29uc3QgeHk6IGJpZ3VpbnQgPSB4ICogeTsKICAgIGR1cDIKICAgIGIqCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NDcKICAgIC8vIGNvbnN0IGFfID0gQmlnVWludCh0aGlzLmEudmFsdWUpOwogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjUwCiAgICAvLyBhID0gR2xvYmFsU3RhdGU8dWludDY0PigpOwogICAgYnl0ZWMgMTkgLy8gImEiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NDcKICAgIC8vIGNvbnN0IGFfID0gQmlnVWludCh0aGlzLmEudmFsdWUpOwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIGl0b2IKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ0OQogICAgLy8gY29uc3QgcDE6IGJpZ3VpbnQgPSBhXyAqIHh5ICogKHggKyB5KTsKICAgIGR1cAogICAgZGlnIDIKICAgIGIqCiAgICB1bmNvdmVyIDQKICAgIHVuY292ZXIgNAogICAgYisKICAgIGIqCiAgICBkdXAKICAgIGNvdmVyIDIKICAgIGNvdmVyIDMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ1MQogICAgLy8gY29uc3QgcDI6IGJpZ3VpbnQgPSAoeHkgKiAoKGFfICogNG4pIC0gMW4pKSAvIDNuOwogICAgcHVzaGJ5dGVzIDB4MDQKICAgIGIqCiAgICBieXRlYyAxMCAvLyAweDAxCiAgICBiLQogICAgdW5jb3ZlciAyCiAgICBiKgogICAgYnl0ZWMgMjYgLy8gMHgwMwogICAgYi8KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ1MwogICAgLy8gY29uc3QgcDM6IGJpZ3VpbnQgPSB0aGlzLnNxcnQoKHAxICogcDEpICsgKHAyICogcDIgKiBwMikpOwogICAgZGlnIDEKICAgIGRpZyAyCiAgICBiKgogICAgZGlnIDEKICAgIGRpZyAyCiAgICBiKgogICAgdW5jb3ZlciAyCiAgICBiKgogICAgYisKICAgIGNhbGxzdWIgc3FydAogICAgZHVwCiAgICBjb3ZlciAyCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NTQKICAgIC8vIGxldCBkXyA9IHRoaXMuY2JydChwMSArIHAzKTsKICAgIGR1cDIKICAgIGIrCiAgICBjYWxsc3ViIGNicnQKICAgIGNvdmVyIDMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ1NQogICAgLy8gaWYgKHAzID4gcDEpIHsKICAgIGI8CiAgICBieiB1cGRhdGVEX2Vsc2VfYm9keUAyCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NTYKICAgIC8vIGRfIC09IHRoaXMuY2JydChwMyAtIHAxKTsKICAgIGZyYW1lX2RpZyAwCiAgICBiLQogICAgY2FsbHN1YiBjYnJ0CiAgICBmcmFtZV9kaWcgMQogICAgc3dhcAogICAgLQogICAgZnJhbWVfYnVyeSAxCgp1cGRhdGVEX2FmdGVyX2lmX2Vsc2VAMzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ2MAogICAgLy8gdGhpcy5kLnZhbHVlID0gKGRfIDw8IDEpOwogICAgZnJhbWVfZGlnIDEKICAgIGludGNfMSAvLyAxCiAgICBzaGwKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjUxCiAgICAvLyBkID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogMCB9KTsKICAgIGJ5dGVjIDYgLy8gImQiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NjAKICAgIC8vIHRoaXMuZC52YWx1ZSA9IChkXyA8PCAxKTsKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICByZXRzdWIKCnVwZGF0ZURfZWxzZV9ib2R5QDI6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NTgKICAgIC8vIGRfICs9IHRoaXMuY2JydChwMSAtIHAzKTsKICAgIGZyYW1lX2RpZyAwCiAgICBzd2FwCiAgICBiLQogICAgY2FsbHN1YiBjYnJ0CiAgICBmcmFtZV9kaWcgMQogICAgKwogICAgZnJhbWVfYnVyeSAxCiAgICBiIHVwZGF0ZURfYWZ0ZXJfaWZfZWxzZUAzCgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6OlBvb2wudG9TeXN0ZW1QcmVjaXNpb24oYW1vdW50OiB1aW50NjQpIC0+IHVpbnQ2NDoKdG9TeXN0ZW1QcmVjaXNpb246CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NjMKICAgIC8vIHByaXZhdGUgdG9TeXN0ZW1QcmVjaXNpb24oYW1vdW50OiB1aW50NjQpOiB1aW50NjQgewogICAgcHJvdG8gMSAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NjQKICAgIC8vIGNvbnN0IHRva2VuQW1vdW50UmVkdWNlID0gdGhpcy50b2tlbkFtb3VudFJlZHVjZS52YWx1ZTsKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo1MwogICAgLy8gcHJpdmF0ZSB0b2tlbkFtb3VudFJlZHVjZSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oKTsKICAgIGJ5dGVjIDIyIC8vICJ0b2tlbkFtb3VudFJlZHVjZSIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ2NAogICAgLy8gY29uc3QgdG9rZW5BbW91bnRSZWR1Y2UgPSB0aGlzLnRva2VuQW1vdW50UmVkdWNlLnZhbHVlOwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIHN3YXAKICAgIGR1cAogICAgdW5jb3ZlciAyCiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NjUKICAgIC8vIGNvbnN0IHRva2VuQW1vdW50SW5jcmVhc2UgPSB0aGlzLnRva2VuQW1vdW50SW5jcmVhc2UudmFsdWU7CiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NTQKICAgIC8vIHByaXZhdGUgdG9rZW5BbW91bnRJbmNyZWFzZSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oKTsKICAgIGJ5dGVjIDIzIC8vICJ0b2tlbkFtb3VudEluY3JlYXNlIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDY1CiAgICAvLyBjb25zdCB0b2tlbkFtb3VudEluY3JlYXNlID0gdGhpcy50b2tlbkFtb3VudEluY3JlYXNlLnZhbHVlOwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIHN3YXAKICAgIGNvdmVyIDIKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ2NwogICAgLy8gaWYgKHRva2VuQW1vdW50UmVkdWNlID4gMCkgewogICAgYnogdG9TeXN0ZW1QcmVjaXNpb25fZWxzZV9ib2R5QDIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ2OAogICAgLy8gcmV0dXJuIGFtb3VudCAvIHRva2VuQW1vdW50UmVkdWNlOwogICAgZnJhbWVfZGlnIC0xCiAgICBmcmFtZV9kaWcgMAogICAgLwogICAgZnJhbWVfYnVyeSAwCiAgICByZXRzdWIKCnRvU3lzdGVtUHJlY2lzaW9uX2Vsc2VfYm9keUAyOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDY5CiAgICAvLyB9IGVsc2UgaWYgKHRva2VuQW1vdW50SW5jcmVhc2UgPiAwKSB7CiAgICBmcmFtZV9kaWcgMQogICAgYnogdG9TeXN0ZW1QcmVjaXNpb25fYWZ0ZXJfaWZfZWxzZUA0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NzAKICAgIC8vIHJldHVybiBhbW91bnQgKiB0b2tlbkFtb3VudEluY3JlYXNlOwogICAgZnJhbWVfZGlnIC0xCiAgICBmcmFtZV9kaWcgMQogICAgKgogICAgZnJhbWVfYnVyeSAwCiAgICByZXRzdWIKCnRvU3lzdGVtUHJlY2lzaW9uX2FmdGVyX2lmX2Vsc2VANDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ3MgogICAgLy8gcmV0dXJuIGFtb3VudDsKICAgIGZyYW1lX2RpZyAtMQogICAgZnJhbWVfYnVyeSAwCiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo6UG9vbC5mcm9tU3lzdGVtUHJlY2lzaW9uKGFtb3VudDogdWludDY0KSAtPiB1aW50NjQ6CmZyb21TeXN0ZW1QcmVjaXNpb246CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NzUKICAgIC8vIHByaXZhdGUgZnJvbVN5c3RlbVByZWNpc2lvbihhbW91bnQ6IHVpbnQ2NCk6IHVpbnQ2NCB7CiAgICBwcm90byAxIDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ3NgogICAgLy8gY29uc3QgdG9rZW5BbW91bnRSZWR1Y2UgPSB0aGlzLnRva2VuQW1vdW50UmVkdWNlLnZhbHVlOwogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjUzCiAgICAvLyBwcml2YXRlIHRva2VuQW1vdW50UmVkdWNlID0gR2xvYmFsU3RhdGU8dWludDY0PigpOwogICAgYnl0ZWMgMjIgLy8gInRva2VuQW1vdW50UmVkdWNlIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDc2CiAgICAvLyBjb25zdCB0b2tlbkFtb3VudFJlZHVjZSA9IHRoaXMudG9rZW5BbW91bnRSZWR1Y2UudmFsdWU7CiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgc3dhcAogICAgZHVwCiAgICB1bmNvdmVyIDIKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ3NwogICAgLy8gY29uc3QgdG9rZW5BbW91bnRJbmNyZWFzZSA9IHRoaXMudG9rZW5BbW91bnRJbmNyZWFzZS52YWx1ZTsKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo1NAogICAgLy8gcHJpdmF0ZSB0b2tlbkFtb3VudEluY3JlYXNlID0gR2xvYmFsU3RhdGU8dWludDY0PigpOwogICAgYnl0ZWMgMjMgLy8gInRva2VuQW1vdW50SW5jcmVhc2UiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NzcKICAgIC8vIGNvbnN0IHRva2VuQW1vdW50SW5jcmVhc2UgPSB0aGlzLnRva2VuQW1vdW50SW5jcmVhc2UudmFsdWU7CiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgc3dhcAogICAgY292ZXIgMgogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDc5CiAgICAvLyBpZiAodG9rZW5BbW91bnRSZWR1Y2UgPiAwKSB7CiAgICBieiBmcm9tU3lzdGVtUHJlY2lzaW9uX2Vsc2VfYm9keUAyCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0ODAKICAgIC8vIHJldHVybiBhbW91bnQgKiB0b2tlbkFtb3VudFJlZHVjZTsKICAgIGZyYW1lX2RpZyAtMQogICAgZnJhbWVfZGlnIDAKICAgICoKICAgIGZyYW1lX2J1cnkgMAogICAgcmV0c3ViCgpmcm9tU3lzdGVtUHJlY2lzaW9uX2Vsc2VfYm9keUAyOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDgxCiAgICAvLyB9IGVsc2UgaWYgKHRva2VuQW1vdW50SW5jcmVhc2UgPiAwKSB7CiAgICBmcmFtZV9kaWcgMQogICAgYnogZnJvbVN5c3RlbVByZWNpc2lvbl9hZnRlcl9pZl9lbHNlQDQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ4MgogICAgLy8gcmV0dXJuIGFtb3VudCAvIHRva2VuQW1vdW50SW5jcmVhc2U7CiAgICBmcmFtZV9kaWcgLTEKICAgIGZyYW1lX2RpZyAxCiAgICAvCiAgICBmcmFtZV9idXJ5IDAKICAgIHJldHN1YgoKZnJvbVN5c3RlbVByZWNpc2lvbl9hZnRlcl9pZl9lbHNlQDQ6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0ODQKICAgIC8vIHJldHVybiBhbW91bnQ7CiAgICBmcmFtZV9kaWcgLTEKICAgIGZyYW1lX2J1cnkgMAogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6OlBvb2wuc3FydChuOiBieXRlcykgLT4gYnl0ZXM6CnNxcnQ6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0ODcKICAgIC8vIHByaXZhdGUgc3FydChuOiBiaWd1aW50KTogYmlndWludCB7CiAgICBwcm90byAxIDEKICAgIGludGNfMCAvLyAwCiAgICBkdXAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ4OAogICAgLy8gYXNzZXJ0KG4gPiAwbiwgJ24gbXVzdCBiZSBub24tbmVnYXRpdmUnKTsKICAgIGZyYW1lX2RpZyAtMQogICAgcHVzaGJ5dGVzIDB4CiAgICBiPgogICAgYXNzZXJ0IC8vIG4gbXVzdCBiZSBub24tbmVnYXRpdmUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ4OQogICAgLy8gaWYgKG4gPT09IDBuKSByZXR1cm4gMG47CiAgICBmcmFtZV9kaWcgLTEKICAgIHB1c2hieXRlcyAweAogICAgYj09CiAgICBieiBzcXJ0X2FmdGVyX2lmX2Vsc2VAMgogICAgcHVzaGJ5dGVzIDB4CiAgICBmcmFtZV9idXJ5IDAKICAgIHJldHN1YgoKc3FydF9hZnRlcl9pZl9lbHNlQDI6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0OTAKICAgIC8vIGlmIChuIDw9IDNuKSByZXR1cm4gMW47CiAgICBmcmFtZV9kaWcgLTEKICAgIGJ5dGVjIDI2IC8vIDB4MDMKICAgIGI8PQogICAgYnogc3FydF9hZnRlcl9pZl9lbHNlQDQKICAgIGJ5dGVjIDEwIC8vIDB4MDEKICAgIGZyYW1lX2J1cnkgMAogICAgcmV0c3ViCgpzcXJ0X2FmdGVyX2lmX2Vsc2VANDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ5MwogICAgLy8gY29uc3QgYmwgPSBiaXRMZW5ndGgoQnl0ZXMobikpOwogICAgZnJhbWVfZGlnIC0xCiAgICBiaXRsZW4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ5NAogICAgLy8gbGV0IHdpZGUgPSBleHB3KDIsIChibCArIDEpIC8gMik7CiAgICBpbnRjXzEgLy8gMQogICAgKwogICAgcHVzaGludCAyIC8vIDIKICAgIC8KICAgIHB1c2hpbnQgMiAvLyAyCiAgICBzd2FwCiAgICBleHB3CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0OTUKICAgIC8vIGNvbnN0IGhpID0gQmlnVWludCh3aWRlWzBdKTsKICAgIHN3YXAKICAgIGl0b2IKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ5NgogICAgLy8gY29uc3QgbG8gPSBCaWdVaW50KHdpZGVbMV0pOwogICAgc3dhcAogICAgaXRvYgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDk3CiAgICAvLyBsZXQgeDogYmlndWludCA9IGhpICogU0hJRlQ2NCArIGxvOwogICAgc3dhcAogICAgYnl0ZWMgMjggLy8gMHgwMTAwMDAwMDAwMDAwMDAwMDAKICAgIGIqCiAgICBiKwogICAgZHVwCiAgICBmcmFtZV9idXJ5IDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjUwMAogICAgLy8gbGV0IHk6IGJpZ3VpbnQgPSAoeCArIG4gLyB4KSAvIDJuOwogICAgZnJhbWVfZGlnIC0xCiAgICBkaWcgMQogICAgYi8KICAgIGIrCiAgICBieXRlYyAxNyAvLyAweDAyCiAgICBiLwogICAgZnJhbWVfYnVyeSAxCgpzcXJ0X3doaWxlX3RvcEA1OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NTAxCiAgICAvLyB3aGlsZSAoeSA8IHgpIHsKICAgIGZyYW1lX2RpZyAxCiAgICBmcmFtZV9kaWcgMAogICAgYjwKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjUwMS01MDQKICAgIC8vIHdoaWxlICh5IDwgeCkgewogICAgLy8gICB4ID0geTsKICAgIC8vICAgeSA9ICh4ICsgbiAvIHgpIC8gMm47CiAgICAvLyB9CiAgICBieiBzcXJ0X2FmdGVyX3doaWxlQDcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjUwMwogICAgLy8geSA9ICh4ICsgbiAvIHgpIC8gMm47CiAgICBmcmFtZV9kaWcgLTEKICAgIGZyYW1lX2RpZyAxCiAgICBkdXAKICAgIGNvdmVyIDIKICAgIGIvCiAgICBkaWcgMQogICAgYisKICAgIGJ5dGVjIDE3IC8vIDB4MDIKICAgIGIvCiAgICBmcmFtZV9idXJ5IDEKICAgIGZyYW1lX2J1cnkgMAogICAgYiBzcXJ0X3doaWxlX3RvcEA1CgpzcXJ0X2FmdGVyX3doaWxlQDc6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo1MDUKICAgIC8vIHJldHVybiB4OwogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6OlBvb2wuY2JydChuOiBieXRlcykgLT4gdWludDY0OgpjYnJ0OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NTA4CiAgICAvLyBwcml2YXRlIGNicnQobjogYmlndWludCk6IHVpbnQ2NCB7CiAgICBwcm90byAxIDEKICAgIGludGNfMCAvLyAwCiAgICBkdXBuIDMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjUwOQogICAgLy8gaWYgKG4gPT09IDBuKSByZXR1cm4gMDsKICAgIGZyYW1lX2RpZyAtMQogICAgcHVzaGJ5dGVzIDB4CiAgICBiPT0KICAgIGJ6IGNicnRfYWZ0ZXJfaWZfZWxzZUAyCiAgICBpbnRjXzAgLy8gMAogICAgZnJhbWVfYnVyeSAwCiAgICByZXRzdWIKCmNicnRfYWZ0ZXJfaWZfZWxzZUAyOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NTEwCiAgICAvLyBpZiAobiA8IDhuKSByZXR1cm4gMTsKICAgIGZyYW1lX2RpZyAtMQogICAgcHVzaGJ5dGVzIDB4MDgKICAgIGI8CiAgICBieiBjYnJ0X2FmdGVyX2lmX2Vsc2VANAogICAgaW50Y18xIC8vIDEKICAgIGZyYW1lX2J1cnkgMAogICAgcmV0c3ViCgpjYnJ0X2FmdGVyX2lmX2Vsc2VANDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjUxMwogICAgLy8gY29uc3QgYmwgPSBiaXRMZW5ndGgoQnl0ZXMobikpOwogICAgZnJhbWVfZGlnIC0xCiAgICBiaXRsZW4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjUxNAogICAgLy8gbGV0IHdpZGUgPSBleHB3KDIsIChibCArIDIpIC8gMyk7CiAgICBwdXNoaW50IDIgLy8gMgogICAgKwogICAgcHVzaGludCAzIC8vIDMKICAgIC8KICAgIHB1c2hpbnQgMiAvLyAyCiAgICBzd2FwCiAgICBleHB3CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo1MTUKICAgIC8vIGNvbnN0IGhpID0gQmlnVWludCh3aWRlWzBdKTsKICAgIHN3YXAKICAgIGl0b2IKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjUxNgogICAgLy8gY29uc3QgbG8gPSBCaWdVaW50KHdpZGVbMV0pOwogICAgc3dhcAogICAgaXRvYgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NTE3CiAgICAvLyBsZXQgeDogYmlndWludCA9IGhpICogU0hJRlQ2NCArIGxvOwogICAgc3dhcAogICAgYnl0ZWMgMjggLy8gMHgwMTAwMDAwMDAwMDAwMDAwMDAKICAgIGIqCiAgICBiKwogICAgZnJhbWVfYnVyeSAxCgpjYnJ0X3doaWxlX3RvcEA1OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NTIxCiAgICAvLyBjb25zdCB4MjogYmlndWludCA9IHggKiB4OwogICAgZnJhbWVfZGlnIDEKICAgIGR1cAogICAgYioKICAgIGR1cAogICAgZnJhbWVfYnVyeSAzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo1MjIKICAgIC8vIGlmICh4MiA9PT0gMG4pIGJyZWFrOyAvLyBzaG91bGQgbm90IGhhcHBlbiBmb3IgeD4wCiAgICBwdXNoYnl0ZXMgMHgKICAgIGI9PQogICAgYm56IGNicnRfd2hpbGVfdG9wQDE1CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo1MjMKICAgIC8vIGNvbnN0IG5leHQ6IGJpZ3VpbnQgPSAoMm4gKiB4ICsgbiAvIHgyKSAvIDNuOwogICAgYnl0ZWMgMTcgLy8gMHgwMgogICAgZnJhbWVfZGlnIDEKICAgIGR1cAogICAgY292ZXIgMgogICAgYioKICAgIGZyYW1lX2RpZyAtMQogICAgZnJhbWVfZGlnIDMKICAgIGIvCiAgICBiKwogICAgYnl0ZWMgMjYgLy8gMHgwMwogICAgYi8KICAgIGR1cAogICAgZnJhbWVfYnVyeSAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo1MjQKICAgIC8vIGlmIChuZXh0ID09PSB4IHx8IG5leHQgPT09IHggLSAxbikgewogICAgYj09CiAgICBibnogY2JydF9pZl9ib2R5QDEwCiAgICBmcmFtZV9kaWcgMQogICAgYnl0ZWMgMTAgLy8gMHgwMQogICAgYi0KICAgIGZyYW1lX2RpZyAwCiAgICBiPT0KICAgIGJ6IGNicnRfYWZ0ZXJfaWZfZWxzZUAxMQoKY2JydF9pZl9ib2R5QDEwOgogICAgZnJhbWVfZGlnIDAKICAgIGZyYW1lX2J1cnkgMQoKY2JydF93aGlsZV90b3BAMTU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo1MzIKICAgIC8vIHdoaWxlICgoeCArIDFuKSAqICh4ICsgMW4pICogKHggKyAxbikgPD0gbikgeCArPSAxbjsKICAgIGZyYW1lX2RpZyAxCiAgICBieXRlYyAxMCAvLyAweDAxCiAgICBiKwogICAgZHVwCiAgICBmcmFtZV9idXJ5IDIKICAgIGR1cAogICAgZGlnIDEKICAgIGIqCiAgICBiKgogICAgZnJhbWVfZGlnIC0xCiAgICBiPD0KICAgIGJ6IGNicnRfd2hpbGVfdG9wQDE4CiAgICBmcmFtZV9kaWcgMgogICAgZnJhbWVfYnVyeSAxCiAgICBiIGNicnRfd2hpbGVfdG9wQDE1CgpjYnJ0X3doaWxlX3RvcEAxODoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjUzMwogICAgLy8gd2hpbGUgKHggKiB4ICogeCA+IG4pIHggLT0gMW47CiAgICBmcmFtZV9kaWcgMQogICAgZHVwCiAgICBkaWcgMQogICAgYioKICAgIGIqCiAgICBmcmFtZV9kaWcgLTEKICAgIGI+CiAgICBieiBjYnJ0X2FmdGVyX3doaWxlQDIwCiAgICBmcmFtZV9kaWcgMQogICAgYnl0ZWMgMTAgLy8gMHgwMQogICAgYi0KICAgIGZyYW1lX2J1cnkgMQogICAgYiBjYnJ0X3doaWxlX3RvcEAxOAoKY2JydF9hZnRlcl93aGlsZUAyMDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjUzNAogICAgLy8gcmV0dXJuIGJpZ3VpbnRUb1VpbnQ2NE1vZHVsbyh4KTsKICAgIGZyYW1lX2RpZyAxCiAgICBjYWxsc3ViIGJpZ3VpbnRUb1VpbnQ2NE1vZHVsbwogICAgZnJhbWVfYnVyeSAwCiAgICByZXRzdWIKCmNicnRfYWZ0ZXJfaWZfZWxzZUAxMToKICAgIGZyYW1lX2RpZyAwCiAgICBmcmFtZV9idXJ5IDEKICAgIGIgY2JydF93aGlsZV90b3BANQoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czo6UmV3YXJkTWFuYWdlci5vcHRJblRvQXBwbGljYXRpb24odG86IGJ5dGVzKSAtPiB2b2lkOgpzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6OlJld2FyZE1hbmFnZXIub3B0SW5Ub0FwcGxpY2F0aW9uOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjQxCiAgICAvLyBwcm90ZWN0ZWQgb3B0SW5Ub0FwcGxpY2F0aW9uKHRvOiBBY2NvdW50KTogdm9pZCB7CiAgICBwcm90byAxIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czo0MgogICAgLy8gaWYgKCF0aGlzLmJhbGFuY2UodG8pLmhhc1ZhbHVlKSB7CiAgICBmcmFtZV9kaWcgLTEKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MzMKICAgIC8vIGJhbGFuY2UgPSBMb2NhbFN0YXRlPHVpbnQ2ND4oKTsKICAgIGJ5dGVjXzMgLy8gImJhbGFuY2UiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6NDIKICAgIC8vIGlmICghdGhpcy5iYWxhbmNlKHRvKS5oYXNWYWx1ZSkgewogICAgYXBwX2xvY2FsX2dldF9leAogICAgYnVyeSAxCiAgICBibnogc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjpSZXdhcmRNYW5hZ2VyLm9wdEluVG9BcHBsaWNhdGlvbl9hZnRlcl9pZl9lbHNlQDIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czo0MwogICAgLy8gdGhpcy5iYWxhbmNlKHRvKS52YWx1ZSA9IDA7CiAgICBmcmFtZV9kaWcgLTEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czozMwogICAgLy8gYmFsYW5jZSA9IExvY2FsU3RhdGU8dWludDY0PigpOwogICAgYnl0ZWNfMyAvLyAiYmFsYW5jZSIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czo0MwogICAgLy8gdGhpcy5iYWxhbmNlKHRvKS52YWx1ZSA9IDA7CiAgICBpbnRjXzAgLy8gMAogICAgYXBwX2xvY2FsX3B1dAoKc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjpSZXdhcmRNYW5hZ2VyLm9wdEluVG9BcHBsaWNhdGlvbl9hZnRlcl9pZl9lbHNlQDI6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6NDUKICAgIC8vIGlmICghdGhpcy51c2VyUmV3YXJkRGVidCh0bykuaGFzVmFsdWUpIHsKICAgIGZyYW1lX2RpZyAtMQogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czozNAogICAgLy8gdXNlclJld2FyZERlYnQgPSBMb2NhbFN0YXRlPHVpbnQ2ND4oKTsKICAgIGJ5dGVjIDUgLy8gInVzZXJSZXdhcmREZWJ0IgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjQ1CiAgICAvLyBpZiAoIXRoaXMudXNlclJld2FyZERlYnQodG8pLmhhc1ZhbHVlKSB7CiAgICBhcHBfbG9jYWxfZ2V0X2V4CiAgICBidXJ5IDEKICAgIGJueiBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6OlJld2FyZE1hbmFnZXIub3B0SW5Ub0FwcGxpY2F0aW9uX2FmdGVyX2lmX2Vsc2VANAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjQ2CiAgICAvLyB0aGlzLnVzZXJSZXdhcmREZWJ0KHRvKS52YWx1ZSA9IDA7CiAgICBmcmFtZV9kaWcgLTEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czozNAogICAgLy8gdXNlclJld2FyZERlYnQgPSBMb2NhbFN0YXRlPHVpbnQ2ND4oKTsKICAgIGJ5dGVjIDUgLy8gInVzZXJSZXdhcmREZWJ0IgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjQ2CiAgICAvLyB0aGlzLnVzZXJSZXdhcmREZWJ0KHRvKS52YWx1ZSA9IDA7CiAgICBpbnRjXzAgLy8gMAogICAgYXBwX2xvY2FsX3B1dAoKc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjpSZXdhcmRNYW5hZ2VyLm9wdEluVG9BcHBsaWNhdGlvbl9hZnRlcl9pZl9lbHNlQDQ6CiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6OlJld2FyZE1hbmFnZXIucGVuZGluZ1Jld2FyZCh1c2VyOiBieXRlcykgLT4gdWludDY0OgpzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6OlJld2FyZE1hbmFnZXIucGVuZGluZ1Jld2FyZDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czo5NS05NgogICAgLy8gQGFiaW1ldGhvZCh7IHJlYWRvbmx5OiB0cnVlIH0pCiAgICAvLyBwZW5kaW5nUmV3YXJkKHVzZXI6IEFjY291bnQpOiB1aW50NjQgewogICAgcHJvdG8gMSAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6OTcKICAgIC8vIHJldHVybiBiaWd1aW50VG9VaW50NjRNb2R1bG8oKEJpZ1VpbnQodGhpcy5iYWxhbmNlKHVzZXIpLnZhbHVlKSAqIHRoaXMuYWNjUmV3YXJkUGVyU2hhcmVQLnZhbHVlKSAvIFBfU0NBTEUpIC0gdGhpcy51c2VyUmV3YXJkRGVidCh1c2VyKS52YWx1ZTsKICAgIGZyYW1lX2RpZyAtMQogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czozMwogICAgLy8gYmFsYW5jZSA9IExvY2FsU3RhdGU8dWludDY0PigpOwogICAgYnl0ZWNfMyAvLyAiYmFsYW5jZSIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czo5NwogICAgLy8gcmV0dXJuIGJpZ3VpbnRUb1VpbnQ2NE1vZHVsbygoQmlnVWludCh0aGlzLmJhbGFuY2UodXNlcikudmFsdWUpICogdGhpcy5hY2NSZXdhcmRQZXJTaGFyZVAudmFsdWUpIC8gUF9TQ0FMRSkgLSB0aGlzLnVzZXJSZXdhcmREZWJ0KHVzZXIpLnZhbHVlOwogICAgYXBwX2xvY2FsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIExvY2FsU3RhdGUgZXhpc3RzCiAgICBpdG9iCiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjMwCiAgICAvLyBhY2NSZXdhcmRQZXJTaGFyZVAgPSBHbG9iYWxTdGF0ZTxiaWd1aW50Pih7IGluaXRpYWxWYWx1ZTogMG4gfSk7CiAgICBieXRlYyA4IC8vICJhY2NSZXdhcmRQZXJTaGFyZVAiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6OTcKICAgIC8vIHJldHVybiBiaWd1aW50VG9VaW50NjRNb2R1bG8oKEJpZ1VpbnQodGhpcy5iYWxhbmNlKHVzZXIpLnZhbHVlKSAqIHRoaXMuYWNjUmV3YXJkUGVyU2hhcmVQLnZhbHVlKSAvIFBfU0NBTEUpIC0gdGhpcy51c2VyUmV3YXJkRGVidCh1c2VyKS52YWx1ZTsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICBiKgogICAgYnl0ZWMgOSAvLyAweDAxMDAwMDAwMDAwMDAwCiAgICBiLwogICAgY2FsbHN1YiBiaWd1aW50VG9VaW50NjRNb2R1bG8KICAgIGZyYW1lX2RpZyAtMQogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czozNAogICAgLy8gdXNlclJld2FyZERlYnQgPSBMb2NhbFN0YXRlPHVpbnQ2ND4oKTsKICAgIGJ5dGVjIDUgLy8gInVzZXJSZXdhcmREZWJ0IgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjk3CiAgICAvLyByZXR1cm4gYmlndWludFRvVWludDY0TW9kdWxvKChCaWdVaW50KHRoaXMuYmFsYW5jZSh1c2VyKS52YWx1ZSkgKiB0aGlzLmFjY1Jld2FyZFBlclNoYXJlUC52YWx1ZSkgLyBQX1NDQUxFKSAtIHRoaXMudXNlclJld2FyZERlYnQodXNlcikudmFsdWU7CiAgICBhcHBfbG9jYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgTG9jYWxTdGF0ZSBleGlzdHMKICAgIC0KICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czo6UmV3YXJkTWFuYWdlci5hZGRSZXdhcmRzKHJld2FyZEFtb3VudDogdWludDY0KSAtPiB2b2lkOgphZGRSZXdhcmRzOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjEwMAogICAgLy8gcHJvdGVjdGVkIGFkZFJld2FyZHMocmV3YXJkQW1vdW50OiB1aW50NjQpOiB2b2lkIHsKICAgIHByb3RvIDEgMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjEwMQogICAgLy8gbGV0IHRvdGFsU3VwcGx5ID0gdGhpcy50b3RhbFN1cHBseS52YWx1ZTsKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MjkKICAgIC8vIHRvdGFsU3VwcGx5ID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogMCB9KTsKICAgIGJ5dGVjIDcgLy8gInRvdGFsU3VwcGx5IgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjEwMQogICAgLy8gbGV0IHRvdGFsU3VwcGx5ID0gdGhpcy50b3RhbFN1cHBseS52YWx1ZTsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBzd2FwCiAgICBkdXAKICAgIHVuY292ZXIgMgogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjEwMgogICAgLy8gaWYgKHRvdGFsU3VwcGx5ID4gMCkgewogICAgYnogYWRkUmV3YXJkc19hZnRlcl9pZl9lbHNlQDIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoxMDMKICAgIC8vIGNvbnN0IGFkbWluRmVlUmV3YXJkczogdWludDY0ID0gKHJld2FyZEFtb3VudCAqIHRoaXMuYWRtaW5GZWVTaGFyZUJQLnZhbHVlKSAvIEJQOwogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoyOAogICAgLy8gYWRtaW5GZWVTaGFyZUJQID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogQlAgLyA1IH0pOyAvLyBEZWZhdWx0IGFkbWluIGZlZSBpcyAyMCUKICAgIGJ5dGVjIDE4IC8vICJhZG1pbkZlZVNoYXJlQlAiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MTAzCiAgICAvLyBjb25zdCBhZG1pbkZlZVJld2FyZHM6IHVpbnQ2NCA9IChyZXdhcmRBbW91bnQgKiB0aGlzLmFkbWluRmVlU2hhcmVCUC52YWx1ZSkgLyBCUDsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICBmcmFtZV9kaWcgLTEKICAgICoKICAgIGludGMgNCAvLyAxMDAwMAogICAgLwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjEwNAogICAgLy8gcmV3YXJkQW1vdW50IC09IGFkbWluRmVlUmV3YXJkczsKICAgIGZyYW1lX2RpZyAtMQogICAgZGlnIDEKICAgIC0KICAgIGZyYW1lX2J1cnkgLTEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoxMDUKICAgIC8vIHRoaXMuYWNjUmV3YXJkUGVyU2hhcmVQLnZhbHVlICs9IEJpZ1VpbnQocmV3YXJkQW1vdW50KSAqIFBfU0NBTEUgLyBCaWdVaW50KHRvdGFsU3VwcGx5KTsKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MzAKICAgIC8vIGFjY1Jld2FyZFBlclNoYXJlUCA9IEdsb2JhbFN0YXRlPGJpZ3VpbnQ+KHsgaW5pdGlhbFZhbHVlOiAwbiB9KTsKICAgIGJ5dGVjIDggLy8gImFjY1Jld2FyZFBlclNoYXJlUCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoxMDUKICAgIC8vIHRoaXMuYWNjUmV3YXJkUGVyU2hhcmVQLnZhbHVlICs9IEJpZ1VpbnQocmV3YXJkQW1vdW50KSAqIFBfU0NBTEUgLyBCaWdVaW50KHRvdGFsU3VwcGx5KTsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICBmcmFtZV9kaWcgLTEKICAgIGl0b2IKICAgIGJ5dGVjIDkgLy8gMHgwMTAwMDAwMDAwMDAwMAogICAgYioKICAgIGZyYW1lX2RpZyAwCiAgICBpdG9iCiAgICBiLwogICAgYisKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czozMAogICAgLy8gYWNjUmV3YXJkUGVyU2hhcmVQID0gR2xvYmFsU3RhdGU8YmlndWludD4oeyBpbml0aWFsVmFsdWU6IDBuIH0pOwogICAgYnl0ZWMgOCAvLyAiYWNjUmV3YXJkUGVyU2hhcmVQIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjEwNQogICAgLy8gdGhpcy5hY2NSZXdhcmRQZXJTaGFyZVAudmFsdWUgKz0gQmlnVWludChyZXdhcmRBbW91bnQpICogUF9TQ0FMRSAvIEJpZ1VpbnQodG90YWxTdXBwbHkpOwogICAgc3dhcAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoxMDYKICAgIC8vIHRoaXMuYWRtaW5GZWVBbW91bnQudmFsdWUgKz0gYWRtaW5GZWVSZXdhcmRzOwogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czozMQogICAgLy8gYWRtaW5GZWVBbW91bnQgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgYnl0ZWMgMTEgLy8gImFkbWluRmVlQW1vdW50IgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjEwNgogICAgLy8gdGhpcy5hZG1pbkZlZUFtb3VudC52YWx1ZSArPSBhZG1pbkZlZVJld2FyZHM7CiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgKwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjMxCiAgICAvLyBhZG1pbkZlZUFtb3VudCA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBieXRlYyAxMSAvLyAiYWRtaW5GZWVBbW91bnQiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MTA2CiAgICAvLyB0aGlzLmFkbWluRmVlQW1vdW50LnZhbHVlICs9IGFkbWluRmVlUmV3YXJkczsKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CgphZGRSZXdhcmRzX2FmdGVyX2lmX2Vsc2VAMjoKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czo6UmV3YXJkTWFuYWdlci5kZXBvc2l0THAodG86IGJ5dGVzLCBscEFtb3VudDogdWludDY0KSAtPiB2b2lkOgpkZXBvc2l0THA6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MTEwCiAgICAvLyBwcm90ZWN0ZWQgZGVwb3NpdExwKHRvOiBBY2NvdW50LCBscEFtb3VudDogdWludDY0KTogdm9pZCB7CiAgICBwcm90byAyIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoxMTEKICAgIC8vIGNvbnN0IGFjY1Jld2FyZFBlclNoYXJlUCA9IHRoaXMuYWNjUmV3YXJkUGVyU2hhcmVQLnZhbHVlOwogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czozMAogICAgLy8gYWNjUmV3YXJkUGVyU2hhcmVQID0gR2xvYmFsU3RhdGU8YmlndWludD4oeyBpbml0aWFsVmFsdWU6IDBuIH0pOwogICAgYnl0ZWMgOCAvLyAiYWNjUmV3YXJkUGVyU2hhcmVQIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjExMQogICAgLy8gY29uc3QgYWNjUmV3YXJkUGVyU2hhcmVQID0gdGhpcy5hY2NSZXdhcmRQZXJTaGFyZVAudmFsdWU7CiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjExMgogICAgLy8gbGV0IHBlbmRpbmc6IHVpbnQ2NCA9IDA7CiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjExMwogICAgLy8gbGV0IHVzZXJMcEFtb3VudCA9IHRoaXMuYmFsYW5jZSh0bykudmFsdWU7CiAgICBmcmFtZV9kaWcgLTIKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MzMKICAgIC8vIGJhbGFuY2UgPSBMb2NhbFN0YXRlPHVpbnQ2ND4oKTsKICAgIGJ5dGVjXzMgLy8gImJhbGFuY2UiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MTEzCiAgICAvLyBsZXQgdXNlckxwQW1vdW50ID0gdGhpcy5iYWxhbmNlKHRvKS52YWx1ZTsKICAgIGFwcF9sb2NhbF9nZXRfZXgKICAgIHN3YXAKICAgIGR1cAogICAgdW5jb3ZlciAyCiAgICBhc3NlcnQgLy8gY2hlY2sgTG9jYWxTdGF0ZSBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoxMTQKICAgIC8vIGlmICh1c2VyTHBBbW91bnQgPiAwKSB7CiAgICBieiBkZXBvc2l0THBfYWZ0ZXJfaWZfZWxzZUAyCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MTE1CiAgICAvLyBwZW5kaW5nID0gYmlndWludFRvVWludDY0TW9kdWxvKEJpZ1VpbnQodXNlckxwQW1vdW50KSAqIGFjY1Jld2FyZFBlclNoYXJlUCAvIFBfU0NBTEUpIC0gdGhpcy51c2VyUmV3YXJkRGVidCh0bykudmFsdWU7CiAgICBmcmFtZV9kaWcgMgogICAgaXRvYgogICAgZnJhbWVfZGlnIDAKICAgIGIqCiAgICBieXRlYyA5IC8vIDB4MDEwMDAwMDAwMDAwMDAKICAgIGIvCiAgICBjYWxsc3ViIGJpZ3VpbnRUb1VpbnQ2NE1vZHVsbwogICAgZnJhbWVfZGlnIC0yCiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjM0CiAgICAvLyB1c2VyUmV3YXJkRGVidCA9IExvY2FsU3RhdGU8dWludDY0PigpOwogICAgYnl0ZWMgNSAvLyAidXNlclJld2FyZERlYnQiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MTE1CiAgICAvLyBwZW5kaW5nID0gYmlndWludFRvVWludDY0TW9kdWxvKEJpZ1VpbnQodXNlckxwQW1vdW50KSAqIGFjY1Jld2FyZFBlclNoYXJlUCAvIFBfU0NBTEUpIC0gdGhpcy51c2VyUmV3YXJkRGVidCh0bykudmFsdWU7CiAgICBhcHBfbG9jYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgTG9jYWxTdGF0ZSBleGlzdHMKICAgIC0KICAgIGZyYW1lX2J1cnkgMQoKZGVwb3NpdExwX2FmdGVyX2lmX2Vsc2VAMjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoxMTcKICAgIC8vIHVzZXJMcEFtb3VudCArPSBscEFtb3VudDsKICAgIGZyYW1lX2RpZyAyCiAgICBmcmFtZV9kaWcgLTEKICAgICsKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoxMTgKICAgIC8vIHRoaXMuYmFsYW5jZSh0bykudmFsdWUgKz0gbHBBbW91bnQ7CiAgICBmcmFtZV9kaWcgLTIKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MzMKICAgIC8vIGJhbGFuY2UgPSBMb2NhbFN0YXRlPHVpbnQ2ND4oKTsKICAgIGJ5dGVjXzMgLy8gImJhbGFuY2UiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MTE4CiAgICAvLyB0aGlzLmJhbGFuY2UodG8pLnZhbHVlICs9IGxwQW1vdW50OwogICAgYXBwX2xvY2FsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIExvY2FsU3RhdGUgZXhpc3RzCiAgICBmcmFtZV9kaWcgLTEKICAgICsKICAgIGZyYW1lX2RpZyAtMgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjMzCiAgICAvLyBiYWxhbmNlID0gTG9jYWxTdGF0ZTx1aW50NjQ+KCk7CiAgICBieXRlY18zIC8vICJiYWxhbmNlIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjExOAogICAgLy8gdGhpcy5iYWxhbmNlKHRvKS52YWx1ZSArPSBscEFtb3VudDsKICAgIHVuY292ZXIgMgogICAgYXBwX2xvY2FsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjExOQogICAgLy8gdGhpcy50b3RhbFN1cHBseS52YWx1ZSArPSBscEFtb3VudDsKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MjkKICAgIC8vIHRvdGFsU3VwcGx5ID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogMCB9KTsKICAgIGJ5dGVjIDcgLy8gInRvdGFsU3VwcGx5IgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjExOQogICAgLy8gdGhpcy50b3RhbFN1cHBseS52YWx1ZSArPSBscEFtb3VudDsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICBmcmFtZV9kaWcgLTEKICAgICsKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoyOQogICAgLy8gdG90YWxTdXBwbHkgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgYnl0ZWMgNyAvLyAidG90YWxTdXBwbHkiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MTE5CiAgICAvLyB0aGlzLnRvdGFsU3VwcGx5LnZhbHVlICs9IGxwQW1vdW50OwogICAgc3dhcAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoxMjEKICAgIC8vIHRoaXMudXNlclJld2FyZERlYnQodG8pLnZhbHVlID0gYmlndWludFRvVWludDY0TW9kdWxvKChCaWdVaW50KHVzZXJMcEFtb3VudCkgKiBhY2NSZXdhcmRQZXJTaGFyZVApIC8gUF9TQ0FMRSk7CiAgICBpdG9iCiAgICBmcmFtZV9kaWcgMAogICAgYioKICAgIGJ5dGVjIDkgLy8gMHgwMTAwMDAwMDAwMDAwMAogICAgYi8KICAgIGNhbGxzdWIgYmlndWludFRvVWludDY0TW9kdWxvCiAgICBmcmFtZV9kaWcgLTIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czozNAogICAgLy8gdXNlclJld2FyZERlYnQgPSBMb2NhbFN0YXRlPHVpbnQ2ND4oKTsKICAgIGJ5dGVjIDUgLy8gInVzZXJSZXdhcmREZWJ0IgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjEyMQogICAgLy8gdGhpcy51c2VyUmV3YXJkRGVidCh0bykudmFsdWUgPSBiaWd1aW50VG9VaW50NjRNb2R1bG8oKEJpZ1VpbnQodXNlckxwQW1vdW50KSAqIGFjY1Jld2FyZFBlclNoYXJlUCkgLyBQX1NDQUxFKTsKICAgIHVuY292ZXIgMgogICAgYXBwX2xvY2FsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjEyMgogICAgLy8gaWYgKHBlbmRpbmcgPiAwKSB7CiAgICBmcmFtZV9kaWcgMQogICAgYnogZGVwb3NpdExwX2FmdGVyX2lmX2Vsc2VANQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjEyMwogICAgLy8gaXR4bi5hc3NldFRyYW5zZmVyKHsgeGZlckFzc2V0OiB0aGlzLmFzc2V0LnZhbHVlLCBhc3NldEFtb3VudDogcGVuZGluZywgYXNzZXRSZWNlaXZlcjogdG8gfSkuc3VibWl0KCk7CiAgICBpdHhuX2JlZ2luCiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjI3CiAgICAvLyBhc3NldCA9IEdsb2JhbFN0YXRlPEFzc2V0PigpOwogICAgYnl0ZWNfMiAvLyAiYXNzZXQiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MTIzCiAgICAvLyBpdHhuLmFzc2V0VHJhbnNmZXIoeyB4ZmVyQXNzZXQ6IHRoaXMuYXNzZXQudmFsdWUsIGFzc2V0QW1vdW50OiBwZW5kaW5nLCBhc3NldFJlY2VpdmVyOiB0byB9KS5zdWJtaXQoKTsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICBmcmFtZV9kaWcgLTIKICAgIGl0eG5fZmllbGQgQXNzZXRSZWNlaXZlcgogICAgZnJhbWVfZGlnIDEKICAgIGR1cAogICAgY292ZXIgMgogICAgaXR4bl9maWVsZCBBc3NldEFtb3VudAogICAgaXR4bl9maWVsZCBYZmVyQXNzZXQKICAgIHB1c2hpbnQgNCAvLyA0CiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnRjXzAgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKICAgIGl0eG5fc3VibWl0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MTI0CiAgICAvLyBlbWl0PFJld2FyZHNDbGFpbWVkPih7IHVzZXI6IG5ldyBBZGRyZXNzKHRvKSwgcGVuZGluZyB9KTsKICAgIGl0b2IKICAgIGZyYW1lX2RpZyAtMgogICAgc3dhcAogICAgY29uY2F0CiAgICBieXRlYyAyNSAvLyBtZXRob2QgIlJld2FyZHNDbGFpbWVkKGFkZHJlc3MsdWludDY0KSIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCgpkZXBvc2l0THBfYWZ0ZXJfaWZfZWxzZUA1OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjEyNgogICAgLy8gZW1pdDxEZXBvc2l0Pih7IHRvOiBuZXcgQWRkcmVzcyh0byksIGxwQW1vdW50IH0pOwogICAgZnJhbWVfZGlnIC0xCiAgICBpdG9iCiAgICBmcmFtZV9kaWcgLTIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgcHVzaGJ5dGVzIDB4Y2ZhYjg3MjMgLy8gbWV0aG9kICJEZXBvc2l0KGFkZHJlc3MsdWludDY0KSIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL293bmFibGUuYWxnby50czo6T3duYWJsZS5vbmx5T3duZXIoKSAtPiB2b2lkOgpvbmx5T3duZXI6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL293bmFibGUuYWxnby50czoxMwogICAgLy8gYXNzZXJ0KG9wLlR4bi5zZW5kZXIuYnl0ZXMgPT09IHRoaXMub3duZXIudmFsdWUuYnl0ZXMsICdPbmx5IG93bmVyJyk7CiAgICB0eG4gU2VuZGVyCiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9vd25hYmxlLmFsZ28udHM6NgogICAgLy8gcHJvdGVjdGVkIG93bmVyID0gR2xvYmFsU3RhdGU8QWRkcmVzcz4oKTsKICAgIGJ5dGVjIDE0IC8vICJvd25lciIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvb3duYWJsZS5hbGdvLnRzOjEzCiAgICAvLyBhc3NlcnQob3AuVHhuLnNlbmRlci5ieXRlcyA9PT0gdGhpcy5vd25lci52YWx1ZS5ieXRlcywgJ09ubHkgb3duZXInKTsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICA9PQogICAgYXNzZXJ0IC8vIE9ubHkgb3duZXIKICAgIHJldHN1Ygo=",clear:"I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg=="},byteCode:{approval:"CyAFAAEIIJBOJh0MdG9rZW5CYWxhbmNlC3ZVc2RCYWxhbmNlBWFzc2V0B2JhbGFuY2UIcmVzZXJ2ZXMOdXNlclJld2FyZERlYnQBZAt0b3RhbFN1cHBseRJhY2NSZXdhcmRQZXJTaGFyZVAHAQAAAAAAAAEBDmFkbWluRmVlQW1vdW50CmNhbkRlcG9zaXQLY2FuV2l0aGRyYXcFb3duZXIKZmVlU2hhcmVCUBFiYWxhbmNlUmF0aW9NaW5CUAECD2FkbWluRmVlU2hhcmVCUAFhBnJvdXRlcg1zdG9wQXV0aG9yaXR5EXRva2VuQW1vdW50UmVkdWNlE3Rva2VuQW1vdW50SW5jcmVhc2UEFR98dQS6gYB2AQMDBoEBCQEAAAAAAAAAADEYQAApJxKB0A9nJwciZycIgABnJwsiZygiZykiZycEImcnBiJnJwwjZycNI2eCAwQBo6P/BARZt6wEm0uCNDYaAI4DALcAqwCdMRkURDEYQQCGghIEdhCkYATjrrJcBNl4rRQEDRtMBgR1v5ooBPST1+0EjVy23wT+BKXOBAKOCFkEQfyWbgSr8gAUBASxYfEEZlkczwSlrmvRBKBMW8QENhthWQRTjpEnBOF7r7Q2GgCOEgFbApMCqgNaBDYETQR0BIsElASdBKYErwTABNEFLAVDBXIFhQCABFFtNHs2GgCOAQCJACMxGZCBAxoxGBBEQgFyMRmBAhIxGBBEQgEFMRkjEjEYEERCAPOKAgCL/oEKCIsAMgwNQQAqsYEGshCBBbIZJxuyHicbsh+L/40CAAsABLNC/9syALIBQv/1IrIBQv/viYoBAYv/FUkkDUEAGIsAJAlJiwBJTgMPSwJMTYv/TE8CUhdMiSJC/+g2GgFJFSUSRDYaAkkVJRJENhoDSRUkEkQXNhoESRUkEkQXNhoFSRUkEkQXNhoGSRUkEkQXJw5LBmcqTwNnJxNPA2cnFE8DZycVTwNnJw9PAmcnEExnIiplRHEBTElPAkSBAw1BACZJgQMJgQpMlCcWTGdJgQMMQQAPgQNLAQmBCkyUJxdMZyNDIkL/9iJC/94xAIgIgCNDNhoBSRUkEkQXMQBJIitjTElPAkRBAAZJSwOIBKBLAUkiK2NEFESICHkURCNDiAlosSIqZUQyCrIUIrISshGBBLIQIrIBs4AWUG9vbDogb3B0LWluIGNvbXBsZXRlZLAjQ4AARwQxFiMJSTgQgQQSRDYaAUkVJBJEFyKI/okxGSMSQQAFMQCIB/UiJwxlREQiJwZlTElOAkUGREsBSTgRIiplRBJESTgUMgoSREk4IDIDEkRJOBUyAxJEOBKIBkxJRQhJRCInBGVECCcETGciKGVMSU4CRQZEIillTElOAkUGRAhFBkEABUsEQAA1SwUjkSIoZURLAQgoTGciKWVECClMZ4gFkTEAIicGZURLBQmIB+4iKGVEgYCAgICAIAxEI0MiKGVESwYWSwQWSwGjSwcWTEsBokkVJA5EJK9MSwGrF08ECChMZyIpZURLBRZPBKNPA6JJFSQORE8CqxcIKUxnQv+eNhoBSRUkEkQXNhoCSRUkEkQXiANDI0OAADYaAUkVJRJENhoCSRUkEkQXSTYaA0kVIxJEIlNMiALKIkwiTEEAXEsCQAANIicPZURLBAshBApFAUsDSUsCCYgFS0mIBXhPAkwJRQIiKGVESwEIKExnIicEZUQIJwRMZyIoZUSIBA5JRQciKWVEDEEACSIpZURLBglFAilLBmdJiAbAIiplRBZLBUxQSwQWUEsCFkxLAVBLAhZQgAQru+yjTFCwiAJXJxhMULAjQ4AASTYaAUkVJRJENhoCSRUkEkQXSTYaA0kVJBJEF0w2GgRJFSMSRCJTTIgCDyJMIkwiTEEAeyIpZURLBggpSwFniAODSUUKIihlTElOAkULRAxBAA1LB0sJCUlFBIgEsEUCIicEZURLA0lOAksBDkRMCScETGdLA0AADSInD2VESwILIQQKRQFKSU4CCUlFBChLC2dJSwcPRLEiKmVESwmyFLIRshKBBLIQIrIBs4gF5CIqZUQWSwdMUEsGFlBLAhZMSwFQSwIWUIAE0/HVQkxQsIgBeycYTFCwI0M2GgFJFSQSRBeIBoRJIQQORCcPTGcjQ4gGdiInBmVMSU8CRCInB2VMSU4CTgNEDUEACjEASwJLAgmIBb0jQzYaAUkVJBJEF4gGRkkhBA5EJxBMZyNDiAESJwwiZyNDiAYvJwwjZyNDiAEAJw0iZyNDiAYdJw0jZyNDNhoBSRUlEkSIBgwnFUxnI0M2GgFJFSUSRIgF+ycUTGcjQ4AASTEASSIrY0xJTwJEQQBISRYiJwhlRKMnCaKI+39JRQRLAiInBWNECUlFBUEAKUsBSScFSwVmsSIqZURLAbIUSwVJTgKyErIRgQSyECKyAbMWUCcZTFCwI0M2GgFJFSQSRBeIBY5JIQQORCcSTGcjQ4gFgCInC2VMSU8CREEAHrEiKmVEIicOZUSyFEsBshKyEYEEshAisgGzJwsiZyNDNhoBSRUlEkSIBFMWJxhMULAjQzYaAUkVJRJEiAU2Jw5MZyNDMQAiJxRlRBJEiTEAIicVZUQSRImKAAAiKGVMSU8CRCIpZUxJTgJOA0QNQQAQiwEhBAuLAAoiJxBlRA9EiYsAiwEMQf/3iwAhBAuLAQoiJxBlRA9EiYoCAIv/Ioj6QCInDWVERCInBmVEMQBJIitjTElPAkRJi/4PRCInCGVMTgJEIkxBABaLAhaLA6MnCaKI+keLASInBWNECYwEiwKL/gmLAUkiK2NEi/4JSwErTwJmIicHZUSL/gknB0xnTBaLA6MnCaKI+hEnBUxmiwRBACSxIiplRIsBSU4CshSLBElOArISshGBBLIQIrIBsxZQJxlMULCL/haLAUsBUIAE06+k8UxQsCIoZUQiKWVESghLAhZLBKNLARZMSwGiSRUkDkQkr0xLAasXTwVMCShMZyIpZURPBBZPBaNPA6JJFSQORE8CqxcJKUsBZyIoZUQIDUQiJwRlRIv+SwEORIv+CScETGeIAMgiJwZlRIsADESxIiplRIv+iAFaMQCyFLISshGBBLIQIrIBs4mKAQEiSYv/FkkiJwZlRBZJTgIiJxNlRIECkBZJTgMnEaNOAqZJQQB0iwOLAqGLBKOMAIsGQQBaiwCLA6dBAEeLAIsDoYwBI4sEiwNJTgKjSwGjo4sBSaOLAklPAqNPAqCjiAEWTEEAFYsCiwGjoIsFiwKjoicKoIj41IwAiYsCiwGjoUL/6IsDiwChjAEiQv+2iwCLA6CMASJC/6uLAosDoUL/iYoAACIoZUQWIillRBZKoyInE2VEFklLAqNPBE8EoKNJTgJOA4ABBKMnCqFPAqMnGqJLAUsCo0sBSwKjTwKjoIgAlElOAkqgiADyTgOkQQAViwChiADmiwFMCYwBiwEjkCcGTGeJiwBMoYgA0IsBCIwBQv/oigEBIicWZUxJTwJEIicXZUxOAkRBAAiL/4sACowAiYsBQQAIi/+LAQuMAImL/4wAiYoBASInFmVMSU8CRCInF2VMTgJEQQAIi/+LAAuMAImLAUEACIv/iwEKjACJi/+MAImKAQEiSYv/gAClRIv/gACoQQAFgACMAImL/ycapkEABScKjACJi/+TIwiBAgqBAkyVTBZMFkwnHKOgSYwAi/9LAaKgJxGijAGLAYsApEEAFYv/iwFJTgKiSwGgJxGijAGMAEL/44mKAQEiRwOL/4AAqEEABCKMAImL/4ABCKRBAAQjjACJi/+TgQIIgQMKgQJMlUwWTBZMJxyjoIwBiwFJo0mMA4AAqEAAJycRiwFJTgKji/+LA6KgJxqiSYwAqEAAC4sBJwqhiwCoQQA9iwCMAYsBJwqgSYwCSUsBo6OL/6ZBAAeLAowBQv/miwFJSwGjo4v/pUEACosBJwqhjAFC/+mLAYj2zYwAiYsAjAFC/4yKAQCL/yIrY0UBQAAFi/8rImaL/yInBWNFAUAABov/JwUiZomKAQGL/yIrY0QWIicIZUSjJwmiiPaJi/8iJwVjRAmJigEAIicHZUxJTwJEQQAwIicSZUSL/wshBAqL/0sBCYz/IicIZUSL/xYnCaOLABaioCcITGciJwtlRAgnC0xniYoCACInCGVEIov+IitjTElPAkRBABaLAhaLAKMnCaKI9h6L/iInBWNECYwBiwKL/wiL/iIrY0SL/wiL/itPAmYiJwdlRIv/CCcHTGcWiwCjJwmiiPXqi/4nBU8CZosBQQAksSIqZUSL/rIUiwFJTgKyErIRgQSyECKyAbMWi/5MUCcZTFCwi/8Wi/5MUIAEz6uHI0xQsIkxACInDmVEEkSJ",clear:"C4EBQw=="},events:[{name:"RewardsClaimed",args:[{type:"address",name:"user"},{type:"uint64",name:"pending"}]},{name:"Withdraw",args:[{type:"address",name:"from"},{type:"uint64",name:"lpAmount"}]},{name:"Deposit",args:[{type:"address",name:"to"},{type:"uint64",name:"lpAmount"}]},{name:"SwappedToVUsd",args:[{type:"address",name:"sender"},{type:"uint64",name:"tokenId"},{type:"uint64",name:"amount"},{type:"uint64",name:"vUsdAmount"},{type:"uint64",name:"fee"}]},{name:"SwappedFromVUsd",args:[{type:"address",name:"recipient"},{type:"uint64",name:"tokenId"},{type:"uint64",name:"vUsdAmount"},{type:"uint64",name:"amount"},{type:"uint64",name:"fee"}]}],templateVariables:{}},Tr=class{constructor(n){this.value=n}value;asByteArray(){return this.value}asString(){return this.value!==void 0?Buffer.from(this.value).toString("utf-8"):void 0}},Z=class i{static get create(){return{_resolveByMethod(n){switch(n.method){case"createApplication":case"createApplication(address,address,uint64,uint64,uint64,uint64)void":return i.create.createApplication(n)}throw new Error("Unknown ' + verb + ' method")},createApplication(n){return{...n,method:"createApplication(address,address,uint64,uint64,uint64,uint64)void",args:Array.isArray(n.args)?n.args:[n.args.owner,n.args.router,n.args.a,n.args.asset,n.args.feeShareBp,n.args.balanceRatioMinBp]}}}}static get optIn(){return{optInToApplication(n){return{...n,method:"optInToApplication()void",args:Array.isArray(n.args)?n.args:[]}},deposit(n){return{...n,method:"deposit(axfer,uint64)void",args:Array.isArray(n.args)?n.args:[n.args.assetTransferRef,n.args.budget]}}}}static get closeOut(){return{closeOutOfApplication(n){return{...n,method:"closeOutOfApplication(uint64)void",args:Array.isArray(n.args)?n.args:[n.args.budget]}}}}static optInAsset(n){return{...n,method:"optInAsset()void",args:Array.isArray(n.args)?n.args:[]}}static deposit(n){return{...n,method:"deposit(axfer,uint64)void",args:Array.isArray(n.args)?n.args:[n.args.assetTransferRef,n.args.budget]}}static withdraw(n){return{...n,method:"withdraw(uint64,uint64)void",args:Array.isArray(n.args)?n.args:[n.args.amountLp,n.args.budget]}}static swapToVUsd(n){return{...n,method:"swapToVUsd(address,uint64,bool)uint64",args:Array.isArray(n.args)?n.args:[n.args.user,n.args.amount,n.args.zeroFee]}}static swapFromVUsd(n){return{...n,method:"swapFromVUsd(address,uint64,uint64,bool)uint64",args:Array.isArray(n.args)?n.args:[n.args.user,n.args.amount,n.args.receiveAmountMin,n.args.zeroFee]}}static setFeeShare(n){return{...n,method:"setFeeShare(uint64)void",args:Array.isArray(n.args)?n.args:[n.args.feeShareBp]}}static adjustTotalLpAmount(n){return{...n,method:"adjustTotalLpAmount()void",args:Array.isArray(n.args)?n.args:[]}}static setBalanceRatioMinBp(n){return{...n,method:"setBalanceRatioMinBP(uint64)void",args:Array.isArray(n.args)?n.args:[n.args.balanceRatioMinBp]}}static stopDeposit(n){return{...n,method:"stopDeposit()void",args:Array.isArray(n.args)?n.args:[]}}static startDeposit(n){return{...n,method:"startDeposit()void",args:Array.isArray(n.args)?n.args:[]}}static stopWithdraw(n){return{...n,method:"stopWithdraw()void",args:Array.isArray(n.args)?n.args:[]}}static startWithdraw(n){return{...n,method:"startWithdraw()void",args:Array.isArray(n.args)?n.args:[]}}static setStopAuthority(n){return{...n,method:"setStopAuthority(address)void",args:Array.isArray(n.args)?n.args:[n.args.stopAuthority]}}static setRouter(n){return{...n,method:"setRouter(address)void",args:Array.isArray(n.args)?n.args:[n.args.router]}}static claimRewards(n){return{...n,method:"claimRewards()void",args:Array.isArray(n.args)?n.args:[]}}static setAdminFeeShare(n){return{...n,method:"setAdminFeeShare(uint64)void",args:Array.isArray(n.args)?n.args:[n.args.adminFeeShareBp]}}static claimAdminFee(n){return{...n,method:"claimAdminFee()void",args:Array.isArray(n.args)?n.args:[]}}static pendingReward(n){return{...n,method:"pendingReward(address)uint64",args:Array.isArray(n.args)?n.args:[n.args.user]}}static transferOwnership(n){return{...n,method:"transferOwnership(address)void",args:Array.isArray(n.args)?n.args:[n.args.newOwner]}}};var Br=class i{appClient;constructor(n){this.appClient=n instanceof ni.AppClient?n:new ni.AppClient({...n,appSpec:Rr})}decodeReturnValue(n,a){return a!==void 0?(0,gg.getArc56ReturnValue)(a,this.appClient.getABIMethod(n),Rr.structs):void 0}static async fromCreatorAndName(n){return new i(await ni.AppClient.fromCreatorAndName({...n,appSpec:Rr}))}static async fromNetwork(n){return new i(await ni.AppClient.fromNetwork({...n,appSpec:Rr}))}get appId(){return this.appClient.appId}get appAddress(){return this.appClient.appAddress}get appName(){return this.appClient.appName}get appSpec(){return this.appClient.appSpec}get algorand(){return this.appClient.algorand}params={optIn:{optInToApplication:(n={args:[]})=>this.appClient.params.optIn(Z.optIn.optInToApplication(n)),deposit:n=>this.appClient.params.optIn(Z.optIn.deposit(n))},closeOut:{closeOutOfApplication:(n={args:[void 0]})=>this.appClient.params.closeOut(Z.closeOut.closeOutOfApplication(n))},clearState:n=>this.appClient.params.bare.clearState(n),optInAsset:(n={args:[]})=>this.appClient.params.call(Z.optInAsset(n)),deposit:n=>this.appClient.params.call(Z.deposit(n)),withdraw:n=>this.appClient.params.call(Z.withdraw(n)),swapToVUsd:n=>this.appClient.params.call(Z.swapToVUsd(n)),swapFromVUsd:n=>this.appClient.params.call(Z.swapFromVUsd(n)),setFeeShare:n=>this.appClient.params.call(Z.setFeeShare(n)),adjustTotalLpAmount:(n={args:[]})=>this.appClient.params.call(Z.adjustTotalLpAmount(n)),setBalanceRatioMinBp:n=>this.appClient.params.call(Z.setBalanceRatioMinBp(n)),stopDeposit:(n={args:[]})=>this.appClient.params.call(Z.stopDeposit(n)),startDeposit:(n={args:[]})=>this.appClient.params.call(Z.startDeposit(n)),stopWithdraw:(n={args:[]})=>this.appClient.params.call(Z.stopWithdraw(n)),startWithdraw:(n={args:[]})=>this.appClient.params.call(Z.startWithdraw(n)),setStopAuthority:n=>this.appClient.params.call(Z.setStopAuthority(n)),setRouter:n=>this.appClient.params.call(Z.setRouter(n)),claimRewards:(n={args:[]})=>this.appClient.params.call(Z.claimRewards(n)),setAdminFeeShare:n=>this.appClient.params.call(Z.setAdminFeeShare(n)),claimAdminFee:(n={args:[]})=>this.appClient.params.call(Z.claimAdminFee(n)),pendingReward:n=>this.appClient.params.call(Z.pendingReward(n)),transferOwnership:n=>this.appClient.params.call(Z.transferOwnership(n))};createTransaction={optIn:{optInToApplication:(n={args:[]})=>this.appClient.createTransaction.optIn(Z.optIn.optInToApplication(n)),deposit:n=>this.appClient.createTransaction.optIn(Z.optIn.deposit(n))},closeOut:{closeOutOfApplication:(n={args:[void 0]})=>this.appClient.createTransaction.closeOut(Z.closeOut.closeOutOfApplication(n))},clearState:n=>this.appClient.createTransaction.bare.clearState(n),optInAsset:(n={args:[]})=>this.appClient.createTransaction.call(Z.optInAsset(n)),deposit:n=>this.appClient.createTransaction.call(Z.deposit(n)),withdraw:n=>this.appClient.createTransaction.call(Z.withdraw(n)),swapToVUsd:n=>this.appClient.createTransaction.call(Z.swapToVUsd(n)),swapFromVUsd:n=>this.appClient.createTransaction.call(Z.swapFromVUsd(n)),setFeeShare:n=>this.appClient.createTransaction.call(Z.setFeeShare(n)),adjustTotalLpAmount:(n={args:[]})=>this.appClient.createTransaction.call(Z.adjustTotalLpAmount(n)),setBalanceRatioMinBp:n=>this.appClient.createTransaction.call(Z.setBalanceRatioMinBp(n)),stopDeposit:(n={args:[]})=>this.appClient.createTransaction.call(Z.stopDeposit(n)),startDeposit:(n={args:[]})=>this.appClient.createTransaction.call(Z.startDeposit(n)),stopWithdraw:(n={args:[]})=>this.appClient.createTransaction.call(Z.stopWithdraw(n)),startWithdraw:(n={args:[]})=>this.appClient.createTransaction.call(Z.startWithdraw(n)),setStopAuthority:n=>this.appClient.createTransaction.call(Z.setStopAuthority(n)),setRouter:n=>this.appClient.createTransaction.call(Z.setRouter(n)),claimRewards:(n={args:[]})=>this.appClient.createTransaction.call(Z.claimRewards(n)),setAdminFeeShare:n=>this.appClient.createTransaction.call(Z.setAdminFeeShare(n)),claimAdminFee:(n={args:[]})=>this.appClient.createTransaction.call(Z.claimAdminFee(n)),pendingReward:n=>this.appClient.createTransaction.call(Z.pendingReward(n)),transferOwnership:n=>this.appClient.createTransaction.call(Z.transferOwnership(n))};send={optIn:{optInToApplication:async(n={args:[]})=>{let a=await this.appClient.send.optIn(Z.optIn.optInToApplication(n));return{...a,return:a.return}},deposit:async n=>{let a=await this.appClient.send.optIn(Z.optIn.deposit(n));return{...a,return:a.return}}},closeOut:{closeOutOfApplication:async(n={args:[void 0]})=>{let a=await this.appClient.send.closeOut(Z.closeOut.closeOutOfApplication(n));return{...a,return:a.return}}},clearState:n=>this.appClient.send.bare.clearState(n),optInAsset:async(n={args:[]})=>{let a=await this.appClient.send.call(Z.optInAsset(n));return{...a,return:a.return}},deposit:async n=>{let a=await this.appClient.send.call(Z.deposit(n));return{...a,return:a.return}},withdraw:async n=>{let a=await this.appClient.send.call(Z.withdraw(n));return{...a,return:a.return}},swapToVUsd:async n=>{let a=await this.appClient.send.call(Z.swapToVUsd(n));return{...a,return:a.return}},swapFromVUsd:async n=>{let a=await this.appClient.send.call(Z.swapFromVUsd(n));return{...a,return:a.return}},setFeeShare:async n=>{let a=await this.appClient.send.call(Z.setFeeShare(n));return{...a,return:a.return}},adjustTotalLpAmount:async(n={args:[]})=>{let a=await this.appClient.send.call(Z.adjustTotalLpAmount(n));return{...a,return:a.return}},setBalanceRatioMinBp:async n=>{let a=await this.appClient.send.call(Z.setBalanceRatioMinBp(n));return{...a,return:a.return}},stopDeposit:async(n={args:[]})=>{let a=await this.appClient.send.call(Z.stopDeposit(n));return{...a,return:a.return}},startDeposit:async(n={args:[]})=>{let a=await this.appClient.send.call(Z.startDeposit(n));return{...a,return:a.return}},stopWithdraw:async(n={args:[]})=>{let a=await this.appClient.send.call(Z.stopWithdraw(n));return{...a,return:a.return}},startWithdraw:async(n={args:[]})=>{let a=await this.appClient.send.call(Z.startWithdraw(n));return{...a,return:a.return}},setStopAuthority:async n=>{let a=await this.appClient.send.call(Z.setStopAuthority(n));return{...a,return:a.return}},setRouter:async n=>{let a=await this.appClient.send.call(Z.setRouter(n));return{...a,return:a.return}},claimRewards:async(n={args:[]})=>{let a=await this.appClient.send.call(Z.claimRewards(n));return{...a,return:a.return}},setAdminFeeShare:async n=>{let a=await this.appClient.send.call(Z.setAdminFeeShare(n));return{...a,return:a.return}},claimAdminFee:async(n={args:[]})=>{let a=await this.appClient.send.call(Z.claimAdminFee(n));return{...a,return:a.return}},pendingReward:async n=>{let a=await this.appClient.send.call(Z.pendingReward(n));return{...a,return:a.return}},transferOwnership:async n=>{let a=await this.appClient.send.call(Z.transferOwnership(n));return{...a,return:a.return}}};clone(n){return new i(this.appClient.clone(n))}async pendingReward(n){return(await this.appClient.send.call(Z.pendingReward(n))).return}state={global:{getAll:async()=>{let n=await this.appClient.state.global.getAll();return{feeShareBp:n.feeShareBP,router:n.router,tokenBalance:n.tokenBalance,vUsdBalance:n.vUsdBalance,balanceRatioMinBp:n.balanceRatioMinBP,reserves:n.reserves,a:n.a,d:n.d,tokenAmountReduce:n.tokenAmountReduce,tokenAmountIncrease:n.tokenAmountIncrease,stopAuthority:n.stopAuthority,canDeposit:n.canDeposit,canWithdraw:n.canWithdraw,asset:n.asset,adminFeeShareBp:n.adminFeeShareBP,totalSupply:n.totalSupply,accRewardPerShareP:new Tr(n.accRewardPerShareP),adminFeeAmount:n.adminFeeAmount,owner:n.owner}},feeShareBp:async()=>await this.appClient.state.global.getValue("feeShareBP"),router:async()=>await this.appClient.state.global.getValue("router"),tokenBalance:async()=>await this.appClient.state.global.getValue("tokenBalance"),vUsdBalance:async()=>await this.appClient.state.global.getValue("vUsdBalance"),balanceRatioMinBp:async()=>await this.appClient.state.global.getValue("balanceRatioMinBP"),reserves:async()=>await this.appClient.state.global.getValue("reserves"),a:async()=>await this.appClient.state.global.getValue("a"),d:async()=>await this.appClient.state.global.getValue("d"),tokenAmountReduce:async()=>await this.appClient.state.global.getValue("tokenAmountReduce"),tokenAmountIncrease:async()=>await this.appClient.state.global.getValue("tokenAmountIncrease"),stopAuthority:async()=>await this.appClient.state.global.getValue("stopAuthority"),canDeposit:async()=>await this.appClient.state.global.getValue("canDeposit"),canWithdraw:async()=>await this.appClient.state.global.getValue("canWithdraw"),asset:async()=>await this.appClient.state.global.getValue("asset"),adminFeeShareBp:async()=>await this.appClient.state.global.getValue("adminFeeShareBP"),totalSupply:async()=>await this.appClient.state.global.getValue("totalSupply"),accRewardPerShareP:async()=>new Tr(await this.appClient.state.global.getValue("accRewardPerShareP")),adminFeeAmount:async()=>await this.appClient.state.global.getValue("adminFeeAmount"),owner:async()=>await this.appClient.state.global.getValue("owner")},local:n=>{let a=typeof n=="string"?n:(0,lg.encodeAddress)(n.publicKey);return{getAll:async()=>{let r=await this.appClient.state.local(a).getAll();return{balance:r.balance,userRewardDebt:r.userRewardDebt}},balance:async()=>await this.appClient.state.local(a).getValue("balance"),userRewardDebt:async()=>await this.appClient.state.local(a).getValue("userRewardDebt")}}};newGroup(){let n=this,a=this.algorand.newGroup(),r=Promise.resolve(),o=[];return{optInAsset(s){return r=r.then(async()=>a.addAppCallMethodCall(await n.params.optInAsset(s))),o.push(void 0),this},deposit(s){return r=r.then(async()=>a.addAppCallMethodCall(await n.params.deposit(s))),o.push(void 0),this},withdraw(s){return r=r.then(async()=>a.addAppCallMethodCall(await n.params.withdraw(s))),o.push(void 0),this},swapToVUsd(s){return r=r.then(async()=>a.addAppCallMethodCall(await n.params.swapToVUsd(s))),o.push(d=>n.decodeReturnValue("swapToVUsd(address,uint64,bool)uint64",d)),this},swapFromVUsd(s){return r=r.then(async()=>a.addAppCallMethodCall(await n.params.swapFromVUsd(s))),o.push(d=>n.decodeReturnValue("swapFromVUsd(address,uint64,uint64,bool)uint64",d)),this},setFeeShare(s){return r=r.then(async()=>a.addAppCallMethodCall(await n.params.setFeeShare(s))),o.push(void 0),this},adjustTotalLpAmount(s){return r=r.then(async()=>a.addAppCallMethodCall(await n.params.adjustTotalLpAmount(s))),o.push(void 0),this},setBalanceRatioMinBp(s){return r=r.then(async()=>a.addAppCallMethodCall(await n.params.setBalanceRatioMinBp(s))),o.push(void 0),this},stopDeposit(s){return r=r.then(async()=>a.addAppCallMethodCall(await n.params.stopDeposit(s))),o.push(void 0),this},startDeposit(s){return r=r.then(async()=>a.addAppCallMethodCall(await n.params.startDeposit(s))),o.push(void 0),this},stopWithdraw(s){return r=r.then(async()=>a.addAppCallMethodCall(await n.params.stopWithdraw(s))),o.push(void 0),this},startWithdraw(s){return r=r.then(async()=>a.addAppCallMethodCall(await n.params.startWithdraw(s))),o.push(void 0),this},setStopAuthority(s){return r=r.then(async()=>a.addAppCallMethodCall(await n.params.setStopAuthority(s))),o.push(void 0),this},setRouter(s){return r=r.then(async()=>a.addAppCallMethodCall(await n.params.setRouter(s))),o.push(void 0),this},claimRewards(s){return r=r.then(async()=>a.addAppCallMethodCall(await n.params.claimRewards(s))),o.push(void 0),this},setAdminFeeShare(s){return r=r.then(async()=>a.addAppCallMethodCall(await n.params.setAdminFeeShare(s))),o.push(void 0),this},claimAdminFee(s){return r=r.then(async()=>a.addAppCallMethodCall(await n.params.claimAdminFee(s))),o.push(void 0),this},pendingReward(s){return r=r.then(async()=>a.addAppCallMethodCall(await n.params.pendingReward(s))),o.push(d=>n.decodeReturnValue("pendingReward(address)uint64",d)),this},transferOwnership(s){return r=r.then(async()=>a.addAppCallMethodCall(await n.params.transferOwnership(s))),o.push(void 0),this},get optIn(){return{optInToApplication:s=>(r=r.then(async()=>a.addAppCallMethodCall(await n.params.optIn.optInToApplication(s))),o.push(void 0),this),deposit:s=>(r=r.then(async()=>a.addAppCallMethodCall(await n.params.optIn.deposit(s))),o.push(void 0),this)}},get closeOut(){return{closeOutOfApplication:s=>(r=r.then(async()=>a.addAppCallMethodCall(await n.params.closeOut.closeOutOfApplication(s))),o.push(void 0),this)}},clearState(s){return r=r.then(()=>a.addAppCall(n.params.clearState(s))),this},addTransaction(s,d){return r=r.then(()=>a.addTransaction(s,d)),this},async composer(){return await r,a},async simulate(s){await r;let d=await(s?a.simulate(s):a.simulate());return{...d,returns:d.returns?.map((c,g)=>o[g]!==void 0?o[g](c):c.returnValue)}},async send(s){await r;let d=await a.send(s);return{...d,returns:d.returns?.map((c,g)=>o[g]!==void 0?o[g](c):c.returnValue)}}}}};var Ye=class{lpAmount;rewardDebt;constructor(n){this.lpAmount=n.lpAmount,this.rewardDebt=n.rewardDebt}get userLiquidity(){return P(this.lpAmount,3).toFixed()}earned(n,a){let r=zs(this.lpAmount,this.rewardDebt,n.accRewardPerShareP,n.p);return a?P(r,a).toFixed():r}};var xe=class{};var ai=class extends xe{constructor(a,r){super();this.algorand=a;this.api=r;a.setDefaultValidityWindow(100)}algorand;api;chainType="ALG";P=48;async buildRawTransactionClaimRewards(a){let r=a.accountAddress,o=BigInt(a.token.tokenAddress),s=BigInt(a.token.poolAddress),d=this.getPool(s),c=this.algorand.newGroup();c.addAppCallMethodCall(await d.params.claimRewards({args:[],sender:r,extraFee:ln(1),assetReferences:[o]}));let{transactions:g}=await c.buildTransactions();return g=(0,sn.assignGroupID)(g),An(...g)}async buildRawTransactionDeposit(a){let r=a.accountAddress,o=BigInt(a.amount),s=BigInt(a.token.tokenAddress),d=BigInt(a.token.poolAddress),c=this.getPool(d),l=await Fi(d,r,this.algorand)?sn.OnApplicationComplete.NoOpOC:sn.OnApplicationComplete.OptInOC,A=this.algorand.newGroup(),u=await this.algorand.createTransaction.assetTransfer({assetId:s,amount:o,sender:r,receiver:c.appAddress});A.addAppCallMethodCall(await c.params.deposit({args:{assetTransferRef:u},sender:r,onComplete:l,extraFee:ln(5)}));let{transactions:m}=await A.buildTransactions();return m=(0,sn.assignGroupID)(m),An(...m)}async buildRawTransactionWithdraw(a){let r=a.accountAddress,o=BigInt(a.amount),s=BigInt(a.token.tokenAddress),d=BigInt(a.token.poolAddress),c=this.getPool(d),g=this.algorand.newGroup();g.addAppCallMethodCall(await c.params.withdraw({args:{amountLp:o},sender:r,assetReferences:[s],extraFee:ln(7)}));let{transactions:l}=await g.buildTransactions();return l=(0,sn.assignGroupID)(l),An(...l)}async getPoolInfoFromChain(a){let o=await this.getPool(BigInt(a.poolAddress)).state.global.getAll(),s=o.a?.toString(),d=o.d?.toString(),c=o.tokenBalance?.toString(),g=o.vUsdBalance?.toString(),l=o.totalSupply?.toString(),A=(0,sn.bytesToBigInt)(o.accRewardPerShareP?.asByteArray()??Uint8Array.from([])).toString();if(s&&d&&c&&g&&l&&A){let u=We({tokenBalance:c,vUsdBalance:g});return{aValue:s,dValue:d,tokenBalance:c,vUsdBalance:g,totalLpAmount:l,accRewardPerShareP:A,p:this.P,imbalance:u}}throw new f("Unable to pool info from chain")}async getUserBalanceInfo(a,r){let o=BigInt(r.poolAddress),s=this.getPool(o);try{let{balance:d,userRewardDebt:c}=await s.state.local(a).getAll();if(d!==void 0&&c!==void 0)return new Ye({lpAmount:d.toString(),rewardDebt:c.toString()})}catch{let g=(await this.algorand.account.getInformation(a)).appsLocalState;if(g&&!g.find(({id:A})=>A===o))return new Ye({lpAmount:"0",rewardDebt:"0"})}throw new f("Unable to get user balance")}getPool(a){return this.algorand.client.getTypedAppClientById(Br,{appId:a})}};var dn=require("web3");var Eu={abi:[{inputs:[{internalType:"address",name:"_router",type:"address"},{internalType:"uint256",name:"_a",type:"uint256"},{internalType:"contract ERC20",name:"_token",type:"address"},{internalType:"uint16",name:"_feeShareBP",type:"uint16"},{internalType:"uint256",name:"_balanceRatioMinBP",type:"uint256"},{internalType:"string",name:"lpName",type:"string"},{internalType:"string",name:"lpSymbol",type:"string"}],stateMutability:"nonpayable",type:"constructor"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"owner",type:"address"},{indexed:!0,internalType:"address",name:"spender",type:"address"},{indexed:!1,internalType:"uint256",name:"value",type:"uint256"}],name:"Approval",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"user",type:"address"},{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"}],name:"Deposit",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"previousOwner",type:"address"},{indexed:!0,internalType:"address",name:"newOwner",type:"address"}],name:"OwnershipTransferred",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"user",type:"address"},{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"}],name:"RewardsClaimed",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"recipient",type:"address"},{indexed:!1,internalType:"address",name:"token",type:"address"},{indexed:!1,internalType:"uint256",name:"vUsdAmount",type:"uint256"},{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"},{indexed:!1,internalType:"uint256",name:"fee",type:"uint256"}],name:"SwappedFromVUsd",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"sender",type:"address"},{indexed:!1,internalType:"address",name:"token",type:"address"},{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"},{indexed:!1,internalType:"uint256",name:"vUsdAmount",type:"uint256"},{indexed:!1,internalType:"uint256",name:"fee",type:"uint256"}],name:"SwappedToVUsd",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"from",type:"address"},{indexed:!0,internalType:"address",name:"to",type:"address"},{indexed:!1,internalType:"uint256",name:"value",type:"uint256"}],name:"Transfer",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"user",type:"address"},{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"}],name:"Withdraw",type:"event"},{stateMutability:"payable",type:"fallback"},{inputs:[],name:"a",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"accRewardPerShareP",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"adjustTotalLpAmount",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"adminFeeAmount",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"adminFeeShareBP",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"owner",type:"address"},{internalType:"address",name:"spender",type:"address"}],name:"allowance",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"approve",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"account",type:"address"}],name:"balanceOf",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"balanceRatioMinBP",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"canDeposit",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"canWithdraw",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"claimAdminFee",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"claimRewards",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"d",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"decimals",outputs:[{internalType:"uint8",name:"",type:"uint8"}],stateMutability:"pure",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"subtractedValue",type:"uint256"}],name:"decreaseAllowance",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"amount",type:"uint256"}],name:"deposit",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"feeShareBP",outputs:[{internalType:"uint16",name:"",type:"uint16"}],stateMutability:"view",type:"function"},{inputs:[],name:"getPrice",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"x",type:"uint256"}],name:"getY",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"addedValue",type:"uint256"}],name:"increaseAllowance",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"name",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"},{inputs:[],name:"owner",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"user",type:"address"}],name:"pendingReward",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"renounceOwnership",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"reserves",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"router",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"_adminFeeShareBP",type:"uint256"}],name:"setAdminFeeShare",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"_balanceRatioMinBP",type:"uint256"}],name:"setBalanceRatioMinBP",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint16",name:"_feeShareBP",type:"uint16"}],name:"setFeeShare",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"_router",type:"address"}],name:"setRouter",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"_stopAuthority",type:"address"}],name:"setStopAuthority",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"startDeposit",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"startWithdraw",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"stopDeposit",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"stopWithdraw",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"user",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"uint256",name:"receiveAmountMin",type:"uint256"},{internalType:"bool",name:"zeroFee",type:"bool"}],name:"swapFromVUsd",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"user",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"bool",name:"zeroFee",type:"bool"}],name:"swapToVUsd",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"symbol",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"},{inputs:[],name:"token",outputs:[{internalType:"contract ERC20",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"tokenBalance",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"totalSupply",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"to",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"transfer",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"from",type:"address"},{internalType:"address",name:"to",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"transferFrom",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"newOwner",type:"address"}],name:"transferOwnership",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"user",type:"address"}],name:"userRewardDebt",outputs:[{internalType:"uint256",name:"amount",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"vUsdBalance",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"amountLp",type:"uint256"}],name:"withdraw",outputs:[],stateMutability:"nonpayable",type:"function"},{stateMutability:"payable",type:"receive"}]},ii=Eu;var ri=class extends xe{constructor(a,r){super();this.web3=a;this.api=r}web3;api;chainType="EVM";P=52;async getUserBalanceInfo(a,r){let o;try{o=await Ti(this.getUserBalanceInfoByBatch(a,r),`Cannot get UserBalanceInfo for ${r.name} on ${r.chainSymbol}`,5e3)}catch{o=await to(()=>this.getUserBalanceInfoPerProperty(a,r),`Cannot get UserBalanceInfo for ${r.name} on ${r.chainSymbol}`,5,2e3)}return o}async getPoolInfoFromChain(a){let r;try{r=await Ti(this.getPoolInfoByBatch(a),`Cannot get PoolInfo for ${a.name} on ${a.chainSymbol}`,5e3)}catch{r=await to(()=>this.getPoolInfoPerProperty(a),`Cannot get PoolInfo for ${a.name} on ${a.chainSymbol}`,5,2e3)}return r}async getUserBalanceInfoByBatch(a,r){let o=new this.web3.eth.BatchRequest,s=this.getPoolContract(r.poolAddress),d=s.methods.userRewardDebt(a).encodeABI(),c=s.methods.balanceOf(a).encodeABI();o.add({method:"eth_call",params:[{to:r.poolAddress,data:d},"latest"]}),o.add({method:"eth_call",params:[{to:r.poolAddress,data:c},"latest"]});let[g,l]=await o.execute();if(g&&l&&!g.error&&!l.error)return new Ye({lpAmount:dn.Web3.utils.toBigInt(l.result).toString(),rewardDebt:dn.Web3.utils.toBigInt(g.result).toString()});throw new Error("Batched failed")}async getUserBalanceInfoPerProperty(a,r){let o=(await this.getPoolContract(r.poolAddress).methods.userRewardDebt(a).call()).toString(),s=(await this.getPoolContract(r.poolAddress).methods.balanceOf(a).call()).toString();return new Ye({lpAmount:s,rewardDebt:o})}async getPoolInfoByBatch(a){let r=new this.web3.eth.BatchRequest,o=this.getPoolContract(a.poolAddress),s=o.methods.a().encodeABI(),d=o.methods.d().encodeABI(),c=o.methods.tokenBalance().encodeABI(),g=o.methods.vUsdBalance().encodeABI(),l=o.methods.totalSupply().encodeABI(),A=o.methods.accRewardPerShareP().encodeABI();r.add({method:"eth_call",params:[{to:a.poolAddress,data:s},"latest"]}),r.add({method:"eth_call",params:[{to:a.poolAddress,data:d},"latest"]}),r.add({method:"eth_call",params:[{to:a.poolAddress,data:c},"latest"]}),r.add({method:"eth_call",params:[{to:a.poolAddress,data:g},"latest"]}),r.add({method:"eth_call",params:[{to:a.poolAddress,data:l},"latest"]}),r.add({method:"eth_call",params:[{to:a.poolAddress,data:A},"latest"]});let[u,m,y,v,C,T]=await r.execute();if(u&&m&&y&&v&&C&&T&&!u.error&&!m.error&&!y.error&&!v.error&&!C.error&&!T.error){let Y=dn.Web3.utils.toBigInt(y.result).toString(),h=dn.Web3.utils.toBigInt(v.result).toString(),F=We({tokenBalance:Y,vUsdBalance:h});return{aValue:dn.Web3.utils.toBigInt(u.result).toString(),dValue:dn.Web3.utils.toBigInt(m.result).toString(),tokenBalance:Y,vUsdBalance:h,totalLpAmount:dn.Web3.utils.toBigInt(C.result).toString(),accRewardPerShareP:dn.Web3.utils.toBigInt(T.result).toString(),p:this.P,imbalance:F}}throw new Error("Batched failed")}async getPoolInfoPerProperty(a){let r=this.getPoolContract(a.poolAddress),o=(await r.methods.a().call()).toString(),s=(await r.methods.d().call()).toString(),d=(await r.methods.tokenBalance().call()).toString(),c=(await r.methods.vUsdBalance().call()).toString(),g=(await r.methods.totalSupply().call()).toString(),l=(await r.methods.accRewardPerShareP().call()).toString(),A=We({tokenBalance:d,vUsdBalance:c});return{aValue:o,dValue:s,tokenBalance:d,vUsdBalance:c,totalLpAmount:g,accRewardPerShareP:l,p:this.P,imbalance:A}}async buildRawTransactionDeposit(a){return Promise.resolve({...this.buildTxParams(a),data:this.getPoolContract(a.token.poolAddress).methods.deposit(a.amount).encodeABI()})}async buildRawTransactionWithdraw(a){return Promise.resolve({...this.buildTxParams(a),data:this.getPoolContract(a.token.poolAddress).methods.withdraw(a.amount).encodeABI()})}async buildRawTransactionClaimRewards(a){return Promise.resolve({...this.buildTxParams(a),data:this.getPoolContract(a.token.poolAddress).methods.claimRewards().encodeABI()})}buildTxParams(a){return{from:a.accountAddress,to:a.token.poolAddress,value:"0"}}getPoolContract(a){return new this.web3.eth.Contract(ii.abi,a)}};var Yr=class{constructor(n,a,r,o){this.api=n;this.nodeRpcUrlsConfig=a;this.params=r;this.tokenService=o}api;nodeRpcUrlsConfig;params;tokenService;async approve(n,a){if(a){let r=n,o=a;return this.tokenService.buildRawTransactionApprove({...o,spender:o.token.poolAddress},r)}else{let r=n;return this.tokenService.buildRawTransactionApprove({...r,spender:r.token.poolAddress})}}async deposit(n,a){return D(n.amount),O("amount",n.amount,n.token.decimals),n.amount=j(n.amount,n.token.decimals).toFixed(),sa(n.token.chainSymbol,this.api,this.nodeRpcUrlsConfig,this.params,a).buildRawTransactionDeposit(n)}async withdraw(n,a){return D(n.amount),O("amount",n.amount,n.token.decimals),n.amount=j(n.amount,3).toFixed(),sa(n.token.chainSymbol,this.api,this.nodeRpcUrlsConfig,this.params,a).buildRawTransactionWithdraw(n)}async claimRewards(n,a){return sa(n.token.chainSymbol,this.api,this.nodeRpcUrlsConfig,this.params,a).buildRawTransactionClaimRewards(n)}};var cn=require("@coral-xyz/anchor"),Ag=require("@solana/spl-token"),Nt=require("@solana/web3.js");var wr=class extends xe{constructor(a,r){super();this.solanaRpcUrl=a;this.api=r}solanaRpcUrl;api;chainType="SOLANA";P=48;async getUserBalanceInfo(a,r){let o=this.buildAnchorProvider(a),s=this.getBridge(r.bridgeAddress,o),d=new Nt.PublicKey(r.poolAddress),c=await s.account.pool.fetch(d);try{let g=await go(new Nt.PublicKey(a),c.mint,s.programId),{lpAmount:l,rewardDebt:A}=await s.account.userDeposit.fetch(g);return new Ye({lpAmount:l.toString(),rewardDebt:A.toString()})}catch{return new Ye({lpAmount:"0",rewardDebt:"0"})}}async getPoolInfoFromChain(a){let r=this.buildAnchorProvider(a.bridgeAddress),o=await this.getBridge(a.bridgeAddress,r).account.pool.fetch(a.poolAddress),s=o.vUsdBalance.toString(),d=o.tokenBalance.toString(),c=We({tokenBalance:d,vUsdBalance:s});return{dValue:o.d.toString(),aValue:o.a.toString(),totalLpAmount:o.totalLpAmount.toString(),vUsdBalance:s,tokenBalance:d,accRewardPerShareP:o.accRewardPerShareP.toString(),p:this.P,imbalance:c}}async buildRawTransactionDeposit(a){let{bridge:r,accounts:o,preInstructions:s}=await this.prepareDataForTransaction(a),d=await r.methods.deposit(new cn.BN(a.amount)).accounts(o).preInstructions(s).transaction();return d.recentBlockhash=(await this.buildAnchorProvider(a.accountAddress).connection.getLatestBlockhash()).blockhash,d.feePayer=new Nt.PublicKey(a.accountAddress),await Jn(d,a.txFeeParams,this.solanaRpcUrl),d}async buildRawTransactionWithdraw(a){let{bridge:r,accounts:o,preInstructions:s}=await this.prepareDataForTransaction(a),d=await r.methods.withdraw(new cn.BN(a.amount)).accounts(o).preInstructions(s).transaction();return d.recentBlockhash=(await this.buildAnchorProvider(a.accountAddress).connection.getLatestBlockhash()).blockhash,d.feePayer=new Nt.PublicKey(a.accountAddress),await Jn(d,a.txFeeParams,this.solanaRpcUrl),d}async buildRawTransactionClaimRewards(a){let{bridge:r,accounts:o,preInstructions:s}=await this.prepareDataForTransaction(a),d=await r.methods.claimRewards().accounts(o).preInstructions(s).transaction();return d.recentBlockhash=(await this.buildAnchorProvider(a.accountAddress).connection.getLatestBlockhash()).blockhash,d.feePayer=new Nt.PublicKey(a.accountAddress),await Jn(d,a.txFeeParams,this.solanaRpcUrl),d}async prepareDataForTransaction(a){let r=this.buildAnchorProvider(a.accountAddress),o=this.getBridge(a.token.bridgeAddress,r),{accounts:s,preInstructions:d}=await this._getLPTransactionData(o,a.token.poolAddress,a.accountAddress,r);return{bridge:o,accounts:s,preInstructions:d}}getBridge(a,r){return new cn.Program({...pn,address:a},r)}buildAnchorProvider(a){let r=new Nt.Connection(this.solanaRpcUrl,"confirmed"),o=new Nt.PublicKey(a);return new cn.AnchorProvider(r,{publicKey:o},{preflightCommitment:"confirmed",commitment:"confirmed"})}async _getLPTransactionData(a,r,o,s){let d=new Nt.PublicKey(o),c=await lt(a.programId),g=await un(a.programId),l=new Nt.PublicKey(r),u=(await a.account.pool.fetch(l)).mint,m=_e(d,u),y=await Kt(u,a.programId),v=await go(d,u,a.programId),C=[cn.web3.ComputeBudgetProgram.setComputeUnitLimit({units:1e6})];try{await On(m,s)}catch{let h=(0,Ag.createAssociatedTokenAccountInstruction)(d,m,d,u);C.push(h)}try{await a.account.userDeposit.fetch(v)}catch{let h=await a.methods.initDepositAccount().accountsPartial({mint:u,user:d,userDeposit:v}).instruction();C.push(h)}return{accounts:{mint:u,user:d,config:c,pool:l,bridgeAuthority:g,userDeposit:v,userToken:m,bridgeToken:y},preInstructions:C}}};var pT=require("@stellar/stellar-sdk");var e=require("@stellar/stellar-sdk"),_u=e.contract.Spec,$u=e.contract.Client;var Wr=class extends $u{constructor(a){super(new _u(["AAAAAAAAAAAAAAAKaW5pdGlhbGl6ZQAAAAAABwAAAAAAAAAFYWRtaW4AAAAAAAATAAAAAAAAAAZicmlkZ2UAAAAAABMAAAAAAAAAAWEAAAAAAAAKAAAAAAAAAAV0b2tlbgAAAAAAABMAAAAAAAAADGZlZV9zaGFyZV9icAAAAAoAAAAAAAAAFGJhbGFuY2VfcmF0aW9fbWluX2JwAAAACgAAAAAAAAASYWRtaW5fZmVlX3NoYXJlX2JwAAAAAAAKAAAAAQAAA+kAAAPtAAAAAAAAAAM=","AAAAAAAAAAAAAAAHZGVwb3NpdAAAAAACAAAAAAAAAAZzZW5kZXIAAAAAABMAAAAAAAAABmFtb3VudAAAAAAACgAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAId2l0aGRyYXcAAAACAAAAAAAAAAZzZW5kZXIAAAAAABMAAAAAAAAACWFtb3VudF9scAAAAAAAAAoAAAABAAAD6QAAA+0AAAAAAAAAAw==","AAAAAAAAAAAAAAANc3dhcF90b192X3VzZAAAAAAAAAMAAAAAAAAABHVzZXIAAAATAAAAAAAAAAZhbW91bnQAAAAAAAoAAAAAAAAACHplcm9fZmVlAAAAAQAAAAEAAAPpAAAACgAAAAM=","AAAAAAAAAAAAAAAPc3dhcF9mcm9tX3ZfdXNkAAAAAAQAAAAAAAAABHVzZXIAAAATAAAAAAAAAAt2dXNkX2Ftb3VudAAAAAAKAAAAAAAAABJyZWNlaXZlX2Ftb3VudF9taW4AAAAAAAoAAAAAAAAACHplcm9fZmVlAAAAAQAAAAEAAAPpAAAACgAAAAM=","AAAAAAAAAAAAAAANY2xhaW1fcmV3YXJkcwAAAAAAAAEAAAAAAAAABnNlbmRlcgAAAAAAEwAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAdgYWRtaW5gAAAAAA1zZXRfZmVlX3NoYXJlAAAAAAAAAQAAAAAAAAAMZmVlX3NoYXJlX2JwAAAACgAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAWYWRqdXN0X3RvdGFsX2xwX2Ftb3VudAAAAAAAAAAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAYc2V0X2JhbGFuY2VfcmF0aW9fbWluX2JwAAAAAQAAAAAAAAAUYmFsYW5jZV9yYXRpb19taW5fYnAAAAAKAAAAAQAAA+kAAAPtAAAAAAAAAAM=","AAAAAAAAAAAAAAAMc3RvcF9kZXBvc2l0AAAAAAAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAANc3RhcnRfZGVwb3NpdAAAAAAAAAAAAAABAAAD6QAAA+0AAAAAAAAAAw==","AAAAAAAAAAAAAAANc3RvcF93aXRoZHJhdwAAAAAAAAAAAAABAAAD6QAAA+0AAAAAAAAAAw==","AAAAAAAAAAAAAAAOc3RhcnRfd2l0aGRyYXcAAAAAAAAAAAABAAAD6QAAA+0AAAAAAAAAAw==","AAAAAAAAAAAAAAASc2V0X3N0b3BfYXV0aG9yaXR5AAAAAAABAAAAAAAAAA5zdG9wX2F1dGhvcml0eQAAAAAAEwAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAKc2V0X2JyaWRnZQAAAAAAAQAAAAAAAAAGYnJpZGdlAAAAAAATAAAAAQAAA+kAAAPtAAAAAAAAAAM=","AAAAAAAAAAAAAAAJc2V0X2FkbWluAAAAAAAAAQAAAAAAAAAJbmV3X2FkbWluAAAAAAAAEwAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAATc2V0X2FkbWluX2ZlZV9zaGFyZQAAAAABAAAAAAAAABJhZG1pbl9mZWVfc2hhcmVfYnAAAAAAAAoAAAABAAAD6QAAA+0AAAAAAAAAAw==","AAAAAAAAAAAAAAAPY2xhaW1fYWRtaW5fZmVlAAAAAAAAAAABAAAD6QAAA+0AAAAAAAAAAw==","AAAAAAAAAAZgdmlld2AAAAAAAA5wZW5kaW5nX3Jld2FyZAAAAAAAAQAAAAAAAAAEdXNlcgAAABMAAAABAAAD6QAAAAoAAAAD","AAAAAAAAAAAAAAAIZ2V0X3Bvb2wAAAAAAAAAAQAAA+kAAAfQAAAABFBvb2wAAAAD","AAAAAAAAAAAAAAAJZ2V0X2FkbWluAAAAAAAAAAAAAAEAAAPpAAAAEwAAAAM=","AAAAAAAAAAAAAAASZ2V0X3N0b3BfYXV0aG9yaXR5AAAAAAAAAAAAAQAAA+kAAAATAAAAAw==","AAAAAAAAAAAAAAAKZ2V0X2JyaWRnZQAAAAAAAAAAAAEAAAPpAAAAEwAAAAM=","AAAAAAAAAAAAAAAQZ2V0X3VzZXJfZGVwb3NpdAAAAAEAAAAAAAAABHVzZXIAAAATAAAAAQAAA+kAAAfQAAAAC1VzZXJEZXBvc2l0AAAAAAM=","AAAAAAAAAAAAAAAHdXBncmFkZQAAAAABAAAAAAAAAA1uZXdfd2FzbV9oYXNoAAAAAAAD7gAAACAAAAABAAAD6QAAA+0AAAAAAAAAAw==","AAAAAQAAAAAAAAAAAAAAD1N3YXBwZWRGcm9tVlVzZAAAAAAFAAAAAAAAAAZhbW91bnQAAAAAAAoAAAAAAAAAA2ZlZQAAAAAKAAAAAAAAAAlyZWNpcGllbnQAAAAAAAATAAAAAAAAAAV0b2tlbgAAAAAAABMAAAAAAAAAC3Z1c2RfYW1vdW50AAAAAAo=","AAAAAQAAAAAAAAAAAAAADVN3YXBwZWRUb1ZVc2QAAAAAAAAFAAAAAAAAAAZhbW91bnQAAAAAAAoAAAAAAAAAA2ZlZQAAAAAKAAAAAAAAAAZzZW5kZXIAAAAAABMAAAAAAAAABXRva2VuAAAAAAAAEwAAAAAAAAALdnVzZF9hbW91bnQAAAAACg==","AAAAAQAAAAAAAAAAAAAAB0RlcG9zaXQAAAAAAgAAAAAAAAAGYW1vdW50AAAAAAAKAAAAAAAAAAR1c2VyAAAAEw==","AAAAAQAAAAAAAAAAAAAACFdpdGhkcmF3AAAAAgAAAAAAAAAGYW1vdW50AAAAAAAKAAAAAAAAAAR1c2VyAAAAEw==","AAAAAQAAAAAAAAAAAAAADlJld2FyZHNDbGFpbWVkAAAAAAACAAAAAAAAAAZhbW91bnQAAAAAAAoAAAAAAAAABHVzZXIAAAAT","AAAAAQAAAAAAAAAAAAAABkJyaWRnZQAAAAAAAQAAAAAAAAABMAAAAAAAABM=","AAAAAgAAAAAAAAAAAAAAB0RhdGFLZXkAAAAAAQAAAAEAAAAAAAAAC1VzZXJEZXBvc2l0AAAAAAEAAAAT","AAAAAQAAAAAAAAAAAAAABFBvb2wAAAAPAAAAAAAAAAFhAAAAAAAACgAAAAAAAAAWYWNjX3Jld2FyZF9wZXJfc2hhcmVfcAAAAAAACgAAAAAAAAAQYWRtaW5fZmVlX2Ftb3VudAAAAAoAAAAAAAAAEmFkbWluX2ZlZV9zaGFyZV9icAAAAAAACgAAAAAAAAAUYmFsYW5jZV9yYXRpb19taW5fYnAAAAAKAAAAAAAAAAtjYW5fZGVwb3NpdAAAAAABAAAAAAAAAAxjYW5fd2l0aGRyYXcAAAABAAAAAAAAAAFkAAAAAAAACgAAAAAAAAAIZGVjaW1hbHMAAAAEAAAAAAAAAAxmZWVfc2hhcmVfYnAAAAAKAAAAAAAAAAhyZXNlcnZlcwAAAAoAAAAAAAAABXRva2VuAAAAAAAAEwAAAAAAAAANdG9rZW5fYmFsYW5jZQAAAAAAAAoAAAAAAAAAD3RvdGFsX2xwX2Ftb3VudAAAAAAKAAAAAAAAAA12X3VzZF9iYWxhbmNlAAAAAAAACg==","AAAAAQAAAAAAAAAAAAAAC1VzZXJEZXBvc2l0AAAAAAIAAAAAAAAACWxwX2Ftb3VudAAAAAAAAAoAAAAAAAAAC3Jld2FyZF9kZWJ0AAAAAAo=","AAAAAQAAAAAAAAAAAAAABUFkbWluAAAAAAAAAQAAAAAAAAABMAAAAAAAABM=","AAAAAQAAAAAAAAAAAAAAEEdhc09yYWNsZUFkZHJlc3MAAAABAAAAAAAAAAEwAAAAAAAAEw==","AAAAAQAAAAAAAAAAAAAACEdhc1VzYWdlAAAAAQAAAAAAAAABMAAAAAAAA+wAAAAEAAAACg==","AAAAAQAAAAAAAAAAAAAAC05hdGl2ZVRva2VuAAAAAAEAAAAAAAAAATAAAAAAAAAT","AAAAAQAAAAAAAAAAAAAADVN0b3BBdXRob3JpdHkAAAAAAAABAAAAAAAAAAEwAAAAAAAAEw==","AAAABAAAAAAAAAAAAAAABUVycm9yAAAAAAAAKAAAAAAAAAANVW5pbXBsZW1lbnRlZAAAAAAAAAAAAAAAAAAAC0luaXRpYWxpemVkAAAAAAEAAAAAAAAADVVuaW5pdGlhbGl6ZWQAAAAAAAACAAAAAAAAAAxVbmF1dGhvcml6ZWQAAAADAAAAAAAAAApJbnZhbGlkQXJnAAAAAAAEAAAAAAAAAA5JbnZhbGlkQ2hhaW5JZAAAAAAABQAAAAAAAAATSW52YWxpZE90aGVyQ2hhaW5JZAAAAAAGAAAAAAAAAA5HYXNVc2FnZU5vdFNldAAAAAAABwAAAAAAAAANQnJva2VuQWRkcmVzcwAAAAAAAAgAAAAAAAAACE5vdEZvdW5kAAAACQAAAAAAAAAYVG9rZW5JbnN1ZmZpY2llbnRCYWxhbmNlAAAACgAAAAAAAAAKQ2FzdEZhaWxlZAAAAAAACwAAAAAAAAAMVTI1Nk92ZXJmbG93AAAADAAAAAAAAAAKWmVyb0Ftb3VudAAAAAAAZwAAAAAAAAAMUG9vbE92ZXJmbG93AAAAaAAAAAAAAAALWmVyb0NoYW5nZXMAAAAAaQAAAAAAAAARUmVzZXJ2ZXNFeGhhdXN0ZWQAAAAAAABqAAAAAAAAABpJbnN1ZmZpY2llbnRSZWNlaXZlZEFtb3VudAAAAAAAawAAAAAAAAAUQmFsYW5jZVJhdGlvRXhjZWVkZWQAAABsAAAAAAAAAAlGb3JiaWRkZW4AAAAAAABtAAAAAAAAABlVbmF1dGhvcml6ZWRTdG9wQXV0aG9yaXR5AAAAAAAAywAAAAAAAAAOU3dhcFByb2hpYml0ZWQAAAAAAMwAAAAAAAAAEkFtb3VudFRvb0xvd0ZvckZlZQAAAAAAzQAAAAAAAAAWQnJpZGdlVG9UaGVaZXJvQWRkcmVzcwAAAAAAzgAAAAAAAAAORW1wdHlSZWNpcGllbnQAAAAAAM8AAAAAAAAAE1NvdXJjZU5vdFJlZ2lzdGVyZWQAAAAA0AAAAAAAAAAVV3JvbmdEZXN0aW5hdGlvbkNoYWluAAAAAAAA0QAAAAAAAAATVW5rbm93bkFub3RoZXJDaGFpbgAAAADSAAAAAAAAABFUb2tlbnNBbHJlYWR5U2VudAAAAAAAANMAAAAAAAAAEE1lc3NhZ2VQcm9jZXNzZWQAAADUAAAAAAAAAAxOb3RFbm91Z2hGZWUAAADWAAAAAAAAAAlOb01lc3NhZ2UAAAAAAADXAAAAAAAAAA1Ob1JlY2VpdmVQb29sAAAAAAAA2AAAAAAAAAAGTm9Qb29sAAAAAADZAAAAAAAAABNVbmtub3duQW5vdGhlclRva2VuAAAAANoAAAAAAAAAD1dyb25nQnl0ZUxlbmd0aAAAAAEsAAAAAAAAAApIYXNNZXNzYWdlAAAAAAEtAAAAAAAAABdJbnZhbGlkUHJpbWFyeVNpZ25hdHVyZQAAAAEuAAAAAAAAABlJbnZhbGlkU2Vjb25kYXJ5U2lnbmF0dXJlAAAAAAABLwAAAAAAAAARTm9HYXNEYXRhRm9yQ2hhaW4AAAAAAAGQ"]),a);this.options=a}options;fromJSON={initialize:this.txFromJSON,deposit:this.txFromJSON,withdraw:this.txFromJSON,swap_to_v_usd:this.txFromJSON,swap_from_v_usd:this.txFromJSON,claim_rewards:this.txFromJSON,set_fee_share:this.txFromJSON,adjust_total_lp_amount:this.txFromJSON,set_balance_ratio_min_bp:this.txFromJSON,stop_deposit:this.txFromJSON,start_deposit:this.txFromJSON,stop_withdraw:this.txFromJSON,start_withdraw:this.txFromJSON,set_stop_authority:this.txFromJSON,set_bridge:this.txFromJSON,set_admin:this.txFromJSON,set_admin_fee_share:this.txFromJSON,claim_admin_fee:this.txFromJSON,pending_reward:this.txFromJSON,get_pool:this.txFromJSON,get_admin:this.txFromJSON,get_stop_authority:this.txFromJSON,get_bridge:this.txFromJSON,get_user_deposit:this.txFromJSON,upgrade:this.txFromJSON}};var ws=require("@stellar/stellar-sdk"),ug=ws.rpc.Api;function da(i){let{simulation:n,options:a}=i;if(!n)throw new Error("Soroban assembled transaction does not have simulation");if(ug.isSimulationSuccess(n))return n.result==null?void 0:a.parseResultXdr(n.result.retval);throw new Error(n.error)}function ca(i){let{simulation:n}=i;if(!n)throw new Error("Soroban assembled transaction does not have simulation");return ug.isSimulationError(n)}var Nr=class extends xe{constructor(a,r,o){super();this.nodeRpcUrlsConfig=a;this.params=r;this.api=o}nodeRpcUrlsConfig;params;api;chainType="SRB";P=48;async getUserBalanceInfo(a,r){let s=await this.getContract(r.poolAddress).get_user_deposit({user:a});if(ca(s))throw new f;let d=da(s);if(!d)throw new f;let c=d.unwrap();return new Ye({lpAmount:c.lp_amount.toString(),rewardDebt:c.reward_debt.toString()})}async getPoolInfoFromChain(a){let o=await this.getContract(a.poolAddress).get_pool();if(ca(o))throw new f;let s=da(o);if(!s)throw new f;let d=s.unwrap();return{aValue:d.a.toString(),accRewardPerShareP:d.acc_reward_per_share_p.toString(),dValue:d.d.toString(),tokenBalance:d.token_balance.toString(),p:this.P,totalLpAmount:d.total_lp_amount.toString(),vUsdBalance:d.v_usd_balance.toString(),imbalance:We({tokenBalance:d.token_balance.toString(),vUsdBalance:d.v_usd_balance.toString()})}}async buildRawTransactionDeposit(a){return(await this.getContract(a.token.poolAddress,a.accountAddress).deposit({sender:a.accountAddress,amount:BigInt(a.amount)})).toXDR()}async buildRawTransactionWithdraw(a){return(await this.getContract(a.token.poolAddress,a.accountAddress).withdraw({sender:a.accountAddress,amount_lp:BigInt(a.amount)})).toXDR()}async buildRawTransactionClaimRewards(a){return(await this.getContract(a.token.poolAddress,a.accountAddress).claim_rewards({sender:a.accountAddress})).toXDR()}getContract(a,r){let o={publicKey:r,contractId:a,networkPassphrase:this.params.sorobanNetworkPassphrase,rpcUrl:this.nodeRpcUrlsConfig.getNodeRpcUrl("SRB")};return new Wr(o)}};var vn=require("@clarigen/core"),pg=require("@stacks/network"),De=require("@stacks/transactions"),mg=require("big.js");var Fr=class extends xe{constructor(a,r,o){super();this.nodeRpcUrl=a;this.params=r;this.api=o;let s=(0,pg.createNetwork)({network:this.params.stxIsTestnet?"testnet":"mainnet",client:{baseUrl:this.nodeRpcUrl},apiKey:this.params.stxHeroApiKey});this.client=new vn.ClarigenClient(s,this.params.stxHeroApiKey)}nodeRpcUrl;params;api;chainType="STX";P=48;A="20";client;async getUserBalanceInfo(a,r){let o=(0,vn.contractFactory)(At.pool,r.poolAddress),s=await this.client.ro(o.getLpBalance({user:a})),d=await this.client.ro(o.getUserRewardDebt({user:a}));return new Ye({lpAmount:s.toString(),rewardDebt:d.toString()})}async getPoolInfoFromChain(a){let r=(0,vn.contractFactory)(At.pool,a.poolAddress),[o,s,d,c,g]=await Promise.all([this.client.ro(r.getD()),this.client.ro(r.getTokenBalance()),this.client.ro(r.getVusdBalance()),this.client.ro(r.getLpTotalSupply()),this.client.ro(r.getAccRewardPerShareP())]),l=o.toString(),A=s.toString(),u=d.toString(),m=c.toString(),y=g.toString();if(l&&A&&u&&m&&y){let v=We({tokenBalance:A,vUsdBalance:u});return{aValue:this.A,dValue:l,tokenBalance:A,vUsdBalance:u,totalLpAmount:m,accRewardPerShareP:y,p:this.P,imbalance:v}}throw new f("Unable to pool info from chain")}async buildRawTransactionDeposit(a){let r=(0,vn.contractFactory)(At.pool,a.token.poolAddress),{contractAddress:o,contractName:s,functionName:d,functionArgs:c}=r.deposit({amount:BigInt(a.amount),ftRef:a.token.tokenAddress}),g=(0,De.makeRandomPrivKey)(),l=(0,De.privateKeyToPublic)(g),A=jt(a.amount,"lte",a.accountAddress,a.token.tokenAddress,Et(a.token)),u=jt(0,"gte",a.token.poolAddress,a.token.tokenAddress,Et(a.token)),m={contractAddress:o,contractName:s,functionName:d,functionArgs:c,publicKey:l,validateWithAbi:!0,network:this.client.network,postConditions:[A,u],postConditionMode:De.PostConditionMode.Deny};return(await(0,De.makeUnsignedContractCall)(m)).serialize()}async buildRawTransactionWithdraw(a){let r=(0,vn.contractFactory)(At.pool,a.token.poolAddress),{contractAddress:o,contractName:s,functionName:d,functionArgs:c}=r.withdraw({amountLp:BigInt(a.amount),ftRef:a.token.tokenAddress}),g=(0,De.makeRandomPrivKey)(),l=(0,De.privateKeyToPublic)(g),A=jt(Ke(a.amount,a.token.decimals).toFixed(0,mg.Big.roundDown),"gte",a.token.poolAddress,a.token.tokenAddress,Et(a.token)),u={contractAddress:o,contractName:s,functionName:d,functionArgs:c,publicKey:l,validateWithAbi:!0,network:this.client.network,postConditions:[A],postConditionMode:De.PostConditionMode.Deny};return(await(0,De.makeUnsignedContractCall)(u)).serialize()}async buildRawTransactionClaimRewards(a){let r=(0,vn.contractFactory)(At.pool,a.token.poolAddress),{contractAddress:o,contractName:s,functionName:d,functionArgs:c}=r.claimRewards({ftRef:a.token.tokenAddress}),g=(0,De.makeRandomPrivKey)(),l=(0,De.privateKeyToPublic)(g),A=jt(0,"gte",a.token.poolAddress,a.token.tokenAddress,Et(a.token)),u={contractAddress:o,contractName:s,functionName:d,functionArgs:c,publicKey:l,validateWithAbi:!0,network:this.client.network,postConditions:[A],postConditionMode:De.PostConditionMode.Deny};return(await(0,De.makeUnsignedContractCall)(u)).serialize()}};function oi(i){return i=X(i),i.startsWith("0x2::balance::Balance<")}var Qe=class i{__StructClass=!0;static $typeName="0x2::balance::Balance";static $numTypeParams=1;static $isPhantom=[!0];$typeName=i.$typeName;$fullTypeName;$typeArgs;$isPhantom=i.$isPhantom;value;constructor(n,a){this.$fullTypeName=ie(i.$typeName,...n),this.$typeArgs=n,this.value=a.value}static reified(n){let a=i.bcs;return{get typeName(){return i.$typeName},get fullTypeName(){return ie(i.$typeName,M(n))},get typeArgs(){return[M(n)]},isPhantom:i.$isPhantom,reifiedTypeArgs:[n],fromFields:r=>i.fromFields(n,r),fromFieldsWithTypes:r=>i.fromFieldsWithTypes(n,r),fromBcs:r=>i.fromFields(n,a.parse(r)),bcs:a,fromJSONField:r=>i.fromJSONField(n,r),fromJSON:r=>i.fromJSON(n,r),fromCoreObject:r=>i.fromCoreObject(n,r),fromSuiParsedData:r=>i.fromSuiParsedData(n,r),fromSuiObjectData:r=>i.fromSuiObjectData(n,r),fetch:async(r,o)=>i.fetch(r,n,o),new:r=>new i([M(n)],r),kind:"StructClassReified"}}static get r(){return i.reified}static phantom(n){return he(i.reified(n))}static get p(){return i.phantom}static instantiateBcs(){return B.struct("Balance",{value:B.u64()})}static cachedBcs=null;static get bcs(){return i.cachedBcs||(i.cachedBcs=i.instantiateBcs()),i.cachedBcs}static fromFields(n,a){return i.reified(n).new({value:ee("u64",a.value)})}static fromFieldsWithTypes(n,a){if(!oi(a.type))throw new Error("not a Balance type");return Jt(a,[n]),i.reified(n).new({value:Q("u64",a.fields.value)})}static fromBcs(n,a){return i.fromFields(n,i.bcs.parse(a))}toJSONField(){return{value:this.value.toString()}}toJSON(){return{$typeName:this.$typeName,$typeArgs:this.$typeArgs,...this.toJSONField()}}static fromJSONField(n,a){return i.reified(n).new({value:K("u64",a.value)})}static fromJSON(n,a){if(a.$typeName!==i.$typeName)throw new Error(`not a Balance json object: expected '${i.$typeName}' but got '${a.$typeName}'`);return wt(ie(i.$typeName,M(n)),a.$typeArgs,[n]),i.fromJSONField(n,a)}static fromCoreObject(n,a){if(!oi(a.type))throw new Error(`object at ${a.objectId} is not a Balance object`);let r=me(a.type).typeArgs;if(r.length!==1)throw new Error(`type argument mismatch: expected 1 type arguments but got '${r.length}'`);for(let o=0;o<1;o++){let s=X(r[o]),d=X(M([n][o]));if(s!==d)throw new Error(`type argument mismatch at position ${o}: expected '${d}' but got '${s}'`)}return i.fromBcs(n,a.content)}static fromSuiParsedData(n,a){if(a.dataType!=="moveObject")throw new Error("not an object");if(!oi(a.type))throw new Error(`object at ${a.fields.id} is not a Balance object`);return i.fromFieldsWithTypes(n,a)}static fromSuiObjectData(n,a){if(a.bcs){if(a.bcs.dataType!=="moveObject"||!oi(a.bcs.type))throw new Error("object at is not a Balance object");let r=me(a.bcs.type).typeArgs;if(r.length!==1)throw new Error(`type argument mismatch: expected 1 type arguments but got '${r.length}'`);for(let o=0;o<1;o++){let s=X(r[o]),d=X(M([n][o]));if(s!==d)throw new Error(`type argument mismatch at position ${o}: expected '${d}' but got '${s}'`)}return i.fromBcs(n,(0,ce.fromBase64)(a.bcs.bcsBytes))}if(a.content)return i.fromSuiParsedData(n,a.content);throw new Error("Both `bcs` and `content` fields are missing from the data. Include `showBcs` or `showContent` in the request.")}static async fetch(n,a,r){let{object:o}=await n.core.getObject({objectId:r,include:{content:!0}});if(!oi(o.type))throw new Error(`object at id ${r} is not a Balance object`);let s=me(o.type).typeArgs;if(s.length!==1)throw new Error(`type argument mismatch: expected 1 type arguments but got '${s.length}'`);for(let d=0;d<1;d++){let c=X(s[d]),g=X(M([a][d]));if(c!==g)throw new Error(`type argument mismatch at position ${d}: expected '${g}' but got '${c}'`)}return i.fromBcs(a,o.content)}};function si(i){return i=X(i),i.startsWith(`${ct("bridge","pool_rewards::PoolRewards")}::pool_rewards::PoolRewards<`)}var Vn=class i{__StructClass=!0;static get $typeName(){return`${ct("bridge","pool_rewards::PoolRewards")}::pool_rewards::PoolRewards`}static $numTypeParams=1;static $isPhantom=[!0];$typeName=i.$typeName;$fullTypeName;$typeArgs;$isPhantom=i.$isPhantom;accRewardPerShareP;adminFeeShareBp;adminFee;rewards;lpSupply;constructor(n,a){this.$fullTypeName=ie(i.$typeName,...n),this.$typeArgs=n,this.accRewardPerShareP=a.accRewardPerShareP,this.adminFeeShareBp=a.adminFeeShareBp,this.adminFee=a.adminFee,this.rewards=a.rewards,this.lpSupply=a.lpSupply}static reified(n){let a=i.bcs;return{get typeName(){return i.$typeName},get fullTypeName(){return ie(i.$typeName,M(n))},get typeArgs(){return[M(n)]},isPhantom:i.$isPhantom,reifiedTypeArgs:[n],fromFields:r=>i.fromFields(n,r),fromFieldsWithTypes:r=>i.fromFieldsWithTypes(n,r),fromBcs:r=>i.fromFields(n,a.parse(r)),bcs:a,fromJSONField:r=>i.fromJSONField(n,r),fromJSON:r=>i.fromJSON(n,r),fromCoreObject:r=>i.fromCoreObject(n,r),fromSuiParsedData:r=>i.fromSuiParsedData(n,r),fromSuiObjectData:r=>i.fromSuiObjectData(n,r),fetch:async(r,o)=>i.fetch(r,n,o),new:r=>new i([M(n)],r),kind:"StructClassReified"}}static get r(){return i.reified}static phantom(n){return he(i.reified(n))}static get p(){return i.phantom}static instantiateBcs(){return B.struct("PoolRewards",{acc_reward_per_share_p:B.u128(),admin_fee_share_bp:B.u64(),admin_fee:Qe.bcs,rewards:Qe.bcs,lp_supply:B.u64()})}static cachedBcs=null;static get bcs(){return i.cachedBcs||(i.cachedBcs=i.instantiateBcs()),i.cachedBcs}static fromFields(n,a){return i.reified(n).new({accRewardPerShareP:ee("u128",a.acc_reward_per_share_p),adminFeeShareBp:ee("u64",a.admin_fee_share_bp),adminFee:ee(Qe.reified(n),a.admin_fee),rewards:ee(Qe.reified(n),a.rewards),lpSupply:ee("u64",a.lp_supply)})}static fromFieldsWithTypes(n,a){if(!si(a.type))throw new Error("not a PoolRewards type");return Jt(a,[n]),i.reified(n).new({accRewardPerShareP:Q("u128",a.fields.acc_reward_per_share_p),adminFeeShareBp:Q("u64",a.fields.admin_fee_share_bp),adminFee:Q(Qe.reified(n),a.fields.admin_fee),rewards:Q(Qe.reified(n),a.fields.rewards),lpSupply:Q("u64",a.fields.lp_supply)})}static fromBcs(n,a){return i.fromFields(n,i.bcs.parse(a))}toJSONField(){return{accRewardPerShareP:this.accRewardPerShareP.toString(),adminFeeShareBp:this.adminFeeShareBp.toString(),adminFee:this.adminFee.toJSONField(),rewards:this.rewards.toJSONField(),lpSupply:this.lpSupply.toString()}}toJSON(){return{$typeName:this.$typeName,$typeArgs:this.$typeArgs,...this.toJSONField()}}static fromJSONField(n,a){return i.reified(n).new({accRewardPerShareP:K("u128",a.accRewardPerShareP),adminFeeShareBp:K("u64",a.adminFeeShareBp),adminFee:K(Qe.reified(n),a.adminFee),rewards:K(Qe.reified(n),a.rewards),lpSupply:K("u64",a.lpSupply)})}static fromJSON(n,a){if(a.$typeName!==i.$typeName)throw new Error(`not a PoolRewards json object: expected '${i.$typeName}' but got '${a.$typeName}'`);return wt(ie(i.$typeName,M(n)),a.$typeArgs,[n]),i.fromJSONField(n,a)}static fromCoreObject(n,a){if(!si(a.type))throw new Error(`object at ${a.objectId} is not a PoolRewards object`);let r=me(a.type).typeArgs;if(r.length!==1)throw new Error(`type argument mismatch: expected 1 type arguments but got '${r.length}'`);for(let o=0;o<1;o++){let s=X(r[o]),d=X(M([n][o]));if(s!==d)throw new Error(`type argument mismatch at position ${o}: expected '${d}' but got '${s}'`)}return i.fromBcs(n,a.content)}static fromSuiParsedData(n,a){if(a.dataType!=="moveObject")throw new Error("not an object");if(!si(a.type))throw new Error(`object at ${a.fields.id} is not a PoolRewards object`);return i.fromFieldsWithTypes(n,a)}static fromSuiObjectData(n,a){if(a.bcs){if(a.bcs.dataType!=="moveObject"||!si(a.bcs.type))throw new Error("object at is not a PoolRewards object");let r=me(a.bcs.type).typeArgs;if(r.length!==1)throw new Error(`type argument mismatch: expected 1 type arguments but got '${r.length}'`);for(let o=0;o<1;o++){let s=X(r[o]),d=X(M([n][o]));if(s!==d)throw new Error(`type argument mismatch at position ${o}: expected '${d}' but got '${s}'`)}return i.fromBcs(n,(0,ce.fromBase64)(a.bcs.bcsBytes))}if(a.content)return i.fromSuiParsedData(n,a.content);throw new Error("Both `bcs` and `content` fields are missing from the data. Include `showBcs` or `showContent` in the request.")}static async fetch(n,a,r){let{object:o}=await n.core.getObject({objectId:r,include:{content:!0}});if(!si(o.type))throw new Error(`object at id ${r} is not a PoolRewards object`);let s=me(o.type).typeArgs;if(s.length!==1)throw new Error(`type argument mismatch: expected 1 type arguments but got '${s.length}'`);for(let d=0;d<1;d++){let c=X(s[d]),g=X(M([a][d]));if(c!==g)throw new Error(`type argument mismatch at position ${d}: expected '${g}' but got '${c}'`)}return i.fromBcs(a,o.content)}};function di(i){return i=X(i),i.startsWith(`${ct("bridge","pool_state::PoolState")}::pool_state::PoolState<`)}var Pn=class i{__StructClass=!0;static get $typeName(){return`${ct("bridge","pool_state::PoolState")}::pool_state::PoolState`}static $numTypeParams=1;static $isPhantom=[!0];$typeName=i.$typeName;$fullTypeName;$typeArgs;$isPhantom=i.$isPhantom;tokenBalance;vusdBalance;d;a;balanceRatioMinBp;constructor(n,a){this.$fullTypeName=ie(i.$typeName,...n),this.$typeArgs=n,this.tokenBalance=a.tokenBalance,this.vusdBalance=a.vusdBalance,this.d=a.d,this.a=a.a,this.balanceRatioMinBp=a.balanceRatioMinBp}static reified(n){let a=i.bcs;return{get typeName(){return i.$typeName},get fullTypeName(){return ie(i.$typeName,M(n))},get typeArgs(){return[M(n)]},isPhantom:i.$isPhantom,reifiedTypeArgs:[n],fromFields:r=>i.fromFields(n,r),fromFieldsWithTypes:r=>i.fromFieldsWithTypes(n,r),fromBcs:r=>i.fromFields(n,a.parse(r)),bcs:a,fromJSONField:r=>i.fromJSONField(n,r),fromJSON:r=>i.fromJSON(n,r),fromCoreObject:r=>i.fromCoreObject(n,r),fromSuiParsedData:r=>i.fromSuiParsedData(n,r),fromSuiObjectData:r=>i.fromSuiObjectData(n,r),fetch:async(r,o)=>i.fetch(r,n,o),new:r=>new i([M(n)],r),kind:"StructClassReified"}}static get r(){return i.reified}static phantom(n){return he(i.reified(n))}static get p(){return i.phantom}static instantiateBcs(){return B.struct("PoolState",{token_balance:B.u64(),vusd_balance:B.u64(),d:B.u64(),a:B.u64(),balance_ratio_min_bp:B.u64()})}static cachedBcs=null;static get bcs(){return i.cachedBcs||(i.cachedBcs=i.instantiateBcs()),i.cachedBcs}static fromFields(n,a){return i.reified(n).new({tokenBalance:ee("u64",a.token_balance),vusdBalance:ee("u64",a.vusd_balance),d:ee("u64",a.d),a:ee("u64",a.a),balanceRatioMinBp:ee("u64",a.balance_ratio_min_bp)})}static fromFieldsWithTypes(n,a){if(!di(a.type))throw new Error("not a PoolState type");return Jt(a,[n]),i.reified(n).new({tokenBalance:Q("u64",a.fields.token_balance),vusdBalance:Q("u64",a.fields.vusd_balance),d:Q("u64",a.fields.d),a:Q("u64",a.fields.a),balanceRatioMinBp:Q("u64",a.fields.balance_ratio_min_bp)})}static fromBcs(n,a){return i.fromFields(n,i.bcs.parse(a))}toJSONField(){return{tokenBalance:this.tokenBalance.toString(),vusdBalance:this.vusdBalance.toString(),d:this.d.toString(),a:this.a.toString(),balanceRatioMinBp:this.balanceRatioMinBp.toString()}}toJSON(){return{$typeName:this.$typeName,$typeArgs:this.$typeArgs,...this.toJSONField()}}static fromJSONField(n,a){return i.reified(n).new({tokenBalance:K("u64",a.tokenBalance),vusdBalance:K("u64",a.vusdBalance),d:K("u64",a.d),a:K("u64",a.a),balanceRatioMinBp:K("u64",a.balanceRatioMinBp)})}static fromJSON(n,a){if(a.$typeName!==i.$typeName)throw new Error(`not a PoolState json object: expected '${i.$typeName}' but got '${a.$typeName}'`);return wt(ie(i.$typeName,M(n)),a.$typeArgs,[n]),i.fromJSONField(n,a)}static fromCoreObject(n,a){if(!di(a.type))throw new Error(`object at ${a.objectId} is not a PoolState object`);let r=me(a.type).typeArgs;if(r.length!==1)throw new Error(`type argument mismatch: expected 1 type arguments but got '${r.length}'`);for(let o=0;o<1;o++){let s=X(r[o]),d=X(M([n][o]));if(s!==d)throw new Error(`type argument mismatch at position ${o}: expected '${d}' but got '${s}'`)}return i.fromBcs(n,a.content)}static fromSuiParsedData(n,a){if(a.dataType!=="moveObject")throw new Error("not an object");if(!di(a.type))throw new Error(`object at ${a.fields.id} is not a PoolState object`);return i.fromFieldsWithTypes(n,a)}static fromSuiObjectData(n,a){if(a.bcs){if(a.bcs.dataType!=="moveObject"||!di(a.bcs.type))throw new Error("object at is not a PoolState object");let r=me(a.bcs.type).typeArgs;if(r.length!==1)throw new Error(`type argument mismatch: expected 1 type arguments but got '${r.length}'`);for(let o=0;o<1;o++){let s=X(r[o]),d=X(M([n][o]));if(s!==d)throw new Error(`type argument mismatch at position ${o}: expected '${d}' but got '${s}'`)}return i.fromBcs(n,(0,ce.fromBase64)(a.bcs.bcsBytes))}if(a.content)return i.fromSuiParsedData(n,a.content);throw new Error("Both `bcs` and `content` fields are missing from the data. Include `showBcs` or `showContent` in the request.")}static async fetch(n,a,r){let{object:o}=await n.core.getObject({objectId:r,include:{content:!0}});if(!di(o.type))throw new Error(`object at id ${r} is not a PoolState object`);let s=me(o.type).typeArgs;if(s.length!==1)throw new Error(`type argument mismatch: expected 1 type arguments but got '${s.length}'`);for(let d=0;d<1;d++){let c=X(s[d]),g=X(M([a][d]));if(c!==g)throw new Error(`type argument mismatch at position ${d}: expected '${g}' but got '${c}'`)}return i.fromBcs(a,o.content)}};function ci(i){return i=X(i),i.startsWith(`${ct("bridge","pool::Pool")}::pool::Pool<`)}var Gr=class i{__StructClass=!0;static get $typeName(){return`${ct("bridge","pool::Pool")}::pool::Pool`}static $numTypeParams=1;static $isPhantom=[!0];$typeName=i.$typeName;$fullTypeName;$typeArgs;$isPhantom=i.$isPhantom;id;state;rewards;feeShareBp;canDeposit;canWithdraw;decimals;balance;constructor(n,a){this.$fullTypeName=ie(i.$typeName,...n),this.$typeArgs=n,this.id=a.id,this.state=a.state,this.rewards=a.rewards,this.feeShareBp=a.feeShareBp,this.canDeposit=a.canDeposit,this.canWithdraw=a.canWithdraw,this.decimals=a.decimals,this.balance=a.balance}static reified(n){let a=i.bcs;return{get typeName(){return i.$typeName},get fullTypeName(){return ie(i.$typeName,M(n))},get typeArgs(){return[M(n)]},isPhantom:i.$isPhantom,reifiedTypeArgs:[n],fromFields:r=>i.fromFields(n,r),fromFieldsWithTypes:r=>i.fromFieldsWithTypes(n,r),fromBcs:r=>i.fromFields(n,a.parse(r)),bcs:a,fromJSONField:r=>i.fromJSONField(n,r),fromJSON:r=>i.fromJSON(n,r),fromCoreObject:r=>i.fromCoreObject(n,r),fromSuiParsedData:r=>i.fromSuiParsedData(n,r),fromSuiObjectData:r=>i.fromSuiObjectData(n,r),fetch:async(r,o)=>i.fetch(r,n,o),new:r=>new i([M(n)],r),kind:"StructClassReified"}}static get r(){return i.reified}static phantom(n){return he(i.reified(n))}static get p(){return i.phantom}static instantiateBcs(){return B.struct("Pool",{id:bt.bcs,state:Pn.bcs,rewards:Vn.bcs,fee_share_bp:B.u64(),can_deposit:B.bool(),can_withdraw:B.bool(),decimals:B.u8(),balance:Qe.bcs})}static cachedBcs=null;static get bcs(){return i.cachedBcs||(i.cachedBcs=i.instantiateBcs()),i.cachedBcs}static fromFields(n,a){return i.reified(n).new({id:ee(bt.reified(),a.id),state:ee(Pn.reified(n),a.state),rewards:ee(Vn.reified(n),a.rewards),feeShareBp:ee("u64",a.fee_share_bp),canDeposit:ee("bool",a.can_deposit),canWithdraw:ee("bool",a.can_withdraw),decimals:ee("u8",a.decimals),balance:ee(Qe.reified(n),a.balance)})}static fromFieldsWithTypes(n,a){if(!ci(a.type))throw new Error("not a Pool type");return Jt(a,[n]),i.reified(n).new({id:Q(bt.reified(),a.fields.id),state:Q(Pn.reified(n),a.fields.state),rewards:Q(Vn.reified(n),a.fields.rewards),feeShareBp:Q("u64",a.fields.fee_share_bp),canDeposit:Q("bool",a.fields.can_deposit),canWithdraw:Q("bool",a.fields.can_withdraw),decimals:Q("u8",a.fields.decimals),balance:Q(Qe.reified(n),a.fields.balance)})}static fromBcs(n,a){return i.fromFields(n,i.bcs.parse(a))}toJSONField(){return{id:this.id,state:this.state.toJSONField(),rewards:this.rewards.toJSONField(),feeShareBp:this.feeShareBp.toString(),canDeposit:this.canDeposit,canWithdraw:this.canWithdraw,decimals:this.decimals,balance:this.balance.toJSONField()}}toJSON(){return{$typeName:this.$typeName,$typeArgs:this.$typeArgs,...this.toJSONField()}}static fromJSONField(n,a){return i.reified(n).new({id:K(bt.reified(),a.id),state:K(Pn.reified(n),a.state),rewards:K(Vn.reified(n),a.rewards),feeShareBp:K("u64",a.feeShareBp),canDeposit:K("bool",a.canDeposit),canWithdraw:K("bool",a.canWithdraw),decimals:K("u8",a.decimals),balance:K(Qe.reified(n),a.balance)})}static fromJSON(n,a){if(a.$typeName!==i.$typeName)throw new Error(`not a Pool json object: expected '${i.$typeName}' but got '${a.$typeName}'`);return wt(ie(i.$typeName,M(n)),a.$typeArgs,[n]),i.fromJSONField(n,a)}static fromCoreObject(n,a){if(!ci(a.type))throw new Error(`object at ${a.objectId} is not a Pool object`);let r=me(a.type).typeArgs;if(r.length!==1)throw new Error(`type argument mismatch: expected 1 type arguments but got '${r.length}'`);for(let o=0;o<1;o++){let s=X(r[o]),d=X(M([n][o]));if(s!==d)throw new Error(`type argument mismatch at position ${o}: expected '${d}' but got '${s}'`)}return i.fromBcs(n,a.content)}static fromSuiParsedData(n,a){if(a.dataType!=="moveObject")throw new Error("not an object");if(!ci(a.type))throw new Error(`object at ${a.fields.id} is not a Pool object`);return i.fromFieldsWithTypes(n,a)}static fromSuiObjectData(n,a){if(a.bcs){if(a.bcs.dataType!=="moveObject"||!ci(a.bcs.type))throw new Error("object at is not a Pool object");let r=me(a.bcs.type).typeArgs;if(r.length!==1)throw new Error(`type argument mismatch: expected 1 type arguments but got '${r.length}'`);for(let o=0;o<1;o++){let s=X(r[o]),d=X(M([n][o]));if(s!==d)throw new Error(`type argument mismatch at position ${o}: expected '${d}' but got '${s}'`)}return i.fromBcs(n,(0,ce.fromBase64)(a.bcs.bcsBytes))}if(a.content)return i.fromSuiParsedData(n,a.content);throw new Error("Both `bcs` and `content` fields are missing from the data. Include `showBcs` or `showContent` in the request.")}static async fetch(n,a,r){let{object:o}=await n.core.getObject({objectId:r,include:{content:!0}});if(!ci(o.type))throw new Error(`object at id ${r} is not a Pool object`);let s=me(o.type).typeArgs;if(s.length!==1)throw new Error(`type argument mismatch: expected 1 type arguments but got '${s.length}'`);for(let d=0;d<1;d++){let c=X(s[d]),g=X(M([a][d]));if(c!==g)throw new Error(`type argument mismatch at position ${d}: expected '${g}' but got '${c}'`)}return i.fromBcs(a,o.content)}};function gi(i){return i=X(i),i.startsWith(`${ct("bridge","user_deposit::UserDeposit")}::user_deposit::UserDeposit<`)}var Zr=class i{__StructClass=!0;static get $typeName(){return`${ct("bridge","user_deposit::UserDeposit")}::user_deposit::UserDeposit`}static $numTypeParams=1;static $isPhantom=[!0];$typeName=i.$typeName;$fullTypeName;$typeArgs;$isPhantom=i.$isPhantom;id;lpAmount;rewardDebt;constructor(n,a){this.$fullTypeName=ie(i.$typeName,...n),this.$typeArgs=n,this.id=a.id,this.lpAmount=a.lpAmount,this.rewardDebt=a.rewardDebt}static reified(n){let a=i.bcs;return{get typeName(){return i.$typeName},get fullTypeName(){return ie(i.$typeName,M(n))},get typeArgs(){return[M(n)]},isPhantom:i.$isPhantom,reifiedTypeArgs:[n],fromFields:r=>i.fromFields(n,r),fromFieldsWithTypes:r=>i.fromFieldsWithTypes(n,r),fromBcs:r=>i.fromFields(n,a.parse(r)),bcs:a,fromJSONField:r=>i.fromJSONField(n,r),fromJSON:r=>i.fromJSON(n,r),fromCoreObject:r=>i.fromCoreObject(n,r),fromSuiParsedData:r=>i.fromSuiParsedData(n,r),fromSuiObjectData:r=>i.fromSuiObjectData(n,r),fetch:async(r,o)=>i.fetch(r,n,o),new:r=>new i([M(n)],r),kind:"StructClassReified"}}static get r(){return i.reified}static phantom(n){return he(i.reified(n))}static get p(){return i.phantom}static instantiateBcs(){return B.struct("UserDeposit",{id:bt.bcs,lp_amount:B.u64(),reward_debt:B.u64()})}static cachedBcs=null;static get bcs(){return i.cachedBcs||(i.cachedBcs=i.instantiateBcs()),i.cachedBcs}static fromFields(n,a){return i.reified(n).new({id:ee(bt.reified(),a.id),lpAmount:ee("u64",a.lp_amount),rewardDebt:ee("u64",a.reward_debt)})}static fromFieldsWithTypes(n,a){if(!gi(a.type))throw new Error("not a UserDeposit type");return Jt(a,[n]),i.reified(n).new({id:Q(bt.reified(),a.fields.id),lpAmount:Q("u64",a.fields.lp_amount),rewardDebt:Q("u64",a.fields.reward_debt)})}static fromBcs(n,a){return i.fromFields(n,i.bcs.parse(a))}toJSONField(){return{id:this.id,lpAmount:this.lpAmount.toString(),rewardDebt:this.rewardDebt.toString()}}toJSON(){return{$typeName:this.$typeName,$typeArgs:this.$typeArgs,...this.toJSONField()}}static fromJSONField(n,a){return i.reified(n).new({id:K(bt.reified(),a.id),lpAmount:K("u64",a.lpAmount),rewardDebt:K("u64",a.rewardDebt)})}static fromJSON(n,a){if(a.$typeName!==i.$typeName)throw new Error(`not a UserDeposit json object: expected '${i.$typeName}' but got '${a.$typeName}'`);return wt(ie(i.$typeName,M(n)),a.$typeArgs,[n]),i.fromJSONField(n,a)}static fromCoreObject(n,a){if(!gi(a.type))throw new Error(`object at ${a.objectId} is not a UserDeposit object`);let r=me(a.type).typeArgs;if(r.length!==1)throw new Error(`type argument mismatch: expected 1 type arguments but got '${r.length}'`);for(let o=0;o<1;o++){let s=X(r[o]),d=X(M([n][o]));if(s!==d)throw new Error(`type argument mismatch at position ${o}: expected '${d}' but got '${s}'`)}return i.fromBcs(n,a.content)}static fromSuiParsedData(n,a){if(a.dataType!=="moveObject")throw new Error("not an object");if(!gi(a.type))throw new Error(`object at ${a.fields.id} is not a UserDeposit object`);return i.fromFieldsWithTypes(n,a)}static fromSuiObjectData(n,a){if(a.bcs){if(a.bcs.dataType!=="moveObject"||!gi(a.bcs.type))throw new Error("object at is not a UserDeposit object");let r=me(a.bcs.type).typeArgs;if(r.length!==1)throw new Error(`type argument mismatch: expected 1 type arguments but got '${r.length}'`);for(let o=0;o<1;o++){let s=X(r[o]),d=X(M([n][o]));if(s!==d)throw new Error(`type argument mismatch at position ${o}: expected '${d}' but got '${s}'`)}return i.fromBcs(n,(0,ce.fromBase64)(a.bcs.bcsBytes))}if(a.content)return i.fromSuiParsedData(n,a.content);throw new Error("Both `bcs` and `content` fields are missing from the data. Include `showBcs` or `showContent` in the request.")}static async fetch(n,a,r){let{object:o}=await n.core.getObject({objectId:r,include:{content:!0}});if(!gi(o.type))throw new Error(`object at id ${r} is not a UserDeposit object`);let s=me(o.type).typeArgs;if(s.length!==1)throw new Error(`type argument mismatch: expected 1 type arguments but got '${s.length}'`);for(let d=0;d<1;d++){let c=X(s[d]),g=X(M([a][d]));if(c!==g)throw new Error(`type argument mismatch at position ${d}: expected '${g}' but got '${c}'`)}return i.fromBcs(a,o.content)}};function yg(i,n,a){if(n.length===0||!n[0])return[];let r=n[0],o=i.reduce((c,g)=>c+BigInt(g),BigInt(0)),s=BigInt(r.balance),d=[];for(let c of n.slice(1)){if(s>o)return bg(a,r,d,i);s+=BigInt(c.balance),d.push(c)}return s>=o?bg(a,r,d,i):[]}function bg(i,n,a,r){let o=r.map(s=>i.pure.u64(s));return a.length>0&&i.mergeCoins(n.coinObjectId,a.map(s=>s.coinObjectId)),i.splitCoins(n.coinObjectId,o)}var qu="0x0000000000000000000000000000000000000000000000000000000000000000";async function Cg(i,n,a){let r=await i.devInspectTransactionBlock({sender:qu,transactionBlock:n});if(r.effects.status.status!=="success")throw new Error(`inspectionResult failed. ${JSON.stringify(r,null,2)}`);let o=r.results?.pop()?.returnValues?.pop();if(!o)throw new Error(`Something with inspectionResult went wrong. ${JSON.stringify(r,null,2)}`);let[s,d]=o;return typeof a=="object"?a.fromBcs(Uint8Array.from(s)).toJSONField():_a(a).parse(Uint8Array.from(s))}var Sr=class extends xe{constructor(a,r,o){super();this.suiRpcUrl=a;this.params=r;this.api=o;this.client=new Zn({url:a,network:r.suiIsTestnet?"testnet":"mainnet"})}suiRpcUrl;params;api;chainType="SUI";client;async getUserBalanceInfo(a,r){if(!r.originTokenAddress)throw new f("SUI token must contain 'originTokenAddress'");let o=r.suiAddresses;if(!o)throw new f("SUI token must contain 'suiAddresses'");rn(o.bridgeAddress,o.bridgeAddressOrigin);let d=(await this.fetchDeposits(a,r.originTokenAddress)).reduce((c,g)=>{if(g.data)return c.lpAmount+=BigInt(g.data.content.fields.lp_amount),c.rewardDebt+=BigInt(g.data.content.fields.reward_debt),c;throw new f("Deposits fetch failed")},{lpAmount:BigInt(0),rewardDebt:BigInt(0)});return new Ye({lpAmount:d.lpAmount.toString(),rewardDebt:d.rewardDebt.toString()})}async fetchDeposits(a,r){return await Ot(o=>this.client.getOwnedObjects({owner:a,filter:{StructType:Zr.phantom(he(r)).phantomType},options:{showContent:!0},cursor:o}))}async getPoolInfoFromChain(a){let r=a.suiAddresses;if(!r)throw new f("SUI token must contain 'suiAddresses'");if(rn(r.bridgeAddress,r.bridgeAddressOrigin),!a.originTokenAddress)throw new f("SUI token must contain 'originTokenAddress'");let o=48,s=new pt;$c(s,a.originTokenAddress,r.bridgeObjectAddress);let d=await Cg(this.client,s,Gr.reified(he(a.originTokenAddress))),c=d.state.tokenBalance,g=d.state.vusdBalance,l=We({tokenBalance:c,vUsdBalance:g});return{dValue:d.state.d,aValue:d.state.a,totalLpAmount:d.rewards.lpSupply,vUsdBalance:g,tokenBalance:c,accRewardPerShareP:d.rewards.accRewardPerShareP,p:o,imbalance:l}}async buildRawTransactionDeposit(a){let r=a.token.suiAddresses;if(!r)throw new f("SUI token must contain 'suiAddresses'");if(rn(r.bridgeAddress,r.bridgeAddressOrigin),!a.token.originTokenAddress)throw new f("SUI token must contain 'originTokenAddress'");let o=await Ot(u=>this.client.getCoins({owner:a.accountAddress,coinType:a.token.originTokenAddress,cursor:u}));if(o.length===0||!o[0])throw new yt("No coins to deposit");let s=o[0],d=new pt;d.setSender(a.accountAddress);let{depositObj:c,isNewDeposit:g}=await this.getDepositObject(a.accountAddress,a.token.originTokenAddress,d),[l]=yg([a.amount],o,d);if(!l)throw new yt("No coins to deposit");if(!a.token.originTokenAddress)throw new f("SUI token must contain 'originTokenAddress'");let A=Kc(d,a.token.originTokenAddress,{bridge:r.bridgeObjectAddress,userDeposit:c,coin:l});return d.mergeCoins(s.coinObjectId,[A]),g&&d.transferObjects([c],a.accountAddress),await d.toJSON({client:this.client})}async getDepositObject(a,r,o){let s=await this.fetchDeposits(a,r);if(s.length===0||!s[0]){let d=he(r).phantomType;return{depositObj:qc(o,d),isNewDeposit:!0}}else{if(s[0].data?.objectId)return{depositObj:s[0].data.objectId,isNewDeposit:!1};throw new f("Something went wrong while deposit")}}async buildRawTransactionWithdraw(a){let r=a.token.suiAddresses;if(!r)throw new f("SUI token must contain 'suiAddresses'");if(rn(r.bridgeAddress,r.bridgeAddressOrigin),!a.token.originTokenAddress)throw new f("SUI token must contain 'originTokenAddress'");let o=he(a.token.originTokenAddress).phantomType,s=new pt;s.setSender(a.accountAddress);let{depositObj:d,isNewDeposit:c}=await this.getDepositObject(a.accountAddress,a.token.originTokenAddress,s);if(c)throw new yt("No deposit found");let g=_c(s,o,{bridge:r.bridgeObjectAddress,userDeposit:d,amountLp:BigInt(a.amount)}),l=await Ot(A=>this.client.getCoins({owner:a.accountAddress,coinType:a.token.originTokenAddress,cursor:A}));if(!g[0]||!g[1])throw new f("No rewards found");return l[0]?s.mergeCoins(l[0].coinObjectId,[g[0],g[1]]):(s.mergeCoins(g[0],[g[1]]),s.transferObjects([g[0]],a.accountAddress)),await s.toJSON({client:this.client})}async buildRawTransactionClaimRewards(a){let r=a.token.suiAddresses;if(!r)throw new f("SUI token must contain 'suiAddresses'");if(rn(r.bridgeAddress,r.bridgeAddressOrigin),!a.token.originTokenAddress)throw new f("SUI token must contain 'originTokenAddress'");let o=he(a.token.originTokenAddress).phantomType,s=new pt;s.setSender(a.accountAddress);let{depositObj:d,isNewDeposit:c}=await this.getDepositObject(a.accountAddress,a.token.originTokenAddress,s);if(c)throw new yt("No deposit found");let g=Ec(s,o,{bridge:r.bridgeObjectAddress,userDeposit:d}),l=await Ot(A=>this.client.getCoins({owner:a.accountAddress,coinType:a.token.originTokenAddress,cursor:A}));return l[0]?s.mergeCoins(l[0].coinObjectId,[g]):s.transferObjects([g],a.accountAddress),await s.toJSON({client:this.client})}};var li=require("web3"),Ig=require("web3-eth-abi");var Ai=class extends xe{constructor(a,r,o){super();this.tronWeb=a;this.api=r;this.tronJsonRpc=o}tronWeb;api;tronJsonRpc;chainType="TRX";P=52;async getUserBalanceInfo(a,r){let o;if(this.tronJsonRpc)try{o=await this.getUserBalanceInfoByBatch(this.tronJsonRpc,a,r)}catch{o=await this.getUserBalanceInfoPerProperty(a,r)}else o=await this.getUserBalanceInfoPerProperty(a,r);return o}async getUserBalanceInfoByBatch(a,r,o){let s=ka(o.poolAddress),d=ka(r),c=[{jsonrpc:"2.0",id:1,method:"eth_call",params:[{to:s,data:this.getFunctionAbi("userRewardDebt",d)},"latest"]},{jsonrpc:"2.0",id:2,method:"eth_call",params:[{to:s,data:this.getFunctionAbi("balanceOf",d)},"latest"]}],l=await(await fetch(a,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(c)})).json();if(Array.isArray(l)&&l.length===2){let A=u=>{let m=l.find(y=>y.id===u);if(!m||!m.result)throw new Error(`Missing or invalid result for id ${u}`);return li.Web3.utils.toBigInt(m.result).toString()};return new Ye({lpAmount:li.Web3.utils.toBigInt(A(2)).toString(),rewardDebt:li.Web3.utils.toBigInt(A(1)).toString()})}throw new Error("Batched HTTP call failed")}async getUserBalanceInfoPerProperty(a,r){this.tronWeb.defaultAddress.base58||this.tronWeb.setAddress(a);let o=this.getContract(r.poolAddress),s=(await o.methods.userRewardDebt(a).call()).toString(),d=(await o.methods.balanceOf(a).call()).toString();return new Ye({lpAmount:d,rewardDebt:s})}async getPoolInfoFromChain(a){let r;if(this.tronJsonRpc)try{r=await this.getPoolInfoByBatch(this.tronJsonRpc,a)}catch{r=await this.getPoolInfoPerProperty(a)}else r=await this.getPoolInfoPerProperty(a);return r}async getPoolInfoByBatch(a,r){let o=ka(r.poolAddress),s=[{jsonrpc:"2.0",id:1,method:"eth_call",params:[{to:o,data:this.getFunctionAbi("a")},"latest"]},{jsonrpc:"2.0",id:2,method:"eth_call",params:[{to:o,data:this.getFunctionAbi("d")},"latest"]},{jsonrpc:"2.0",id:3,method:"eth_call",params:[{to:o,data:this.getFunctionAbi("tokenBalance")},"latest"]},{jsonrpc:"2.0",id:4,method:"eth_call",params:[{to:o,data:this.getFunctionAbi("vUsdBalance")},"latest"]},{jsonrpc:"2.0",id:5,method:"eth_call",params:[{to:o,data:this.getFunctionAbi("totalSupply")},"latest"]},{jsonrpc:"2.0",id:6,method:"eth_call",params:[{to:o,data:this.getFunctionAbi("accRewardPerShareP")},"latest"]}],c=await(await fetch(a,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(s)})).json();if(Array.isArray(c)&&c.length===6){let g=m=>{let y=c.find(v=>v.id===m);if(!y||!y.result)throw new Error(`Missing or invalid result for id ${m}`);return li.Web3.utils.toBigInt(y.result).toString()},l=g(3),A=g(4),u=We({tokenBalance:l,vUsdBalance:A});return{aValue:g(1),dValue:g(2),tokenBalance:l,vUsdBalance:A,totalLpAmount:g(5),accRewardPerShareP:g(6),p:this.P,imbalance:u}}throw new Error("Batched pool info call failed")}async getPoolInfoPerProperty(a){this.tronWeb.defaultAddress.base58||this.tronWeb.setAddress(a.poolAddress);let r=this.getContract(a.poolAddress),[o,s,d,c,g,l]=await Promise.all([r.methods.a().call(),r.methods.d().call(),r.methods.tokenBalance().call(),r.methods.vUsdBalance().call(),r.methods.totalSupply().call(),r.methods.accRewardPerShareP().call()]),A=d.toString(),u=c.toString(),m=We({tokenBalance:A,vUsdBalance:u});return{aValue:o.toString(),dValue:s.toString(),tokenBalance:A,vUsdBalance:u,totalLpAmount:g.toString(),accRewardPerShareP:l.toString(),p:this.P,imbalance:m}}buildRawTransactionDeposit(a){let{amount:r,accountAddress:o}=a,s=[{type:"uint256",value:r}];return this.buildRawTransaction(a.token.poolAddress,"deposit(uint256)",s,"0",o)}buildRawTransactionWithdraw(a){let{amount:r,accountAddress:o}=a,s=[{type:"uint256",value:r}];return this.buildRawTransaction(a.token.poolAddress,"withdraw(uint256)",s,"0",o)}buildRawTransactionClaimRewards(a){let{accountAddress:r}=a,o=[];return this.buildRawTransaction(a.token.poolAddress,"claimRewards()",o,"0",r)}async buildRawTransaction(a,r,o,s,d){let c=await this.tronWeb.transactionBuilder.triggerSmartContract(a,r,{callValue:+s},o,d);if(!c?.result?.result)throw new f("Unknown error: "+JSON.stringify(c,null,2));return c.transaction}getContract(a){return this.tronWeb.contract(ii.abi,a)}getFunctionAbi(a,...r){let o=ii.abi.find(s=>s.type==="function"&&"name"in s&&s.name===a);if(!o)throw new Error(`${a} method not found in Pool ABI`);return(0,Ig.encodeFunctionCall)(o,r)}};var kr=class{constructor(n,a,r,o){this.api=n;this.nodeRpcUrlsConfig=a;this.params=r;this.tokenService=o;this.rawTxBuilder=new Yr(n,a,this.params,o);let s=r.cachePoolInfoChainSec>0?r.cachePoolInfoChainSec*1e3:20*1e3;this.cache=new on({defaultTtl:s})}api;nodeRpcUrlsConfig;params;tokenService;rawTxBuilder;cache;async getAllowance(n,a){if(a){let r=n,o=a;return await this.tokenService.getAllowance({...o,spender:o.token.poolAddress},r)}else{let r=n;return await this.tokenService.getAllowance({...r,spender:r.token.poolAddress})}}async checkAllowance(n,a){if(a){let r=n,o=a;return this.tokenService.checkAllowance({...o,spender:o.token.poolAddress},r)}else{let r=n;return this.tokenService.checkAllowance({...r,spender:r.token.poolAddress})}}async approve(n,a){return this.tokenService.approve(n,{...a,spender:a.token.poolAddress})}async getAmountToBeDeposited(n,a,r){D(n),O("amount",n,a.decimals);let o=await this.getPoolInfoFromChain(a,r),{vUsdBalance:s,tokenBalance:d,aValue:c,dValue:g}=o,l=dg(n,c,g,d,s);return P(l,3).toFixed()}async getAmountToBeWithdrawn(n,a,r,o){D(n),O("amount",n,r.decimals);let s=await this.getPoolInfoFromChain(r,o),d=cg(n),c=Ke(d,r.decimals),l=(await this.getUserBalanceInfo(a,r,o)).earned(s)||"0",A=(0,hg.Big)(c).plus(l).toFixed();return P(A,r.decimals).toFixed()}async getUserBalanceInfo(n,a,r){return sa(a.chainSymbol,this.api,this.nodeRpcUrlsConfig,this.params,r).getUserBalanceInfo(n,a)}async getPoolInfoFromChain(n,a){let r={chainSymbol:n.chainSymbol,poolAddress:n.poolAddress},o=this.cache.get(r);if(o)return o;{let s=await sa(n.chainSymbol,this.api,this.nodeRpcUrlsConfig,this.params,a).getPoolInfoFromChain(n);return this.cache.put(r,s),this.api.cachePut({chainSymbol:n.chainSymbol,poolAddress:n.poolAddress},s),s}}};function sa(i,n,a,r,o){switch(x.getChainProperty(i).chainType){case"EVM":{if(o)return new ri(o,n);{let s=a.getNodeRpcUrl(i),d=new ga.Web3(s);return d.defaultReturnFormat={number:ga.FMT_NUMBER.STR,bytes:ga.FMT_BYTES.HEX},new ri(d,n)}}case"TRX":{let s=a.getNodeRpcUrl(i),d=r.tronJsonRpc;if(o)return new Ai(o,n,d);{let c=new vg.TronWeb({fullHost:s});return new Ai(c,n,d)}}case"SOLANA":{let s=a.getNodeRpcUrl(i);return new wr(s,n)}case"SRB":return new Nr(a,r,n);case"SUI":return new Sr(a.getNodeRpcUrl(i),r,n);case"ALG":if(o){let s=o,d=Ws.AlgorandClient.fromClients({algod:s});return new ai(d,n)}else{let s=a.getNodeRpcUrl(i),d=Ws.AlgorandClient.fromConfig({algodConfig:{server:s}});return new ai(d,n)}case"STX":{let s=a.getNodeRpcUrl(i);return new Fr(s,r,n)}}}var Rg=require("tronweb"),Aa=require("web3");var ep={abi:[{inputs:[{internalType:"string",name:"tokenName_",type:"string"},{internalType:"string",name:"tokenSymbol_",type:"string"}],stateMutability:"nonpayable",type:"constructor"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"owner",type:"address"},{indexed:!0,internalType:"address",name:"spender",type:"address"},{indexed:!1,internalType:"uint256",name:"value",type:"uint256"}],name:"Approval",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"user",type:"address"},{indexed:!1,internalType:"address",name:"token",type:"address"},{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"},{indexed:!1,internalType:"uint256",name:"lpAmount",type:"uint256"}],name:"Deposited",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"},{indexed:!1,internalType:"address",name:"token",type:"address"}],name:"DepositedRewards",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"from",type:"address"},{indexed:!0,internalType:"address",name:"to",type:"address"},{indexed:!1,internalType:"uint256[4]",name:"values",type:"uint256[4]"}],name:"MultiTransfer",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"previousOwner",type:"address"},{indexed:!0,internalType:"address",name:"newOwner",type:"address"}],name:"OwnershipTransferred",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"from",type:"address"},{indexed:!0,internalType:"address",name:"to",type:"address"},{indexed:!1,internalType:"uint256",name:"value",type:"uint256"}],name:"Transfer",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"user",type:"address"},{indexed:!1,internalType:"address",name:"token",type:"address"},{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"}],name:"Withdrawn",type:"event"},{stateMutability:"payable",type:"fallback"},{inputs:[],name:"NUM_TOKENS",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"owner",type:"address"},{internalType:"address",name:"spender",type:"address"}],name:"allowance",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"approve",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"account",type:"address"}],name:"balanceOf",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"decimals",outputs:[{internalType:"uint8",name:"",type:"uint8"}],stateMutability:"pure",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"subtractedValue",type:"uint256"}],name:"decreaseAllowance",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"uint256",name:"index",type:"uint256"},{internalType:"uint256",name:"minVirtualAmount",type:"uint256"}],name:"deposit",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"depositRewards",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"uint256",name:"index",type:"uint256"}],name:"getEstimatedAmountOnDeposit",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"index",type:"uint256"}],name:"getRewardsAmount",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"user",type:"address"},{internalType:"uint256",name:"virtualAmount",type:"uint256"}],name:"getWithdrawProportionAmount",outputs:[{internalType:"uint256[4]",name:"",type:"uint256[4]"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"addedValue",type:"uint256"}],name:"increaseAllowance",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"name",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"},{inputs:[],name:"owner",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"",type:"uint256"}],name:"pools",outputs:[{internalType:"contract IPool",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"renounceOwnership",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"index",type:"uint256"},{internalType:"contract IPool",name:"pool",type:"address"}],name:"setPool",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"account",type:"address"},{internalType:"uint256",name:"index",type:"uint256"}],name:"subBalanceOf",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"index",type:"uint256"}],name:"subDepositRewards",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"index",type:"uint256"}],name:"subTotalSupply",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"to",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"uint256",name:"index",type:"uint256"}],name:"subTransfer",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"from",type:"address"},{internalType:"address",name:"to",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"uint256",name:"index",type:"uint256"}],name:"subTransferFrom",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"virtualAmount",type:"uint256"},{internalType:"uint256",name:"index",type:"uint256"}],name:"subWithdraw",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"symbol",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"",type:"uint256"}],name:"tokens",outputs:[{internalType:"contract IERC20",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"totalSupply",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"to",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"transfer",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"from",type:"address"},{internalType:"address",name:"to",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"transferFrom",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"newOwner",type:"address"}],name:"transferOwnership",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"virtualAmount",type:"uint256"}],name:"withdraw",outputs:[],stateMutability:"nonpayable",type:"function"},{stateMutability:"payable",type:"receive"}]},Vr=ep;var Xn=class{};var ui=class extends Xn{constructor(a,r){super();this.web3=a;this.api=r}web3;api;chainType="EVM";async balanceOf(a){let r=(await this.getYieldContract(a.token.yieldAddress).methods.balanceOf(a.owner).call()).toString();return P(r,3).toFixed()}async getEstimatedAmountOnDeposit(a){let r=j(a.amount,a.token.decimals).toFixed(),o=(await this.getYieldContract(a.token.yieldAddress).methods.getEstimatedAmountOnDeposit(r,a.token.yieldId).call()).toString();return P(o,3).toFixed()}async getWithdrawProportionAmount(a){let r=j(a.amount,3).toFixed();return await this.getYieldContract(a.cydToken.yieldAddress).methods.getWithdrawProportionAmount(a.owner,r).call()}async buildRawTransactionDeposit(a){return Promise.resolve({...this.buildTxParams({owner:a.owner,yieldAddress:a.token.yieldAddress}),data:this.getYieldContract(a.token.yieldAddress).methods.deposit(a.amount,a.token.yieldId,a.minVirtualAmount).encodeABI()})}async buildRawTransactionWithdraw(a){return Promise.resolve({...this.buildTxParams({owner:a.owner,yieldAddress:a.token.yieldAddress}),data:this.getYieldContract(a.token.yieldAddress).methods.withdraw(a.amount).encodeABI()})}buildTxParams(a){return{from:a.owner,to:a.yieldAddress,value:"0"}}getYieldContract(a){return new this.web3.eth.Contract(Vr.abi,a)}};var Pr=class{constructor(n,a,r,o){this.api=n;this.nodeRpcUrlsConfig=a;this.params=r;this.tokenService=o}api;nodeRpcUrlsConfig;params;tokenService;async approve(n,a){return this.tokenService.buildRawTransactionApprove({...n,spender:n.token.yieldAddress},a)}async deposit(n,a){return D(n.amount),O("amount",n.amount,n.token.decimals),D(n.minVirtualAmount),O("minVirtualAmount",n.minVirtualAmount,3),n.amount=j(n.amount,n.token.decimals).toFixed(),n.minVirtualAmount=j(n.minVirtualAmount,3).toFixed(),la(n.token.chainSymbol,this.api,this.nodeRpcUrlsConfig,n.owner,a).buildRawTransactionDeposit(n)}async withdraw(n,a){return D(n.amount),O("amount",n.amount,3),n.amount=j(n.amount,3).toFixed(),la(n.token.chainSymbol,this.api,this.nodeRpcUrlsConfig,n.owner,a).buildRawTransactionWithdraw(n)}};var pi=class extends Xn{constructor(a,r){super();this.tronWeb=a;this.api=r}tronWeb;api;chainType="TRX";async balanceOf(a){let r=(await(await this.getContract(a.token.yieldAddress)).methods.balanceOf(a.owner).call()).toString();return P(r,3).toFixed()}async getEstimatedAmountOnDeposit(a){let r=j(a.amount,a.token.decimals).toFixed(),o=(await(await this.getContract(a.token.yieldAddress)).methods.getEstimatedAmountOnDeposit(r,a.token.yieldId).call()).toString();return P(o,3).toFixed()}async getWithdrawProportionAmount(a){let r=j(a.amount,3).toFixed();return(await(await this.getContract(a.cydToken.yieldAddress)).methods.getWithdrawProportionAmount(a.owner,r).call()).toString().split(",")}async buildRawTransactionDeposit(a){let{amount:r,owner:o,token:s,minVirtualAmount:d}=a,c=[{type:"uint256",value:r},{type:"uint256",value:s.yieldId},{type:"uint256",value:d}];return this.buildRawTransaction(a.token.yieldAddress,"deposit(uint256,uint256,uint256)",c,"0",o)}async buildRawTransactionWithdraw(a){let{amount:r,owner:o}=a,s=[{type:"uint256",value:r}];return this.buildRawTransaction(a.token.yieldAddress,"withdraw(uint256)",s,"0",o)}async buildRawTransaction(a,r,o,s,d){let c=await this.tronWeb.transactionBuilder.triggerSmartContract(a,r,{callValue:+s},o,d);if(!c?.result?.result)throw new f("Unknown error: "+JSON.stringify(c,null,2));return c.transaction}getContract(a){return this.tronWeb.contract(Vr.abi,a)}};function fg(i){if(!mi(i))throw new wa("Token does not support Yield")}function mi(i){return!!i.yieldAddress&&i.yieldId!==void 0}var Xr=class{constructor(n,a,r,o){this.api=n;this.nodeRpcUrlsConfig=a;this.params=r;this.tokenService=o;this.rawTxBuilder=new Pr(n,a,r,o)}api;nodeRpcUrlsConfig;params;tokenService;rawTxBuilder;async getCYDTokens(){let n=[],a=await this.api.getChainDetailsMap("pool");return Object.values(a).forEach(r=>{if(r.yieldAddress){let o=r.tokens.find(d=>d.tokenAddress===r.yieldAddress),s=r.tokens.filter(mi);if(s.length>0){let d=o??{allbridgeChainId:r.allbridgeChainId,apr:"",apr30d:"",apr7d:"",bridgeId:r.bridgeId,paddingUtilId:r.paddingUtilId,bridgeAddress:r.bridgeAddress,chainId:r.chainId,chainName:r.name,chainSymbol:r.chainSymbol,chainType:r.chainType,confirmations:r.confirmations,decimals:3,feeShare:"",lpRate:"",name:"Core Yield",poolAddress:"",symbol:"CYD",tokenAddress:r.yieldAddress,transferTime:{},txCostAmount:{maxAmount:"0",swap:"0",transfer:"0"},yieldAddress:r.yieldAddress};n.push({...d,yieldAddress:r.yieldAddress,tokens:s})}}}),n}async getAllowance(n,a){return await this.tokenService.getAllowance({...n,spender:n.token.yieldAddress},a)}async checkAllowance(n,a){return this.tokenService.checkAllowance({...n,spender:n.token.yieldAddress},a)}async balanceOf(n,a){return la(n.token.chainSymbol,this.api,this.nodeRpcUrlsConfig,n.owner,a).balanceOf(n)}async getEstimatedAmountOnDeposit(n,a){return D(n.amount),O("amount",n.amount,n.token.decimals),la(n.token.chainSymbol,this.api,this.nodeRpcUrlsConfig,n.token.yieldAddress,a).getEstimatedAmountOnDeposit(n)}async getWithdrawAmounts(n,a){D(n.amount),O("amount",n.amount,3);let r=await la(n.cydToken.chainSymbol,this.api,this.nodeRpcUrlsConfig,n.owner,a).getWithdrawProportionAmount(n);return n.cydToken.tokens.filter(o=>r[o.yieldId]!==void 0).map(o=>({amount:P(r[o.yieldId],o.decimals).toFixed(),token:o}))}};function la(i,n,a,r,o){switch(x.getChainProperty(i).chainType){case"EVM":{if(o)return new ui(o,n);{let s=a.getNodeRpcUrl(i),d=new Aa.Web3(s);return d.defaultReturnFormat={number:Aa.FMT_NUMBER.STR,bytes:Aa.FMT_BYTES.HEX},new ui(d,n)}}case"TRX":{if(o)return new pi(o,n);{let s=a.getNodeRpcUrl(i),d=new Rg.TronWeb({fullHost:s});return d.setAddress(r),new pi(d,n)}}case"SOLANA":throw new J;case"SRB":throw new J;case"SUI":throw new J;case"ALG":throw new J;case"STX":throw new J}}var ve=require("big.js");function Yg(i,n,a){let r=tp(i,{decimals:n.decimals,feeShare:n.feeShare},n.poolInfo),o=np(r.amountIncludingCommissionInSystemPrecision,{decimals:a.decimals,feeShare:a.feeShare},a.poolInfo);return{swapToVUsdCalcResult:r,swapFromVUsdCalcResult:o}}function wg(i,n,a){let r=ap(i,{decimals:a.decimals,feeShare:a.feeShare},a.poolInfo),o=ip(r.amountIncludingCommissionInSystemPrecision,{decimals:n.decimals,feeShare:n.feeShare},n.poolInfo);return{swapToVUsdCalcResult:r,swapFromVUsdCalcResult:o}}function tp(i,{feeShare:n,decimals:a},r){let o=(0,ve.Big)(i),s=o.times(n),d=o.minus(s);return{bridgeFeeInTokenPrecision:s.round().toFixed(),amountIncludingCommissionInSystemPrecision:Tg(Dt(d,a),r),amountExcludingCommissionInSystemPrecision:Tg(Dt(o,a),r)}}function Tg(i,n){if(i.eq(0))return"0";let a=(0,ve.Big)(n.tokenBalance).plus(i),r=kt(a.toFixed(),n.aValue,n.dValue);return(0,ve.Big)(n.vUsdBalance).minus(r).round().toFixed()}function np(i,{feeShare:n,decimals:a},r){if((0,ve.Big)(i).eq(0))return{bridgeFeeInTokenPrecision:"0",amountIncludingCommissionInTokenPrecision:"0",amountExcludingCommissionInTokenPrecision:"0"};let s=(0,ve.Big)(i).plus(r.vUsdBalance),d=kt(s,r.aValue,r.dValue),c=Ke((0,ve.Big)(r.tokenBalance).minus(d),a),g=(0,ve.Big)(c).times(n),l=(0,ve.Big)(c).minus(g).round();return{bridgeFeeInTokenPrecision:g.round().toFixed(),amountIncludingCommissionInTokenPrecision:l.toFixed(),amountExcludingCommissionInTokenPrecision:c.toFixed()}}function ap(i,{feeShare:n,decimals:a},r){let o=(0,ve.Big)(n).div((0,ve.Big)(1).minus(n)),s=(0,ve.Big)(i).times(o),d=(0,ve.Big)(i).plus(s);return{bridgeFeeInTokenPrecision:s.round().toFixed(),amountIncludingCommissionInSystemPrecision:Bg(Dt(d,a),r),amountExcludingCommissionInSystemPrecision:Bg(Dt(i,a),r)}}function Bg(i,n){let a=(0,ve.Big)(n.tokenBalance).minus(i),r=kt(a.toFixed(),n.aValue,n.dValue);return(0,ve.Big)(r).minus(n.vUsdBalance).round().toFixed()}function ip(i,{feeShare:n,decimals:a},r){if((0,ve.Big)(i).eq(0))return{bridgeFeeInTokenPrecision:"0",amountIncludingCommissionInTokenPrecision:"0",amountExcludingCommissionInTokenPrecision:"0"};let o=(0,ve.Big)(r.vUsdBalance).minus(i),s=kt(o.toFixed(),r.aValue,r.dValue),d=(0,ve.Big)(s).minus(r.tokenBalance),c=Ke(d.toFixed(),a),g=(0,ve.Big)(n).div((0,ve.Big)(1).minus(n)),l=(0,ve.Big)(c).times(g),A=(0,ve.Big)(c).plus(l);return{bridgeFeeInTokenPrecision:l.round().toFixed(),amountIncludingCommissionInTokenPrecision:A.round().toFixed(),amountExcludingCommissionInTokenPrecision:c.toFixed()}}var gn=require("big.js");function Wg(i,n,a,r,o){let s=St(i,n,a),d=Ke(s,n.decimals),c=Za(s,r,o),g=(0,gn.Big)(i).times(n.feeShare),l=(0,gn.Big)(c).div((0,gn.Big)(1).minus(r.feeShare)).minus(c);return{sourceLPSwap:{fee:P(g,n.decimals).neg().round(n.decimals,gn.Big.roundUp).toFixed(),swap:P((0,gn.Big)(i).minus(d).minus(g),n.decimals).neg().round(n.decimals,gn.Big.roundUp).toFixed()},destLPSwap:{fee:P(l,r.decimals).neg().round(r.decimals,gn.Big.roundUp).toFixed(),swap:P(Ke(s,r.decimals).minus(c).minus(l),r.decimals).neg().round(r.decimals,gn.Big.roundUp).toFixed()}}}var Ns=require("@algorandfoundation/algokit-utils"),Mr=require("algosdk");var jr=class{constructor(n){this.nodeRpcUrlsConfig=n}nodeRpcUrlsConfig;async checkAssetOptIn(n,a,r){let o=this.getAlgorand(r);return Ni(n,a,o)}async buildRawTransactionAssetOptIn(n,a,r){let o=this.getAlgorand(r);typeof n=="string"&&(n=BigInt(n));let s=await o.createTransaction.assetOptIn({assetId:n,sender:a});return An(s)}async checkAppOptIn(n,a,r){let o=this.getAlgorand(r);return Fi(n,a,o)}async buildRawTransactionAppOptIn(n,a,r){let o=this.getAlgorand(r);typeof n=="string"&&(n=BigInt(n));let s=o.newGroup(),d=o.account.random();s.addAppCallMethodCall({appId:n,method:new Mr.ABIMethod({name:"optInToApplication",desc:void 0,args:[],returns:{type:"void",desc:void 0},events:[],readonly:!1}),args:[],sender:a,signer:d,onComplete:Mr.OnApplicationComplete.OptInOC});let{transactions:c}=await s.buildTransactions();return An(...c)}getAlgorand(n){if(n){let a=Ns.AlgorandClient.fromClients({algod:n});return a.setDefaultValidityWindow(100),a}else{let a=this.nodeRpcUrlsConfig.getNodeRpcUrl("ALG"),r=Ns.AlgorandClient.fromConfig({algodConfig:{server:a}});return r.setDefaultValidityWindow(100),r}}};var Lr=require("axios");var Ng="3.32.0";function Fg(i){return Object.entries(i).reduce((n,a)=>{let r=a[0],o=a[1],s=cp(r,o);return s&&(n[r]=s),n},{})}function Gg(i){let n={};for(let[a,r]of Object.entries(i)){let o=a;for(let s of r.tokens){let d=ua({chainSymbol:o,poolAddress:s.poolAddress}),c=We(s.poolInfo);n[d]={...s.poolInfo,imbalance:c}}}return n}function rp(i,n){let{name:a,...r}=i,{poolInfo:o,...s}=n;return{...s,...r,chainName:a}}function op(i){switch(i){case"allbridge":return 1;case"wormhole":return 2;case"cctp":return 3;case"cctpV2":return 4;case"oft":return 5;case"xReserve":return 6}}function sp(i){return Object.entries(i).reduce((n,[a,r])=>(n[a]=dp(r),n),{})}function dp(i){return Object.entries(i).reduce((n,[a,r])=>{let o=op(a);return o&&r!=null&&(n[o]=r),n},{})}function cp(i,n){let a=x.getChainsProperties()[i];if(!a)return null;let r={...a,allbridgeChainId:n.chainId,bridgeId:n.bridgeId,paddingUtilId:n.paddingUtilId,bridgeAddress:n.bridgeAddress,oftBridgeAddress:n.oftBridgeAddress,yieldAddress:n.yieldAddress,abrPayer:n.abrPayer?{payerAddress:n.abrPayer.payerAddress,abrToken:{chainSymbol:i,tokenAddress:n.abrPayer.tokenAddress,decimals:n.abrPayer.tokenDecimals},payerAvailability:gp(n.abrPayer.payerAvailability)}:void 0,transferTime:sp(n.transferTime),txCostAmount:n.txCostAmount,confirmations:n.confirmations,suiAddresses:n.suiAddresses};return{...r,tokens:n.tokens.map(o=>rp(r,o))}}function gp(i){if(!i)return{};let n={};for(let[a,r]of Object.entries(i)){if(!r)continue;let o=lp[a];o&&(n[o]=!0)}return n}var lp=Object.fromEntries(Object.entries(qr).map(([i,n])=>[n,Je[i]]));function ua(i){return i.chainSymbol+"_"+i.poolAddress}function Zg(i){let n=[];for(let[a,r]of Object.entries(i)){let o=a;for(let s of r.tokens)n.push({chainSymbol:o,poolAddress:s.poolAddress})}return n}function Sg(i){let n={};for(let[a,r]of Object.entries(i)){let o=a;for(let[s,d]of Object.entries(r))d.imbalance=We(d),n[ua({chainSymbol:o,poolAddress:s})]=d}return n}var pa=class{api;constructor(n){this.api=(0,Lr.create)({baseURL:n.coreApiUrl,headers:{Accept:"application/json",...n.coreApiHeaders,"x-Sdk-Agent":"AllbridgeCoreSDK/"+Ng},params:n.coreApiQueryParams}),n.coreApiHeadersProvider&&this.api.interceptors.request.use(async a=>{let r=await n.coreApiHeadersProvider?.();if(!r||Object.keys(r).length===0)return a;let o=Lr.AxiosHeaders.from(a.headers);for(let[s,d]of Object.entries(r))!d||o.has(s)||o.set(s,d);return a.headers=o,a})}async getTokenInfo(){let{data:n}=await this.api.get("/token-info",{params:{filter:"all"}});return{chainDetailsMap:Fg(n),poolInfoMap:Gg(n)}}async getPendingInfo(){let{data:n}=await this.api.get("/pending-info");return n}async getGasBalance(n,a){let{data:r}=await this.api.get(`/check/${n}/${a}`);return r}async getTransferStatus(n,a){let{data:r}=await this.api.get(`/chain/${n}/${a}`);return r}async getReceiveTransactionCost(n){if(n.messenger===5&&!n.sourceToken)throw new Ra("For OFT sourceToken required");let{data:a}=await this.api.post("/receive-fee",n,{headers:{"Content-Type":"application/json"}});return{exchangeRate:a.exchangeRate,fee:a.fee,sourceNativeTokenPrice:a.sourceNativeTokenPrice,abrExchangeRate:a.abrExchangeRate,adminFeeShareWithExtras:a.adminFeeShareWithExtras}}async getPoolInfoMap(n){let a=n instanceof Array?n:[n],{data:r}=await this.api.post("/pool-info",{pools:a},{headers:{"Content-Type":"application/json"}});return Sg(r)}};var Fs=20*1e3,Ap=55*1e3,ma=class{constructor(n){this.apiClient=n;this.tokenInfoCache=new on({defaultTtl:Ap}),this.receivedTransactionCache=new on({defaultTtl:Fs}),this.pendingInfoCache=new on({defaultTtl:Fs}),this.gasBalanceCache=new on({defaultTtl:Fs})}apiClient;tokenInfoCache;pendingInfoCache;gasBalanceCache;receivedTransactionCache;getTokenInfo(){let n="TOKEN_INFO_CACHE_KEY",a=this.tokenInfoCache.get(n);if(a)return a;let r=this.apiClient.getTokenInfo();return this.tokenInfoCache.put(n,r),r}async getGasBalance(n,a){let r=`GAS_BALANCE_${n}_${a}`,o=this.gasBalanceCache.get(r);if(o)return o;let s=this.apiClient.getGasBalance(n,a);return this.gasBalanceCache.put(r,s),s}async getPendingInfo(){let n="PENDING_INFO_CACHE_KEY",a=this.pendingInfoCache.get(n);if(a)return a;let r=this.apiClient.getPendingInfo();return this.pendingInfoCache.put(n,r),r}async getReceiveTransactionCost(n){let a=`RECEIVE_TX_COST_${n.sourceChainId}_${n.destinationChainId}_${n.messenger}${n.sourceToken?"_"+n.sourceToken:""}`,r=this.receivedTransactionCache.get(a);if(r)return r;let o=await this.apiClient.getReceiveTransactionCost(n);return this.receivedTransactionCache.put(a,o),o}async getTransferStatus(n,a){return this.apiClient.getTransferStatus(n,a)}async getPoolInfoMap(n){return this.apiClient.getPoolInfoMap(n)}};var ba=class{constructor(n){this.apiClient=n}apiClient;async getChainDetailsMap(){return(await this.apiClient.getTokenInfo()).chainDetailsMap}async tokens(){let n=await this.getChainDetailsMap();return Object.values(n).flatMap(a=>a.tokens)}async getPendingInfo(){return this.apiClient.getPendingInfo()}async getGasBalance(n,a){return this.apiClient.getGasBalance(n,a)}async getChainDetailsMapAndPoolInfoMap(){return await this.apiClient.getTokenInfo()}async getTransferStatus(n,a){return await this.apiClient.getTransferStatus(n,a)}async getReceiveTransactionCost(n){return await this.apiClient.getReceiveTransactionCost(n)}async getPoolInfoMap(n){return await this.apiClient.getPoolInfoMap(n)}};var ya=class{constructor(n,a){this.client=n;this.isStaging=a.coreApiQueryParams?.staging==="true"}client;isStaging;async getChainDetailsMap(n){let a=await this.client.getChainDetailsMap(),r={};for(let o in a){let s=a[o];s&&(r[o]={...s,tokens:kg(s.tokens,n,this.isStaging)})}return r}async tokens(n){return kg(await this.client.tokens(),n,this.isStaging)}async getPendingInfo(){return this.client.getPendingInfo()}async getGasBalance(n,a){return this.client.getGasBalance(n,a)}async getTransferStatus(n,a){return await this.client.getTransferStatus(n,a)}async getReceiveTransactionCost(n){return await this.client.getReceiveTransactionCost(n)}cachePut(n,a){return this.client.cachePut(n,a)}getPoolInfoByKey(n){return this.client.getPoolInfoByKey(n)}refreshPoolInfo(n){return this.client.refreshPoolInfo(n)}};function kg(i,n,a){return i.filter(r=>a?!0:r.flags[n]).map(up)}function up(i){let{flags:n,...a}=i;return a}var pp=55*1e3,Ca=class{constructor(n){this.client=n;this.poolInfoCache=new Gs}client;poolInfoCache;async getChainDetailsMap(){return(await this.client.getChainDetailsMapAndPoolInfoMap()).chainDetailsMap}async tokens(){return await this.client.tokens()}getTransferStatus(n,a){return this.client.getTransferStatus(n,a)}getReceiveTransactionCost(n){return this.client.getReceiveTransactionCost(n)}getPendingInfo(){return this.client.getPendingInfo()}getGasBalance(n,a){return this.client.getGasBalance(n,a)}async getPoolInfoByKey(n){this.poolInfoCache.putAllIfNotExists((await this.client.getChainDetailsMapAndPoolInfoMap()).poolInfoMap);let a=this.poolInfoCache.get(n);if(a)return a;{let r=await this.client.getPoolInfoMap(n);this.poolInfoCache.putAll(r);let o=r[ua(n)];if(o)return o;throw new f("Cannot find pool info for "+n.poolAddress+" on chain "+n.chainSymbol)}}async refreshPoolInfo(n){let a;if(n)this.poolInfoCache.putAllIfNotExists((await this.client.getChainDetailsMapAndPoolInfoMap()).poolInfoMap),a=await this.client.getPoolInfoMap(n);else{let r=await this.client.getChainDetailsMapAndPoolInfoMap();a=await this.client.getPoolInfoMap(Zg(r.chainDetailsMap))}this.poolInfoCache.putAll(a)}cachePut(n,a){this.poolInfoCache.put(ua(n),a)}},Gs=class{cache;constructor(){this.cache=new on({defaultTtl:pp})}putAll(n){for(let[a,r]of Object.entries(n))this.cache.put(a,r)}putAllIfNotExists(n){for(let[a,r]of Object.entries(n))this.cache.get(a)||this.cache.put(a,r)}put(n,a){this.cache.put(n,a)}get(n){let a=ua(n);return this.cache.get(a)}};var ks=require("@algorandfoundation/algokit-utils"),Xg=require("big.js"),jg=require("tronweb"),Mg=require("web3");var Zs=require("big.js"),He=class{async checkAllowance(n){let a=await this.getAllowance(n);return(0,Zs.Big)(a).gte((0,Zs.Big)(n.amount))}};var bi=class extends He{constructor(a,r){super();this.algorand=a;this.api=r;a.setDefaultValidityWindow(100)}algorand;api;chainType="ALG";approve(a){throw new J}buildRawTransactionApprove(a){throw new J}getAllowance(a){throw new J}async getNativeTokenBalance(a){let{account:r}=a;return(await this.algorand.account.getInformation(r)).balance.microAlgo.toString()}async getTokenBalance(a){let{account:r,token:o}=a;try{return(await this.algorand.asset.getAccountInformation(r,BigInt(o.tokenAddress))).balance.toString()}catch(s){if(s instanceof Error)return s.message.includes("account asset info not found"),"0";throw s}}};var mp={abi:[{inputs:[{internalType:"string",name:"name_",type:"string"},{internalType:"string",name:"symbol_",type:"string"}],stateMutability:"nonpayable",type:"constructor"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"owner",type:"address"},{indexed:!0,internalType:"address",name:"spender",type:"address"},{indexed:!1,internalType:"uint256",name:"value",type:"uint256"}],name:"Approval",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"from",type:"address"},{indexed:!0,internalType:"address",name:"to",type:"address"},{indexed:!1,internalType:"uint256",name:"value",type:"uint256"}],name:"Transfer",type:"event"},{inputs:[{internalType:"address",name:"owner",type:"address"},{internalType:"address",name:"spender",type:"address"}],name:"allowance",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"approve",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"account",type:"address"}],name:"balanceOf",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"decimals",outputs:[{internalType:"uint8",name:"",type:"uint8"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"subtractedValue",type:"uint256"}],name:"decreaseAllowance",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"addedValue",type:"uint256"}],name:"increaseAllowance",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"name",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"},{inputs:[],name:"symbol",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"},{inputs:[],name:"totalSupply",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"to",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"transfer",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"from",type:"address"},{internalType:"address",name:"to",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"transferFrom",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"}]},xr=mp;var bp="0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",yp="0xdac17f958d2ee523a2206206994597c13d831ec7",Cp=1e5,yi=class extends He{constructor(a,r){super();this.web3=a;this.api=r}web3;api;chainType="EVM";getAllowance(a){let r=a.token.tokenAddress,o=a.owner,s=a.spender;return this.getAllowanceByTokenAddress(r,o,s)}getAllowanceByTokenAddress(a,r,o){return this.getERC20Contract(a).methods.allowance(r,o).call()}async getTokenBalance(a){return await this.getERC20Contract(a.token.tokenAddress).methods.balanceOf(a.account).call()}async getNativeTokenBalance(a){return(await this.web3.eth.getBalance(a.account)).toString()}async approve(a){if(this.isUsdt(a.tokenAddress)&&await this.getAllowanceByTokenAddress(a.tokenAddress,a.owner,a.spender)!=="0"){let s=await this.buildRawTransactionApprove({...a,amount:"0"});await this.sendRawTransaction(s,a.chainSymbol)}let r=await this.buildRawTransactionApprove(a);return await this.sendRawTransaction(r,a.chainSymbol)}isUsdt(a){return a.toLowerCase()===yp}buildRawTransactionApprove(a){let{tokenAddress:r,spender:o,owner:s,amount:d}=a,g=this.getERC20Contract(r).methods.approve(o,d==null?bp:hr(d));return Promise.resolve({from:s,to:r,value:"0",data:g.encodeABI()})}async sendRawTransaction(a,r){let o=a,s={maxPriorityFeePerGas:void 0,maxFeePerGas:void 0};r==="POL"?o.gas=Cp:o.gas=await this.web3.eth.estimateGas(a);let{transactionHash:d}=await this.web3.eth.sendTransaction({...o,...s});return{txId:d.toString()}}getERC20Contract(a){return new this.web3.eth.Contract(xr.abi,a)}};var Vg=require("@coral-xyz/anchor"),jn=require("@solana/web3.js");var Hr=class extends He{constructor(a,r){super();this.solanaRpcUrl=a;this.api=r}solanaRpcUrl;api;chainType="SOLANA";approve(a){throw new J}buildRawTransactionApprove(a){throw new J}buildAnchorProvider(a){let r=new jn.Connection(this.solanaRpcUrl,"confirmed"),o=new jn.PublicKey(a);return new Vg.AnchorProvider(r,{publicKey:o},{preflightCommitment:"confirmed",commitment:"confirmed"})}getAllowance(a){throw new J}async getTokenBalance(a){let{account:r,token:o}=a;try{let s=_e(new jn.PublicKey(r),new jn.PublicKey(o.tokenAddress));return(await On(s,this.buildAnchorProvider(r))).amount.toString()}catch(s){if(s instanceof Error)return s.message.startsWith("Account does not exist"),"0";throw s}}async getNativeTokenBalance(a){return(await this.buildAnchorProvider(a.account).connection.getBalance(new jn.PublicKey(a.account))).toString()}};var Ss=require("@stellar/stellar-sdk");var Jr=class extends He{constructor(a,r,o){super();this.nodeRpcUrlsConfig=a;this.params=r;this.api=o}nodeRpcUrlsConfig;params;api;chainType="SRB";getAllowance(){throw new J}async getTokenBalance(a){if(!a.token.originTokenAddress)throw new f("OriginTokenAddress missing");let[r,o]=a.token.originTokenAddress.split(":"),s=new Ss.Horizon.Server(this.nodeRpcUrlsConfig.getNodeRpcUrl("STLR")),d;try{d=await s.loadAccount(a.account)}catch(l){if(l instanceof Ss.NotFoundError)return"0";throw l}let g=d.balances.find(l=>(l.asset_type==="credit_alphanum4"||l.asset_type==="credit_alphanum12")&&l.asset_code==r&&l.asset_issuer==o);return g?.balance?j(g.balance,x.getChainDecimalsByType(x.getChainProperty(a.token.chainSymbol).chainType)).toFixed():"0"}async getNativeTokenBalance(a){let d=(await new Ss.Horizon.Server(this.nodeRpcUrlsConfig.getNodeRpcUrl("STLR")).loadAccount(a.account)).balances.find(c=>c.asset_type==="native");return d?.balance?j(d.balance,x.getChainDecimalsByType(x.getChainProperty(a.chainSymbol).chainType)).toFixed():"0"}approve(){throw new J}buildRawTransactionApprove(){throw new J}};var zr=require("@clarigen/core"),Pg=require("@stacks/network");var Or=class extends He{constructor(a,r,o){super();this.nodeRpcUrl=a;this.params=r;this.api=o;let s=(0,Pg.createNetwork)({network:this.params.stxIsTestnet?"testnet":"mainnet",client:{baseUrl:this.nodeRpcUrl},apiKey:this.params.stxHeroApiKey});this.client=new zr.ClarigenClient(s,this.params.stxHeroApiKey)}nodeRpcUrl;params;api;chainType="STX";client;async getTokenBalance(a){let r=(0,zr.contractFactory)(At.ftToken,a.token.tokenAddress);return(await this.client.roOk(r.getBalance({owner:a.account}))).toString()}async getNativeTokenBalance(a){let r=`${this.nodeRpcUrl}/extended/v1/address/${a.account}/stx`,o=await fetch(r,{headers:this.params.stxHeroApiKey?{"x-api-key":this.params.stxHeroApiKey}:void 0});if(!o.ok)throw new Error(`Failed to fetch account: ${o.status}`);let d=(await o.json()).balance;return BigInt(d).toString()}getAllowance(a){throw new J}checkAllowance(a){throw new J}approve(a){throw new J}buildRawTransactionApprove(a){throw new J}};var Ur=class extends He{constructor(a,r,o){super();this.suiRpcUrl=a;this.params=r;this.api=o;this.suiClient=new Zn({url:this.suiRpcUrl,network:r.suiIsTestnet?"testnet":"mainnet"})}suiRpcUrl;params;api;chainType="SUI";suiClient;approve(a){throw new J}buildRawTransactionApprove(a){throw new J}getAllowance(a){throw new J}async getTokenBalance(a){if(!a.token.originTokenAddress)throw new f("SUI token must contain 'originTokenAddress'");return(await this.suiClient.getBalance({owner:a.account,coinType:a.token.originTokenAddress})).totalBalance}async getNativeTokenBalance(a){let r=await Ot(o=>this.suiClient.getCoins({owner:a.account,cursor:o}));return r.length===0?"0":r.reduce((o,s)=>o+BigInt(s.balance),BigInt(0)).toString()}};var Ip="0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",Ci=class extends He{constructor(a,r){super();this.tronWeb=a;this.api=r}tronWeb;api;chainType="TRX";async getAllowance(a){let{token:{tokenAddress:r},owner:o}=a;return(await(await this.getContract(r)).methods.allowance(o,a.spender).call()).toString()}async getTokenBalance(a){return(await(await this.getContract(a.token.tokenAddress)).balanceOf(a.account).call()).toString()}async getNativeTokenBalance(a){return(await this.tronWeb.trx.getBalance(a.account)).toString()}async approve(a){let r=await this.buildRawTransactionApprove(a);return await vr(this.tronWeb,r)}async buildRawTransactionApprove(a){let{tokenAddress:r,spender:o,owner:s,amount:d}=a,c=d==null?Ip:hr(d),g=[{type:"address",value:o},{type:"uint256",value:c}];return this.buildRawTransaction(r,"approve(address,uint256)",g,"0",s)}getContract(a){return this.tronWeb.contract(xr.abi,a)}async buildRawTransaction(a,r,o,s,d){let c=await this.tronWeb.transactionBuilder.triggerSmartContract(a,r,{callValue:+s},o,d);if(!c?.result?.result)throw new f("Unknown error: "+JSON.stringify(c,null,2));return c.transaction}};var Ia=class{constructor(n,a,r){this.api=n;this.nodeRpcUrlsConfig=a;this.params=r}api;nodeRpcUrlsConfig;params;async getAllowance(n,a){let r=await this.getChainTokenService(n.token.chainSymbol,n.owner,a).getAllowance(n);return P(r,n.token.decimals).toFixed()}async checkAllowance(n,a){return D(n.amount),O("amount",n.amount,n.token.decimals),this.getChainTokenService(n.token.chainSymbol,n.owner,a).checkAllowance(this.prepareCheckAllowanceParams(n))}async approve(n,a){return a.amount&&(eo(a.amount),O("amount",a.amount,a.token.decimals)),this.getChainTokenService(a.token.chainSymbol,a.owner,n).approve(this.prepareApproveParams(a))}async buildRawTransactionApprove(n,a){return n.amount&&(eo(n.amount),O("amount",n.amount,n.token.decimals)),this.getChainTokenService(n.token.chainSymbol,n.owner,a).buildRawTransactionApprove(this.prepareApproveParams(n))}async getTokenBalance(n,a){let r=await this.getChainTokenService(n.token.chainSymbol,n.account,a).getTokenBalance(n);return n.token.decimals?P(r,n.token.decimals).toFixed():r}async getNativeTokenBalance(n,a){let r=await this.getChainTokenService(n.chainSymbol,n.account,a).getNativeTokenBalance(n);return{int:r,float:P(r,x.getChainDecimalsByType(x.getChainProperty(n.chainSymbol).chainType)).toFixed()}}getChainTokenService(n,a,r){switch(x.getChainProperty(n).chainType){case"EVM":{if(r)return new yi(r,this.api);{let o=this.nodeRpcUrlsConfig.getNodeRpcUrl(n);return new yi(new Mg.Web3(o),this.api)}}case"TRX":{if(r)return new Ci(r,this.api);{let o=this.nodeRpcUrlsConfig.getNodeRpcUrl(n),s=new jg.TronWeb({fullHost:o});return s.setAddress(a),new Ci(s,this.api)}}case"SOLANA":{let o=this.nodeRpcUrlsConfig.getNodeRpcUrl(n);return new Hr(o,this.api)}case"SRB":return new Jr(this.nodeRpcUrlsConfig,this.params,this.api);case"SUI":return new Ur(this.nodeRpcUrlsConfig.getNodeRpcUrl(n),this.params,this.api);case"ALG":if(r){let o=r,s=ks.AlgorandClient.fromClients({algod:o});return new bi(s,this.api)}else{let o=this.nodeRpcUrlsConfig.getNodeRpcUrl(n),s=ks.AlgorandClient.fromConfig({algodConfig:{server:o}});return new bi(s,this.api)}case"STX":{let o=this.nodeRpcUrlsConfig.getNodeRpcUrl(n);return new Or(o,this.params,this.api)}}}prepareCheckAllowanceParams(n){return{...n,amount:j(n.amount,n.token.decimals)}}prepareApproveParams(n){return{tokenAddress:n.token.tokenAddress,owner:n.owner,spender:n.spender,chainSymbol:n.token.chainSymbol,amount:n.amount==null?void 0:(0,Xg.Big)(n.amount).toFixed()}}};var Dr=class{constructor(n,a){this.nodeRpcUrlsConfig=n;this.params=a;let r=new pa(a),o=new ma(r),s=new ba(o),d=new Ca(s);this.api=new ya(d,a),this.tokenService=new Ia(this.api,n,a)}nodeRpcUrlsConfig;params;api;tokenService;buildRawTransactionApprove(n,a){return this.tokenService.buildRawTransactionApprove(n,a)}checkAllowance(n,a){return this.tokenService.checkAllowance(n,a)}getAllowance(n,a){return this.tokenService.getAllowance(n,a)}};var ha=require("@solana/web3.js");var Qr=class{constructor(n,a){this.nodeRpcUrlsConfig=n;this.params=a}nodeRpcUrlsConfig;params;async addMemoToTx(n,a){if(a.length>28)throw new f("InvalidArgumentException memo cannot be more than 28 characters");let r=new ha.Connection(this.nodeRpcUrlsConfig.getNodeRpcUrl("SOL"),"confirmed"),o=await Bn(n,r),s=ha.TransactionMessage.decompile(n.message,{addressLookupTableAccounts:o}),d=s.instructions[s.instructions.length-1];if(!d?.keys)throw new f("Last instruction or its keys are invalid.");d.keys.push({pubkey:new ha.PublicKey(Buffer.from(a)),isSigner:!1,isWritable:!1}),n.message=s.compileToV0Message(o)}};var be=require("@stellar/stellar-sdk");var VZ=require("@stellar/stellar-sdk"),hp=VZ.contract.Spec,vp=VZ.contract.Client;var Ii=class extends vp{constructor(a){super(new hp(["AAAAAAAAAYlSZXR1cm5zIHRoZSBhbGxvd2FuY2UgZm9yIGBzcGVuZGVyYCB0byB0cmFuc2ZlciBmcm9tIGBmcm9tYC4KClRoZSBhbW91bnQgcmV0dXJuZWQgaXMgdGhlIGFtb3VudCB0aGF0IHNwZW5kZXIgaXMgYWxsb3dlZCB0byB0cmFuc2ZlcgpvdXQgb2YgZnJvbSdzIGJhbGFuY2UuIFdoZW4gdGhlIHNwZW5kZXIgdHJhbnNmZXJzIGFtb3VudHMsIHRoZSBhbGxvd2FuY2UKd2lsbCBiZSByZWR1Y2VkIGJ5IHRoZSBhbW91bnQgdHJhbnNmZXJlZC4KCiMgQXJndW1lbnRzCgoqIGBmcm9tYCAtIFRoZSBhZGRyZXNzIGhvbGRpbmcgdGhlIGJhbGFuY2Ugb2YgdG9rZW5zIHRvIGJlIGRyYXduIGZyb20uCiogYHNwZW5kZXJgIC0gVGhlIGFkZHJlc3Mgc3BlbmRpbmcgdGhlIHRva2VucyBoZWxkIGJ5IGBmcm9tYC4AAAAAAAAJYWxsb3dhbmNlAAAAAAAAAgAAAAAAAAAEZnJvbQAAABMAAAAAAAAAB3NwZW5kZXIAAAAAEwAAAAEAAAAL","AAAAAAAAAIlSZXR1cm5zIHRydWUgaWYgYGlkYCBpcyBhdXRob3JpemVkIHRvIHVzZSBpdHMgYmFsYW5jZS4KCiMgQXJndW1lbnRzCgoqIGBpZGAgLSBUaGUgYWRkcmVzcyBmb3Igd2hpY2ggdG9rZW4gYXV0aG9yaXphdGlvbiBpcyBiZWluZyBjaGVja2VkLgAAAAAAAAphdXRob3JpemVkAAAAAAABAAAAAAAAAAJpZAAAAAAAEwAAAAEAAAAB","AAAAAAAAA55TZXQgdGhlIGFsbG93YW5jZSBieSBgYW1vdW50YCBmb3IgYHNwZW5kZXJgIHRvIHRyYW5zZmVyL2J1cm4gZnJvbQpgZnJvbWAuCgpUaGUgYW1vdW50IHNldCBpcyB0aGUgYW1vdW50IHRoYXQgc3BlbmRlciBpcyBhcHByb3ZlZCB0byB0cmFuc2ZlciBvdXQgb2YKZnJvbSdzIGJhbGFuY2UuIFRoZSBzcGVuZGVyIHdpbGwgYmUgYWxsb3dlZCB0byB0cmFuc2ZlciBhbW91bnRzLCBhbmQKd2hlbiBhbiBhbW91bnQgaXMgdHJhbnNmZXJyZWQgdGhlIGFsbG93YW5jZSB3aWxsIGJlIHJlZHVjZWQgYnkgdGhlCmFtb3VudCB0cmFuc2ZlcmVkLgoKIyBBcmd1bWVudHMKCiogYGZyb21gIC0gVGhlIGFkZHJlc3MgaG9sZGluZyB0aGUgYmFsYW5jZSBvZiB0b2tlbnMgdG8gYmUgZHJhd24gZnJvbS4KKiBgc3BlbmRlcmAgLSBUaGUgYWRkcmVzcyBiZWluZyBhdXRob3JpemVkIHRvIHNwZW5kIHRoZSB0b2tlbnMgaGVsZCBieQpgZnJvbWAuCiogYGFtb3VudGAgLSBUaGUgdG9rZW5zIHRvIGJlIG1hZGUgYXZhaWxhYmxlIHRvIGBzcGVuZGVyYC4KKiBgZXhwaXJhdGlvbl9sZWRnZXJgIC0gVGhlIGxlZGdlciBudW1iZXIgd2hlcmUgdGhpcyBhbGxvd2FuY2UgZXhwaXJlcy4gQ2Fubm90CmJlIGxlc3MgdGhhbiB0aGUgY3VycmVudCBsZWRnZXIgbnVtYmVyIHVubGVzcyB0aGUgYW1vdW50IGlzIGJlaW5nIHNldCB0byAwLgpBbiBleHBpcmVkIGVudHJ5ICh3aGVyZSBleHBpcmF0aW9uX2xlZGdlciA8IHRoZSBjdXJyZW50IGxlZGdlciBudW1iZXIpCnNob3VsZCBiZSB0cmVhdGVkIGFzIGEgMCBhbW91bnQgYWxsb3dhbmNlLgoKIyBFdmVudHMKCkVtaXRzIGFuIGV2ZW50IHdpdGggdG9waWNzIGBbImFwcHJvdmUiLCBmcm9tOiBBZGRyZXNzLApzcGVuZGVyOiBBZGRyZXNzXSwgZGF0YSA9IFthbW91bnQ6IGkxMjgsIGV4cGlyYXRpb25fbGVkZ2VyOiB1MzJdYAAAAAAAB2FwcHJvdmUAAAAABAAAAAAAAAAEZnJvbQAAABMAAAAAAAAAB3NwZW5kZXIAAAAAEwAAAAAAAAAGYW1vdW50AAAAAAALAAAAAAAAABFleHBpcmF0aW9uX2xlZGdlcgAAAAAAAAQAAAAA","AAAAAAAAAJhSZXR1cm5zIHRoZSBiYWxhbmNlIG9mIGBpZGAuCgojIEFyZ3VtZW50cwoKKiBgaWRgIC0gVGhlIGFkZHJlc3MgZm9yIHdoaWNoIGEgYmFsYW5jZSBpcyBiZWluZyBxdWVyaWVkLiBJZiB0aGUKYWRkcmVzcyBoYXMgbm8gZXhpc3RpbmcgYmFsYW5jZSwgcmV0dXJucyAwLgAAAAdiYWxhbmNlAAAAAAEAAAAAAAAAAmlkAAAAAAATAAAAAQAAAAs=","AAAAAAAAAWRCdXJuIGBhbW91bnRgIGZyb20gYGZyb21gLgoKUmVkdWNlcyBmcm9tJ3MgYmFsYW5jZSBieSB0aGUgYW1vdW50LCB3aXRob3V0IHRyYW5zZmVycmluZyB0aGUgYmFsYW5jZQp0byBhbm90aGVyIGhvbGRlcidzIGJhbGFuY2UuCgojIEFyZ3VtZW50cwoKKiBgZnJvbWAgLSBUaGUgYWRkcmVzcyBob2xkaW5nIHRoZSBiYWxhbmNlIG9mIHRva2VucyB3aGljaCB3aWxsIGJlCmJ1cm5lZCBmcm9tLgoqIGBhbW91bnRgIC0gVGhlIGFtb3VudCBvZiB0b2tlbnMgdG8gYmUgYnVybmVkLgoKIyBFdmVudHMKCkVtaXRzIGFuIGV2ZW50IHdpdGggdG9waWNzIGBbImJ1cm4iLCBmcm9tOiBBZGRyZXNzXSwgZGF0YSA9IFthbW91bnQ6CmkxMjhdYAAAAARidXJuAAAAAgAAAAAAAAAEZnJvbQAAABMAAAAAAAAABmFtb3VudAAAAAAACwAAAAA=","AAAAAAAAAtxCdXJuIGBhbW91bnRgIGZyb20gYGZyb21gLCBjb25zdW1pbmcgdGhlIGFsbG93YW5jZSBvZiBgc3BlbmRlcmAuCgpSZWR1Y2VzIGZyb20ncyBiYWxhbmNlIGJ5IHRoZSBhbW91bnQsIHdpdGhvdXQgdHJhbnNmZXJyaW5nIHRoZSBiYWxhbmNlCnRvIGFub3RoZXIgaG9sZGVyJ3MgYmFsYW5jZS4KClRoZSBzcGVuZGVyIHdpbGwgYmUgYWxsb3dlZCB0byBidXJuIHRoZSBhbW91bnQgZnJvbSBmcm9tJ3MgYmFsYW5jZSwgaWYKdGhlIGFtb3VudCBpcyBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gdGhlIGFsbG93YW5jZSB0aGF0IHRoZSBzcGVuZGVyIGhhcwpvbiB0aGUgZnJvbSdzIGJhbGFuY2UuIFRoZSBzcGVuZGVyJ3MgYWxsb3dhbmNlIG9uIGZyb20ncyBiYWxhbmNlIHdpbGwgYmUKcmVkdWNlZCBieSB0aGUgYW1vdW50LgoKIyBBcmd1bWVudHMKCiogYHNwZW5kZXJgIC0gVGhlIGFkZHJlc3MgYXV0aG9yaXppbmcgdGhlIGJ1cm4sIGFuZCBoYXZpbmcgaXRzIGFsbG93YW5jZQpjb25zdW1lZCBkdXJpbmcgdGhlIGJ1cm4uCiogYGZyb21gIC0gVGhlIGFkZHJlc3MgaG9sZGluZyB0aGUgYmFsYW5jZSBvZiB0b2tlbnMgd2hpY2ggd2lsbCBiZQpidXJuZWQgZnJvbS4KKiBgYW1vdW50YCAtIFRoZSBhbW91bnQgb2YgdG9rZW5zIHRvIGJlIGJ1cm5lZC4KCiMgRXZlbnRzCgpFbWl0cyBhbiBldmVudCB3aXRoIHRvcGljcyBgWyJidXJuIiwgZnJvbTogQWRkcmVzc10sIGRhdGEgPSBbYW1vdW50OgppMTI4XWAAAAAJYnVybl9mcm9tAAAAAAAAAwAAAAAAAAAHc3BlbmRlcgAAAAATAAAAAAAAAARmcm9tAAAAEwAAAAAAAAAGYW1vdW50AAAAAAALAAAAAA==","AAAAAAAAAVNDbGF3YmFjayBgYW1vdW50YCBmcm9tIGBmcm9tYCBhY2NvdW50LiBgYW1vdW50YCBpcyBidXJuZWQgaW4gdGhlCmNsYXdiYWNrIHByb2Nlc3MuCgojIEFyZ3VtZW50cwoKKiBgZnJvbWAgLSBUaGUgYWRkcmVzcyBob2xkaW5nIHRoZSBiYWxhbmNlIGZyb20gd2hpY2ggdGhlIGNsYXdiYWNrIHdpbGwKdGFrZSB0b2tlbnMuCiogYGFtb3VudGAgLSBUaGUgYW1vdW50IG9mIHRva2VucyB0byBiZSBjbGF3ZWQgYmFjay4KCiMgRXZlbnRzCgpFbWl0cyBhbiBldmVudCB3aXRoIHRvcGljcyBgWyJjbGF3YmFjayIsIGFkbWluOiBBZGRyZXNzLCB0bzogQWRkcmVzc10sCmRhdGEgPSBbYW1vdW50OiBpMTI4XWAAAAAACGNsYXdiYWNrAAAAAgAAAAAAAAAEZnJvbQAAABMAAAAAAAAABmFtb3VudAAAAAAACwAAAAA=","AAAAAAAAAIBSZXR1cm5zIHRoZSBudW1iZXIgb2YgZGVjaW1hbHMgdXNlZCB0byByZXByZXNlbnQgYW1vdW50cyBvZiB0aGlzIHRva2VuLgoKIyBQYW5pY3MKCklmIHRoZSBjb250cmFjdCBoYXMgbm90IHlldCBiZWVuIGluaXRpYWxpemVkLgAAAAhkZWNpbWFscwAAAAAAAAABAAAABA==","AAAAAAAAAPVNaW50cyBgYW1vdW50YCB0byBgdG9gLgoKIyBBcmd1bWVudHMKCiogYHRvYCAtIFRoZSBhZGRyZXNzIHdoaWNoIHdpbGwgcmVjZWl2ZSB0aGUgbWludGVkIHRva2Vucy4KKiBgYW1vdW50YCAtIFRoZSBhbW91bnQgb2YgdG9rZW5zIHRvIGJlIG1pbnRlZC4KCiMgRXZlbnRzCgpFbWl0cyBhbiBldmVudCB3aXRoIHRvcGljcyBgWyJtaW50IiwgYWRtaW46IEFkZHJlc3MsIHRvOiBBZGRyZXNzXSwgZGF0YQo9IFthbW91bnQ6IGkxMjhdYAAAAAAAAARtaW50AAAAAgAAAAAAAAACdG8AAAAAABMAAAAAAAAABmFtb3VudAAAAAAACwAAAAA=","AAAAAAAAAFlSZXR1cm5zIHRoZSBuYW1lIGZvciB0aGlzIHRva2VuLgoKIyBQYW5pY3MKCklmIHRoZSBjb250cmFjdCBoYXMgbm90IHlldCBiZWVuIGluaXRpYWxpemVkLgAAAAAAAARuYW1lAAAAAAAAAAEAAAAQ","AAAAAAAAAQxTZXRzIHRoZSBhZG1pbmlzdHJhdG9yIHRvIHRoZSBzcGVjaWZpZWQgYWRkcmVzcyBgbmV3X2FkbWluYC4KCiMgQXJndW1lbnRzCgoqIGBuZXdfYWRtaW5gIC0gVGhlIGFkZHJlc3Mgd2hpY2ggd2lsbCBoZW5jZWZvcnRoIGJlIHRoZSBhZG1pbmlzdHJhdG9yCm9mIHRoaXMgdG9rZW4gY29udHJhY3QuCgojIEV2ZW50cwoKRW1pdHMgYW4gZXZlbnQgd2l0aCB0b3BpY3MgYFsic2V0X2FkbWluIiwgYWRtaW46IEFkZHJlc3NdLCBkYXRhID0KW25ld19hZG1pbjogQWRkcmVzc11gAAAACXNldF9hZG1pbgAAAAAAAAEAAAAAAAAACW5ld19hZG1pbgAAAAAAABMAAAAA","AAAAAAAAAEZSZXR1cm5zIHRoZSBhZG1pbiBvZiB0aGUgY29udHJhY3QuCgojIFBhbmljcwoKSWYgdGhlIGFkbWluIGlzIG5vdCBzZXQuAAAAAAAFYWRtaW4AAAAAAAAAAAAAAQAAABM=","AAAAAAAAAVBTZXRzIHdoZXRoZXIgdGhlIGFjY291bnQgaXMgYXV0aG9yaXplZCB0byB1c2UgaXRzIGJhbGFuY2UuIElmCmBhdXRob3JpemVkYCBpcyB0cnVlLCBgaWRgIHNob3VsZCBiZSBhYmxlIHRvIHVzZSBpdHMgYmFsYW5jZS4KCiMgQXJndW1lbnRzCgoqIGBpZGAgLSBUaGUgYWRkcmVzcyBiZWluZyAoZGUtKWF1dGhvcml6ZWQuCiogYGF1dGhvcml6ZWAgLSBXaGV0aGVyIG9yIG5vdCBgaWRgIGNhbiB1c2UgaXRzIGJhbGFuY2UuCgojIEV2ZW50cwoKRW1pdHMgYW4gZXZlbnQgd2l0aCB0b3BpY3MgYFsic2V0X2F1dGhvcml6ZWQiLCBpZDogQWRkcmVzc10sIGRhdGEgPQpbYXV0aG9yaXplOiBib29sXWAAAAAOc2V0X2F1dGhvcml6ZWQAAAAAAAIAAAAAAAAAAmlkAAAAAAATAAAAAAAAAAlhdXRob3JpemUAAAAAAAABAAAAAA==","AAAAAAAAAFtSZXR1cm5zIHRoZSBzeW1ib2wgZm9yIHRoaXMgdG9rZW4uCgojIFBhbmljcwoKSWYgdGhlIGNvbnRyYWN0IGhhcyBub3QgeWV0IGJlZW4gaW5pdGlhbGl6ZWQuAAAAAAZzeW1ib2wAAAAAAAAAAAABAAAAEA==","AAAAAAAAAWRUcmFuc2ZlciBgYW1vdW50YCBmcm9tIGBmcm9tYCB0byBgdG9gLgoKIyBBcmd1bWVudHMKCiogYGZyb21gIC0gVGhlIGFkZHJlc3MgaG9sZGluZyB0aGUgYmFsYW5jZSBvZiB0b2tlbnMgd2hpY2ggd2lsbCBiZQp3aXRoZHJhd24gZnJvbS4KKiBgdG9gIC0gVGhlIGFkZHJlc3Mgd2hpY2ggd2lsbCByZWNlaXZlIHRoZSB0cmFuc2ZlcnJlZCB0b2tlbnMuCiogYGFtb3VudGAgLSBUaGUgYW1vdW50IG9mIHRva2VucyB0byBiZSB0cmFuc2ZlcnJlZC4KCiMgRXZlbnRzCgpFbWl0cyBhbiBldmVudCB3aXRoIHRvcGljcyBgWyJ0cmFuc2ZlciIsIGZyb206IEFkZHJlc3MsIHRvOiBBZGRyZXNzXSwKZGF0YSA9IFthbW91bnQ6IGkxMjhdYAAAAAh0cmFuc2ZlcgAAAAMAAAAAAAAABGZyb20AAAATAAAAAAAAAAJ0bwAAAAAAEwAAAAAAAAAGYW1vdW50AAAAAAALAAAAAA==","AAAAAAAAAzNUcmFuc2ZlciBgYW1vdW50YCBmcm9tIGBmcm9tYCB0byBgdG9gLCBjb25zdW1pbmcgdGhlIGFsbG93YW5jZSB0aGF0CmBzcGVuZGVyYCBoYXMgb24gYGZyb21gJ3MgYmFsYW5jZS4gQXV0aG9yaXplZCBieSBzcGVuZGVyCihgc3BlbmRlci5yZXF1aXJlX2F1dGgoKWApLgoKVGhlIHNwZW5kZXIgd2lsbCBiZSBhbGxvd2VkIHRvIHRyYW5zZmVyIHRoZSBhbW91bnQgZnJvbSBmcm9tJ3MgYmFsYW5jZQppZiB0aGUgYW1vdW50IGlzIGxlc3MgdGhhbiBvciBlcXVhbCB0byB0aGUgYWxsb3dhbmNlIHRoYXQgdGhlIHNwZW5kZXIKaGFzIG9uIHRoZSBmcm9tJ3MgYmFsYW5jZS4gVGhlIHNwZW5kZXIncyBhbGxvd2FuY2Ugb24gZnJvbSdzIGJhbGFuY2UKd2lsbCBiZSByZWR1Y2VkIGJ5IHRoZSBhbW91bnQuCgojIEFyZ3VtZW50cwoKKiBgc3BlbmRlcmAgLSBUaGUgYWRkcmVzcyBhdXRob3JpemluZyB0aGUgdHJhbnNmZXIsIGFuZCBoYXZpbmcgaXRzCmFsbG93YW5jZSBjb25zdW1lZCBkdXJpbmcgdGhlIHRyYW5zZmVyLgoqIGBmcm9tYCAtIFRoZSBhZGRyZXNzIGhvbGRpbmcgdGhlIGJhbGFuY2Ugb2YgdG9rZW5zIHdoaWNoIHdpbGwgYmUKd2l0aGRyYXduIGZyb20uCiogYHRvYCAtIFRoZSBhZGRyZXNzIHdoaWNoIHdpbGwgcmVjZWl2ZSB0aGUgdHJhbnNmZXJyZWQgdG9rZW5zLgoqIGBhbW91bnRgIC0gVGhlIGFtb3VudCBvZiB0b2tlbnMgdG8gYmUgdHJhbnNmZXJyZWQuCgojIEV2ZW50cwoKRW1pdHMgYW4gZXZlbnQgd2l0aCB0b3BpY3MgYFsidHJhbnNmZXIiLCBmcm9tOiBBZGRyZXNzLCB0bzogQWRkcmVzc10sCmRhdGEgPSBbYW1vdW50OiBpMTI4XWAAAAAADXRyYW5zZmVyX2Zyb20AAAAAAAAEAAAAAAAAAAdzcGVuZGVyAAAAABMAAAAAAAAABGZyb20AAAATAAAAAAAAAAJ0bwAAAAAAEwAAAAAAAAAGYW1vdW50AAAAAAALAAAAAA=="]),a);this.options=a}options;fromJSON={allowance:this.txFromJSON,authorized:this.txFromJSON,approve:this.txFromJSON,balance:this.txFromJSON,burn:this.txFromJSON,burn_from:this.txFromJSON,clawback:this.txFromJSON,decimals:this.txFromJSON,mint:this.txFromJSON,name:this.txFromJSON,set_admin:this.txFromJSON,admin:this.txFromJSON,set_authorized:this.txFromJSON,symbol:this.txFromJSON,transfer:this.txFromJSON,transfer_from:this.txFromJSON}};var fp=100,Rp=180,Kr=class{constructor(n,a){this.nodeRpcUrlsConfig=n;this.params=a}nodeRpcUrlsConfig;params;async buildChangeTrustLineXdrTx(n){let r=await new be.Horizon.Server(this.nodeRpcUrlsConfig.getNodeRpcUrl("STLR")).loadAccount(n.sender),s=await this.getContract(Ii,n.tokenAddress).name();if(ca(s))throw new f;let d=da(s);if(!d)throw new f;let[c,g]=d.split(":");if(c===void 0||g===void 0)throw new f("Invalid token name format. Expected format 'symbol:srbTokenAddress'");let l=new be.Asset(c,g),A=be.Operation.changeTrust({asset:l,limit:n.limit});return new be.TransactionBuilder(r,{fee:fp.toString(10),networkPassphrase:this.params.sorobanNetworkPassphrase}).addOperation(A).setTimeout(Rp).build().toXDR()}async getBalanceLine(n,a){let o=await this.getContract(Ii,a).name();if(ca(o))throw new f;let s=da(o);if(!s)throw new f;let[d,c]=s.split(":"),g=this.nodeRpcUrlsConfig.getNodeRpcUrl("STLR");return(await new be.Horizon.Server(g).loadAccount(n)).balances.find(m=>(m.asset_type==="credit_alphanum4"||m.asset_type==="credit_alphanum12")&&m.asset_code==d&&m.asset_issuer==c)}async submitTransactionStellar(n){let a=new be.Horizon.Server(this.nodeRpcUrlsConfig.getNodeRpcUrl("STLR")),r=be.TransactionBuilder.fromXDR(n,this.nodeRpcUrlsConfig.getNodeRpcUrl("STLR"));return await a.submitTransaction(r)}async simulateAndCheckRestoreTxRequiredSoroban(n,a){let r=new be.rpc.Server(this.nodeRpcUrlsConfig.getNodeRpcUrl("SRB")),o=await r.getAccount(a),s=be.TransactionBuilder.fromXDR(n,this.params.sorobanNetworkPassphrase),d=await r.simulateTransaction(s);if(be.rpc.Api.isSimulationRestore(d))return new be.TransactionBuilder(o,{fee:(+be.BASE_FEE+ +d.restorePreamble.minResourceFee).toString(),networkPassphrase:this.params.sorobanNetworkPassphrase}).setSorobanData(d.restorePreamble.transactionData.build()).addOperation(be.Operation.restoreFootprint({})).setTimeout(be.TimeoutInfinite).build().toXDR()}async sendTransactionSoroban(n){let a=new be.rpc.Server(this.nodeRpcUrlsConfig.getNodeRpcUrl("SRB")),r=be.TransactionBuilder.fromXDR(n,this.params.sorobanNetworkPassphrase);return a.sendTransaction(r)}async confirmTx(n,a=15){let r=new be.rpc.Server(this.nodeRpcUrlsConfig.getNodeRpcUrl("SRB")),o=await js(()=>r.getTransaction(n),d=>d.status===be.rpc.Api.GetTransactionStatus.NOT_FOUND,a);if(o.length===0)throw new f("No transaction responses found.");let s=o[o.length-1];if(!s)throw new f("Unexpected error: last response is undefined.");return s}getContract(n,a){let r={contractId:a,networkPassphrase:this.params.sorobanNetworkPassphrase,rpcUrl:this.nodeRpcUrlsConfig.getNodeRpcUrl("SRB")};return new n(r)}};var Er=class{constructor(n,a,r){this.nodeRpcUrlsConfig=n;this.params=a;this.api=r}nodeRpcUrlsConfig;params;api;_suiBridgeService;async buildSendTxFromCustomTx(n,a,r){return this.suiBridgeService.buildRawTransactionSendFromCustomTx(n,a,r)}get suiBridgeService(){return this._suiBridgeService||(this._suiBridgeService=new oa(this.nodeRpcUrlsConfig,this.params,this.api)),this._suiBridgeService}};var _r=class{constructor(n){this.service=n;this.srb=new Kr(n.nodeRpcUrlsConfig,n.params),this.sol=new Qr(n.nodeRpcUrlsConfig,n.params),this.sui=new Er(n.nodeRpcUrlsConfig,n.params,n.api),this.evm=new Dr(n.nodeRpcUrlsConfig,n.params),this.alg=new jr(n.nodeRpcUrlsConfig)}service;srb;sol;sui;evm;alg};var gt=(r=>(r.WITH_NATIVE_CURRENCY="native",r.WITH_STABLECOIN="stablecoin",r.WITH_ABR="abr",r))(gt||{}),Va=(a=>(a.INT="int",a.FLOAT="float",a))(Va||{});var Ae=require("big.js");var hi=class{constructor(n){this.nodeRpcUrls=n}nodeRpcUrls;getNodeRpcUrl(n){let a=this.nodeRpcUrls[n];if(a!==void 0)return a;throw new Ya(n)}},$r=class{constructor(n,a=fa){this.nodeRpcUrlsConfig=n;x.addChainsProperties(a.additionalChainsProperties);let r=new pa(a),o=new ma(r),s=new ba(o),d=new Ca(s);this.api=new ya(d,a),this.tokenService=new Ia(this.api,n,a),this.bridge=new fr(this.api,n,a,this.tokenService),this.pool=new kr(this.api,n,a,this.tokenService),this.yield=new Xr(this.api,n,a,this.tokenService),this.params=a}nodeRpcUrlsConfig;api;tokenService;params;bridge;pool;yield;async chainDetailsMap(n){return this.api.getChainDetailsMap(n)}async tokens(n){return this.api.tokens(n)}async tokensByChain(n,a){let o=(await this.api.getChainDetailsMap(a))[n];return o?o.tokens:[]}async getTransferStatus(n,a){return this.api.getTransferStatus(n,a)}async getGasBalance(n,a){return this.api.getGasBalance(n,a)}async checkAddress(){return new Promise(n=>{n({status:"OK",gasBalance:null})})}async getPendingStatusInfo(n,a,r,o){D(n);let s;a=="float"?(O("amount",n,r.decimals),s=j(n,r.decimals).toFixed()):s=n;let d=St(s,r,await Se(this.api,r)),c=await Se(this.api,o),g=this.getAmountFromVUsdFormatted(d,o,c),l,A=await this.api.getPendingInfo();for(let u in A[o.chainSymbol]){let m=A[o.chainSymbol];if(!m)throw new f("Cannot find pending info for "+o.chainSymbol);l=m[u]}if(l){let u=Hs(l.totalSentAmount,c),m=this.getAmountFromVUsdFormatted(d,o,u),y;return(0,Ae.Big)(m.int).gt(g.int)?y={min:g,max:m}:y={min:m,max:g},{pendingTxs:l.pendingTxs,pendingAmount:{int:Ve(l.totalSentAmount,3,o.decimals).toFixed(0),float:P(l.totalSentAmount,3).toFixed()},estimatedAmount:y}}return{pendingTxs:0,pendingAmount:{int:"0",float:"0"},estimatedAmount:{min:g,max:g}}}async getTokenBalance(n,a){return this.tokenService.getTokenBalance(n,a)}async getNativeTokenBalance(n,a){return this.tokenService.getNativeTokenBalance(n,a)}async calculateFeePercentOnSourceChain(n,a){D(n),O("amountFloat",n,a.decimals);let r=j(n,a.decimals);if(r.eq(0))return 0;let o=St(r,a,await Se(this.api,a)),s=Ke(o,a.decimals);return ao(r,s)}async calculateFeePercentOnDestinationChain(n,a,r){D(n),O("amountFloat",n,a.decimals);let o=j(n,a.decimals);if(o.eq(0))return 0;let s=St(o,a,await Se(this.api,a)),d=Za(s,r,await Se(this.api,r)),c=Ke(s,r.decimals);return ao(c,d)}async getAmountToBeReceivedAndGasFeeOptions(n,a,r,o){return D(n),O("amountToSendFloat",n,a.decimals),{amountToSendFloat:(0,Ae.Big)(n).toFixed(),amountToBeReceivedFloat:await this.getAmountToBeReceived(n,a,r,o),gasFeeOptions:await this.getGasFeeOptions(a,r,o)}}async getAmountToSendAndGasFeeOptions(n,a,r,o){return D(n),O("amountToBeReceivedFloat",n,r.decimals),{amountToSendFloat:await this.getAmountToSend(n,a,r,o),amountToBeReceivedFloat:(0,Ae.Big)(n).toFixed(),gasFeeOptions:await this.getGasFeeOptions(a,r,o)}}async getAmountToBeReceived(n,a,r,o){return this.getAmountToBeReceivedCompute(n,a,r,o,async()=>await Se(this.api,a),async()=>await Se(this.api,r))}async getAmountToBeReceivedFromChain(n,a,r,o,s,d){return this.getAmountToBeReceivedCompute(n,a,r,o,async()=>await this.pool.getPoolInfoFromChain(a,s),async()=>await this.pool.getPoolInfoFromChain(r,d))}async getAmountToBeReceivedCompute(n,a,r,o=1,s,d){switch(o){case 1:case 2:return this.getAmountToBeReceivedComputeWithPools(n,a,r,await s(),await d());case 3:case 4:return this.getAmountToBeReceivedComputeCctp(n,a,r,o);case 6:return this.getAmountToBeReceivedComputeXReserve(n,a,r);case 5:return this.getAmountToBeReceivedComputeOft(n,a,r)}}getAmountToBeReceivedComputeWithPools(n,a,r,o,s){D(n),O("amountToSendFloat",n,a.decimals);let d=j(n,a.decimals),c=St(d,a,o);return this.getAmountFromVUsdFormatted(c,r,s).float}getAmountToBeReceivedComputeCctp(n,a,r,o){D(n),O("amountToSendFloat",n,a.decimals);let s=j(n,a.decimals);switch(o){case 3:{if(!a.cctpAddress||!r.cctpAddress||!a.cctpFeeShare)throw new we("Such route does not support CCTP protocol");let d=s.mul((0,Ae.Big)(1).minus(a.cctpFeeShare)).round(0,Ae.Big.roundUp),c=Ve(d,a.decimals,r.decimals).round(0);return P(c,r.decimals).toFixed()}case 4:{if(!a.cctpV2Address||!r.cctpV2Address||!a.cctpV2FeeShare)throw new we("Such route does not support CCTP V2 protocol");let d=s.mul((0,Ae.Big)(1).minus(a.cctpV2FeeShare)).round(0,Ae.Big.roundUp),c=Ve(d,a.decimals,r.decimals).round(0);return P(c,r.decimals).toFixed()}}}getAmountToBeReceivedComputeXReserve(n,a,r){D(n),O("amountToSendFloat",n,a.decimals);let o=this.getXReserveConfig(a,r),d=j(n,a.decimals).mul((0,Ae.Big)(1).minus(o.feeShare)).minus(o.feeConst).round(0,Ae.Big.roundDown);if(d.lte(0)){let g=(0,Ae.Big)(o.feeConst).div((0,Ae.Big)(1).minus(o.feeShare)),l=P(g,a.decimals);throw new f(`Amount is too low for xReserve route: amount must be greater than ${l.toFixed(2,Ae.Big.roundUp)} ${a.symbol??""}`.trim())}let c=Ve(d,a.decimals,r.decimals).round(0);return P(c,r.decimals).toFixed()}async getAmountToBeReceivedComputeOft(n,a,r){D(n),O("amountToSendFloat",n,a.decimals);let o=j(n,a.decimals);if(!a.oftBridgeAddress||!r.oftBridgeAddress||a.oftId!==r.oftId)throw new Ze("Such route does not support OFT protocol");let{adminFeeShareWithExtras:s}=await this.api.getReceiveTransactionCost({sourceChainId:a.allbridgeChainId,destinationChainId:r.allbridgeChainId,messenger:5,sourceToken:a.tokenAddress});if(!s)throw new Ze("Such route does not support OFT protocol");let d=o.mul((0,Ae.Big)(1).minus(s)).round(0,Ae.Big.roundUp),c=Ve(d,a.decimals,r.decimals).round(0);return P(c,r.decimals).toFixed()}async getAmountToSend(n,a,r,o){return this.getAmountToSendCompute(n,a,r,o,()=>Se(this.api,a),()=>Se(this.api,r))}async getAmountToSendFromChain(n,a,r,o,s,d){return this.getAmountToSendCompute(n,a,r,o,()=>this.pool.getPoolInfoFromChain(a,s),()=>this.pool.getPoolInfoFromChain(r,d))}async getAmountToSendCompute(n,a,r,o=1,s,d){switch(o){case 1:case 2:return this.getAmountToSendComputeWithPools(n,a,r,await s(),await d());case 3:case 4:return this.getAmountToSendComputeCctp(n,a,r,o);case 6:return this.getAmountToSendComputeXReserve(n,a,r);case 5:return this.getAmountToSendComputeOft(n,a,r)}}getAmountToSendComputeWithPools(n,a,r,o,s){D(n),O("amountToBeReceivedFloat",n,r.decimals);let d=j(n,r.decimals),c=Os(d,r,s),g=Js(c,a,o);if((0,Ae.Big)(g).lte(0))throw new Zt;return P(g,a.decimals).toFixed()}getAmountToSendComputeCctp(n,a,r,o){D(n),O("amountToBeReceivedFloat",n,r.decimals);let s=j(n,r.decimals);switch(o){case 3:{if(!a.cctpAddress||!r.cctpAddress||!a.cctpFeeShare)throw new we("Such route does not support CCTP protocol");let d=s.div((0,Ae.Big)(1).minus(a.cctpFeeShare)).round(0,Ae.Big.roundDown),c=Ve(d,r.decimals,a.decimals).round(0);return P(c,a.decimals).toFixed()}case 4:{if(!a.cctpV2Address||!r.cctpV2Address||!a.cctpV2FeeShare)throw new we("Such route does not support CCTP V2 protocol");let d=s.div((0,Ae.Big)(1).minus(a.cctpV2FeeShare)).round(0,Ae.Big.roundDown),c=Ve(d,r.decimals,a.decimals).round(0);return P(c,a.decimals).toFixed()}}}getAmountToSendComputeXReserve(n,a,r){D(n),O("amountToBeReceivedFloat",n,r.decimals);let o=this.getXReserveConfig(a,r),s=j(n,r.decimals),c=Ve(s,r.decimals,a.decimals).round(0).plus(o.feeConst).div((0,Ae.Big)(1).minus(o.feeShare)).round(0,Ae.Big.roundUp);if(c.lte(0))throw new f("Amount is too low for xReserve route");return P(c,a.decimals).toFixed()}getXReserveConfig(n,a){if(!n.xReserve||!a.xReserve)throw new f("Such route does not support xReserve protocol");if((0,Ae.Big)(n.xReserve.feeShare).gte(1))throw new f("xReserve feeShare must be less than 1");return n.xReserve}async getAmountToSendComputeOft(n,a,r){D(n),O("amountToBeReceivedFloat",n,r.decimals);let o=j(n,r.decimals);if(!a.oftId||!r.oftId||!a.oftBridgeAddress||a.oftId!==r.oftId)throw new Ze("Such route does not support OFT protocol");let{adminFeeShareWithExtras:s}=await this.api.getReceiveTransactionCost({sourceChainId:a.allbridgeChainId,destinationChainId:r.allbridgeChainId,messenger:5,sourceToken:a.tokenAddress});if(!s)throw new Ze("Such route does not support OFT protocol");let d=o.div((0,Ae.Big)(1).minus(s)).round(0,Ae.Big.roundDown),c=Ve(d,r.decimals,a.decimals).round(0);return P(c,a.decimals).toFixed()}async getGasFeeOptions(n,a,r){return so(n,a.allbridgeChainId,r,this.api)}getAverageTransferTime(n,a,r){return n.transferTime?.[a.chainSymbol]?.[r]??null}async getPoolInfoByToken(n){return await this.api.getPoolInfoByKey({chainSymbol:n.chainSymbol,poolAddress:n.poolAddress})}async refreshPoolInfo(n){if(n){let r=(n instanceof Array?n:[n]).map(o=>({chainSymbol:o.chainSymbol,poolAddress:o.poolAddress}));return this.api.refreshPoolInfo(r)}return this.api.refreshPoolInfo()}aprInPercents(n){return Us(n)}async getExtraGasMaxLimits(n,a,r){return await co(n,a,r,this.api)}async getVUsdFromAmount(n,a,r){D(n);let o;a=="float"?(O("amount",n,r.decimals),o=j(n,r.decimals).toFixed()):o=n;let s=St(o,r,await Se(this.api,r));return{int:s,float:P(s,3).toFixed()}}async getAmountFromVUsd(n,a){return this.getAmountFromVUsdFormatted(n,a,await Se(this.api,a))}getAmountFromVUsdFormatted(n,a,r){D(n);let o=Za(n,a,r);if((0,Ae.Big)(o).lt(0))throw new Zt;return{int:o,float:P(o,a.decimals).toFixed()}}async swapAndBridgeFeeCalculation(n,a,r){return Yg(n,{decimals:a.decimals,feeShare:a.feeShare,poolInfo:await Se(this.api,a)},{decimals:r.decimals,feeShare:r.feeShare,poolInfo:await Se(this.api,r)})}async swapAndBridgeFeeCalculationReverse(n,a,r){let o=wg(n,{decimals:a.decimals,feeShare:a.feeShare,poolInfo:await Se(this.api,a)},{decimals:r.decimals,feeShare:r.feeShare,poolInfo:await Se(this.api,r)}),s=o.swapFromVUsdCalcResult.amountIncludingCommissionInTokenPrecision;if((0,Ae.Big)(s).lt(0))throw new Zt;return o}async getSendAmountDetails(n,a,r,o){D(n);let s;return a=="float"?(O("amount",n,r.decimals),s=j(n,r.decimals).toFixed()):s=n,Wg(s,r,await Se(this.api,r),o,await Se(this.api,o))}};function Tp(i){return"solanaRpcUrl"in i}var Vs=class{params;bridge;pool;yield;utils;service;constructor(n,a=fa){let r;Tp(n)?r=new hi({SOL:n.solanaRpcUrl,TRX:n.tronRpcUrl}):r=new hi(n),this.service=new $r(r,a),this.bridge=this.service.bridge,this.pool=this.service.pool,this.yield=this.service.yield,this.utils=new _r(this.service),this.params=a}async chainDetailsMap(n="swap"){return this.service.chainDetailsMap(n)}async tokens(n="swap"){return this.service.tokens(n)}async tokensByChain(n,a="swap"){return this.service.tokensByChain(n,a)}async getTransferStatus(n,a){return this.service.getTransferStatus(n,a)}async getGasBalance(n,a){return this.service.getGasBalance(n,a)}async checkAddress(n,a,r){return await this.service.checkAddress()}async getPendingStatusInfo(n,a,r,o){return this.service.getPendingStatusInfo(n,a,r,o)}async getTokenBalance(n,a){return this.service.getTokenBalance(n,a)}async getNativeTokenBalance(n,a){return this.service.getNativeTokenBalance(n,a)}async calculateFeePercentOnSourceChain(n,a){return this.service.calculateFeePercentOnSourceChain(n,a)}async calculateFeePercentOnDestinationChain(n,a,r){return this.service.calculateFeePercentOnDestinationChain(n,a,r)}async getAmountToBeReceivedAndGasFeeOptions(n,a,r,o){return this.service.getAmountToBeReceivedAndGasFeeOptions(n,a,r,o)}async getAmountToSendAndGasFeeOptions(n,a,r,o){return this.service.getAmountToSendAndGasFeeOptions(n,a,r,o)}async getAmountToBeReceived(n,a,r,o=1){return this.service.getAmountToBeReceived(n,a,r,o)}async getAmountToBeReceivedFromChain(n,a,r,o=1,s,d){return this.service.getAmountToBeReceivedFromChain(n,a,r,o,s,d)}getAmountToBeReceivedFromPools(n,a,r,o,s,d=1){switch(d){case 1:case 2:return this.service.getAmountToBeReceivedComputeWithPools(n,a,r,o,s);case 3:case 4:return this.service.getAmountToBeReceivedComputeCctp(n,a,r,d);case 6:return this.service.getAmountToBeReceivedComputeXReserve(n,a,r)}}async getAmountToSend(n,a,r,o=1){return this.service.getAmountToSend(n,a,r,o)}async getAmountToSendFromChain(n,a,r,o=1,s,d){return this.service.getAmountToSendFromChain(n,a,r,o,s,d)}getAmountToSendFromPools(n,a,r,o,s,d=1){switch(d){case 1:case 2:return this.service.getAmountToSendComputeWithPools(n,a,r,o,s);case 3:case 4:return this.service.getAmountToSendComputeCctp(n,a,r,d);case 6:return this.service.getAmountToSendComputeXReserve(n,a,r)}}async getGasFeeOptions(n,a,r){return this.service.getGasFeeOptions(n,a,r)}getAverageTransferTime(n,a,r){return this.service.getAverageTransferTime(n,a,r)}async getPoolInfoByToken(n){return this.service.getPoolInfoByToken(n)}async refreshPoolInfo(n){return this.service.refreshPoolInfo(n)}aprInPercents(n){return this.service.aprInPercents(n)}async getExtraGasMaxLimits(n,a,r=1){return this.service.getExtraGasMaxLimits(n,a,r)}async getVUsdFromAmount(n,a,r){return this.service.getVUsdFromAmount(n,a,r)}async getAmountFromVUsd(n,a){return this.service.getAmountFromVUsd(n,a)}async swapAndBridgeFeeCalculation(n,a,r){return this.service.swapAndBridgeFeeCalculation(n,a,r)}async swapAndBridgeFeeCalculationReverse(n,a,r){return this.service.swapAndBridgeFeeCalculationReverse(n,a,r)}async getSendAmountDetails(n,a,r,o){return this.service.getSendAmountDetails(n,a,r,o)}};0&&(module.exports={AddressStatus,AllbridgeCoreSdk,AmountFormat,AmountNotEnoughError,ArgumentInvalidDecimalsError,CCTPDoesNotSupportedError,ChainSymbol,ChainType,ErrorCode,ExtraGasMaxLimitExceededError,FeePaymentMethod,InsufficientPoolLiquidityError,InvalidAmountError,InvalidGasFeePaymentOptionError,InvalidMessengerOptionError,InvalidTxError,JupiterError,Messenger,MethodNotSupportedError,NodeRpcUrlNotInitializedError,OFTDoesNotSupportedError,SdkError,SdkRootError,SolanaAutoTxFee,TimeoutError,TxTooLargeError,VerifyTxError,YieldDoesNotSupportedError,assertYieldIsSupported,isYieldSupported,mainnet,nodeRpcUrlsDefault,nodeUrlsDefault});
6
+ Y - is value of virtual usd`,networks:{},state:{schema:{global:{ints:15,bytes:4},local:{ints:2,bytes:0}},keys:{global:{feeShareBP:{keyType:"AVMString",valueType:"AVMUint64",key:"ZmVlU2hhcmVCUA=="},router:{keyType:"AVMString",valueType:"address",key:"cm91dGVy"},tokenBalance:{keyType:"AVMString",valueType:"AVMUint64",key:"dG9rZW5CYWxhbmNl"},vUsdBalance:{keyType:"AVMString",valueType:"AVMUint64",key:"dlVzZEJhbGFuY2U="},balanceRatioMinBP:{keyType:"AVMString",valueType:"AVMUint64",key:"YmFsYW5jZVJhdGlvTWluQlA="},reserves:{keyType:"AVMString",valueType:"AVMUint64",key:"cmVzZXJ2ZXM="},a:{keyType:"AVMString",valueType:"AVMUint64",key:"YQ=="},d:{keyType:"AVMString",valueType:"AVMUint64",key:"ZA=="},tokenAmountReduce:{keyType:"AVMString",valueType:"AVMUint64",key:"dG9rZW5BbW91bnRSZWR1Y2U="},tokenAmountIncrease:{keyType:"AVMString",valueType:"AVMUint64",key:"dG9rZW5BbW91bnRJbmNyZWFzZQ=="},stopAuthority:{keyType:"AVMString",valueType:"address",key:"c3RvcEF1dGhvcml0eQ=="},canDeposit:{keyType:"AVMString",valueType:"AVMUint64",key:"Y2FuRGVwb3NpdA=="},canWithdraw:{keyType:"AVMString",valueType:"AVMUint64",key:"Y2FuV2l0aGRyYXc="},asset:{keyType:"AVMString",valueType:"AVMUint64",key:"YXNzZXQ="},adminFeeShareBP:{keyType:"AVMString",valueType:"AVMUint64",key:"YWRtaW5GZWVTaGFyZUJQ"},totalSupply:{keyType:"AVMString",valueType:"AVMUint64",key:"dG90YWxTdXBwbHk="},accRewardPerShareP:{keyType:"AVMString",valueType:"AVMBytes",key:"YWNjUmV3YXJkUGVyU2hhcmVQ"},adminFeeAmount:{keyType:"AVMString",valueType:"AVMUint64",key:"YWRtaW5GZWVBbW91bnQ="},owner:{keyType:"AVMString",valueType:"address",key:"b3duZXI="}},local:{balance:{keyType:"AVMString",valueType:"AVMUint64",key:"YmFsYW5jZQ=="},userRewardDebt:{keyType:"AVMString",valueType:"AVMUint64",key:"dXNlclJld2FyZERlYnQ="}},box:{}},maps:{global:{},local:{},box:{}}},bareActions:{create:[],call:[]},sourceInfo:{approval:{sourceInfo:[{pc:[2040],errorMessage:'"Pool: withdraw prohibited'},{pc:[984],errorMessage:"Asset must go to app"},{pc:[998],errorMessage:"CloseTo not allowed"},{pc:[548],errorMessage:"OnCompletion must be CloseOut && can only call when not creating"},{pc:[372],errorMessage:"OnCompletion must be NoOp"},{pc:[559],errorMessage:"OnCompletion must be OptIn && can only call when not creating"},{pc:[536],errorMessage:"OnCompletion must be one of NoOp, OptIn && can only call when not creating"},{pc:[3277],errorMessage:"Only owner"},{pc:[955],errorMessage:"Pool: deposit prohibited"},{pc:[1959],errorMessage:"Pool: is not stopAuthority"},{pc:[2024],errorMessage:"Pool: low token balance"},{pc:[2e3],errorMessage:"Pool: low vUSD balance"},{pc:[1949],errorMessage:"Pool: only router"},{pc:[1480,2289],errorMessage:"Pool: reserves"},{pc:[1521],errorMessage:"Pool: slippage"},{pc:[1605,1667],errorMessage:"Pool: too large"},{pc:[1008],errorMessage:"Pool: too little"},{pc:[1100],errorMessage:"Pool: too much"},{pc:[2308],errorMessage:"Pool: zero D changes"},{pc:[2278],errorMessage:"Pool: zero changes"},{pc:[991],errorMessage:"Rekey not allowed"},{pc:[855],errorMessage:"RewardManager: claim rewards before close out"},{pc:[2061],errorMessage:"RewardManager: not enough amount"},{pc:[1851],errorMessage:"RewardManager: too high"},{pc:[850],errorMessage:"RewardManager: withdraw LP before close out"},{pc:[977],errorMessage:"Wrong asset"},{pc:[757],errorMessage:"asset exists"},{pc:[750,865,954,966,975,1013,1028,1038,1057,1067,1081,1091,1106,1144,1243,1274,1285,1294,1304,1312,1329,1426,1449,1471,1496,1526,1549,1623,1634,1767,1804,1869,1877,1882,1947,1957,1971,1981,1998,2022,2039,2045,2069,2122,2154,2206,2210,2248,2275,2283,2304,2313,2349,2358,2506,2511,2519,2627,2635,2676,2684,3037,3065,3073,3091,3111,3125,3186,3220,3275],errorMessage:"check GlobalState exists"},{pc:[832,848,1757,1784,2056,2093,2108,3031,3051,3136,3158,3172],errorMessage:"check LocalState exists"},{pc:[1220,1407],errorMessage:"invalid number of bytes for arc4.bool"},{pc:[669,677,1202,1379,1717,1734,1912,1931],errorMessage:"invalid number of bytes for arc4.static_array<arc4.uint8, 32>"},{pc:[685,694,703,712,820,932,1177,1186,1210,1387,1397,1596,1658,1842],errorMessage:"invalid number of bytes for arc4.uint64"},{pc:[2724],errorMessage:"n must be non-negative"},{pc:[1127,1158,2230,2262],errorMessage:"overflow"},{pc:[924],errorMessage:"transaction type is axfer"}],pcOffsetMethod:"none"},clear:{sourceInfo:[],pcOffsetMethod:"none"}},source:{approval:"I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMCAxIDggMzIgMTAwMDAKICAgIGJ5dGVjYmxvY2sgInRva2VuQmFsYW5jZSIgInZVc2RCYWxhbmNlIiAiYXNzZXQiICJiYWxhbmNlIiAicmVzZXJ2ZXMiICJ1c2VyUmV3YXJkRGVidCIgImQiICJ0b3RhbFN1cHBseSIgImFjY1Jld2FyZFBlclNoYXJlUCIgMHgwMTAwMDAwMDAwMDAwMCAweDAxICJhZG1pbkZlZUFtb3VudCIgImNhbkRlcG9zaXQiICJjYW5XaXRoZHJhdyIgIm93bmVyIiAiZmVlU2hhcmVCUCIgImJhbGFuY2VSYXRpb01pbkJQIiAweDAyICJhZG1pbkZlZVNoYXJlQlAiICJhIiAicm91dGVyIiAic3RvcEF1dGhvcml0eSIgInRva2VuQW1vdW50UmVkdWNlIiAidG9rZW5BbW91bnRJbmNyZWFzZSIgMHgxNTFmN2M3NSAweGJhODE4MDc2IDB4MDMgMHgwNjgxMDEgMHgwMTAwMDAwMDAwMDAwMDAwMDAKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBibnogbWFpbl9hZnRlcl9pZl9lbHNlQDIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoyOAogICAgLy8gYWRtaW5GZWVTaGFyZUJQID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogQlAgLyA1IH0pOyAvLyBEZWZhdWx0IGFkbWluIGZlZSBpcyAyMCUKICAgIGJ5dGVjIDE4IC8vICJhZG1pbkZlZVNoYXJlQlAiCiAgICBwdXNoaW50IDIwMDAgLy8gMjAwMAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoyOQogICAgLy8gdG90YWxTdXBwbHkgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgYnl0ZWMgNyAvLyAidG90YWxTdXBwbHkiCiAgICBpbnRjXzAgLy8gMAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czozMAogICAgLy8gYWNjUmV3YXJkUGVyU2hhcmVQID0gR2xvYmFsU3RhdGU8YmlndWludD4oeyBpbml0aWFsVmFsdWU6IDBuIH0pOwogICAgYnl0ZWMgOCAvLyAiYWNjUmV3YXJkUGVyU2hhcmVQIgogICAgcHVzaGJ5dGVzIDB4CiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjMxCiAgICAvLyBhZG1pbkZlZUFtb3VudCA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBieXRlYyAxMSAvLyAiYWRtaW5GZWVBbW91bnQiCiAgICBpbnRjXzAgLy8gMAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ2CiAgICAvLyB0b2tlbkJhbGFuY2UgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgYnl0ZWNfMCAvLyAidG9rZW5CYWxhbmNlIgogICAgaW50Y18wIC8vIDAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NwogICAgLy8gdlVzZEJhbGFuY2UgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgYnl0ZWNfMSAvLyAidlVzZEJhbGFuY2UiCiAgICBpbnRjXzAgLy8gMAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ5CiAgICAvLyByZXNlcnZlcyA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBieXRlYyA0IC8vICJyZXNlcnZlcyIKICAgIGludGNfMCAvLyAwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NTEKICAgIC8vIGQgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgYnl0ZWMgNiAvLyAiZCIKICAgIGludGNfMCAvLyAwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NTcKICAgIC8vIGNhbkRlcG9zaXQgPSBHbG9iYWxTdGF0ZTxib29sZWFuPih7IGluaXRpYWxWYWx1ZTogdHJ1ZSB9KTsvLyBpcyBkZXBvc2l0IG9wZXJhdGlvbiBhbGxvd2VkCiAgICBieXRlYyAxMiAvLyAiY2FuRGVwb3NpdCIKICAgIGludGNfMSAvLyAxCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NTgKICAgIC8vIGNhbldpdGhkcmF3ID0gR2xvYmFsU3RhdGU8Ym9vbGVhbj4oeyBpbml0aWFsVmFsdWU6IHRydWUgfSk7Ly8gaXMgd2l0aGRyYXduIG9wZXJhdGlvbiBhbGxvd2VkCiAgICBieXRlYyAxMyAvLyAiY2FuV2l0aGRyYXciCiAgICBpbnRjXzEgLy8gMQogICAgYXBwX2dsb2JhbF9wdXQKCm1haW5fYWZ0ZXJfaWZfZWxzZUAyOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MzgKICAgIC8vIGV4cG9ydCBjbGFzcyBQb29sIGV4dGVuZHMgUmV3YXJkTWFuYWdlciBpbXBsZW1lbnRzIENvbnZlbnRpb25hbFJvdXRpbmcgewogICAgcHVzaGJ5dGVzcyAweDAxYTNhM2ZmIDB4MDQ1OWI3YWMgMHg5YjRiODIzNCAvLyBtZXRob2QgIm9wdEluVG9BcHBsaWNhdGlvbigpdm9pZCIsIG1ldGhvZCAiY2xvc2VPdXRPZkFwcGxpY2F0aW9uKHVpbnQ2NCl2b2lkIiwgbWV0aG9kICJkZXBvc2l0KGF4ZmVyLHVpbnQ2NCl2b2lkIgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAogICAgbWF0Y2ggbWFpbl9vcHRJblRvQXBwbGljYXRpb25fcm91dGVANCBtYWluX2Nsb3NlT3V0T2ZBcHBsaWNhdGlvbl9yb3V0ZUA1IG1haW5fZGVwb3NpdF9yb3V0ZUA2CgptYWluX3N3aXRjaF9jYXNlX25leHRANzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjM4CiAgICAvLyBleHBvcnQgY2xhc3MgUG9vbCBleHRlbmRzIFJld2FyZE1hbmFnZXIgaW1wbGVtZW50cyBDb252ZW50aW9uYWxSb3V0aW5nIHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gbXVzdCBiZSBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYnogbWFpbl9jcmVhdGVfTm9PcEAyOAogICAgcHVzaGJ5dGVzcyAweDc2MTBhNDYwIDB4ZTNhZWIyNWMgMHhkOTc4YWQxNCAweDBkMWI0YzA2IDB4NzViZjlhMjggMHhmNDkzZDdlZCAweDhkNWNiNmRmIDB4ZmUwNGE1Y2UgMHgwMjhlMDg1OSAweDQxZmM5NjZlIDB4YWJmMjAwMTQgMHgwNGIxNjFmMSAweDY2NTkxY2NmIDB4YTVhZTZiZDEgMHhhMDRjNWJjNCAweDM2MWI2MTU5IDB4NTM4ZTkxMjcgMHhlMTdiYWZiNCAvLyBtZXRob2QgIm9wdEluQXNzZXQoKXZvaWQiLCBtZXRob2QgIndpdGhkcmF3KHVpbnQ2NCx1aW50NjQpdm9pZCIsIG1ldGhvZCAic3dhcFRvVlVzZChhZGRyZXNzLHVpbnQ2NCxib29sKXVpbnQ2NCIsIG1ldGhvZCAic3dhcEZyb21WVXNkKGFkZHJlc3MsdWludDY0LHVpbnQ2NCxib29sKXVpbnQ2NCIsIG1ldGhvZCAic2V0RmVlU2hhcmUodWludDY0KXZvaWQiLCBtZXRob2QgImFkanVzdFRvdGFsTHBBbW91bnQoKXZvaWQiLCBtZXRob2QgInNldEJhbGFuY2VSYXRpb01pbkJQKHVpbnQ2NCl2b2lkIiwgbWV0aG9kICJzdG9wRGVwb3NpdCgpdm9pZCIsIG1ldGhvZCAic3RhcnREZXBvc2l0KCl2b2lkIiwgbWV0aG9kICJzdG9wV2l0aGRyYXcoKXZvaWQiLCBtZXRob2QgInN0YXJ0V2l0aGRyYXcoKXZvaWQiLCBtZXRob2QgInNldFN0b3BBdXRob3JpdHkoYWRkcmVzcyl2b2lkIiwgbWV0aG9kICJzZXRSb3V0ZXIoYWRkcmVzcyl2b2lkIiwgbWV0aG9kICJjbGFpbVJld2FyZHMoKXZvaWQiLCBtZXRob2QgInNldEFkbWluRmVlU2hhcmUodWludDY0KXZvaWQiLCBtZXRob2QgImNsYWltQWRtaW5GZWUoKXZvaWQiLCBtZXRob2QgInBlbmRpbmdSZXdhcmQoYWRkcmVzcyl1aW50NjQiLCBtZXRob2QgInRyYW5zZmVyT3duZXJzaGlwKGFkZHJlc3Mpdm9pZCIKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDAKICAgIG1hdGNoIG9wdEluQXNzZXQgd2l0aGRyYXcgc3dhcFRvVlVzZCBzd2FwRnJvbVZVc2Qgc2V0RmVlU2hhcmUgYWRqdXN0VG90YWxMcEFtb3VudCBzZXRCYWxhbmNlUmF0aW9NaW5CUCBzdG9wRGVwb3NpdCBzdGFydERlcG9zaXQgc3RvcFdpdGhkcmF3IHN0YXJ0V2l0aGRyYXcgc2V0U3RvcEF1dGhvcml0eSBzZXRSb3V0ZXIgY2xhaW1SZXdhcmRzIHNldEFkbWluRmVlU2hhcmUgY2xhaW1BZG1pbkZlZSBwZW5kaW5nUmV3YXJkIHRyYW5zZmVyT3duZXJzaGlwCiAgICBlcnIKCm1haW5fY3JlYXRlX05vT3BAMjg6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozOAogICAgLy8gZXhwb3J0IGNsYXNzIFBvb2wgZXh0ZW5kcyBSZXdhcmRNYW5hZ2VyIGltcGxlbWVudHMgQ29udmVudGlvbmFsUm91dGluZyB7CiAgICBwdXNoYnl0ZXMgMHg1MTZkMzQ3YiAvLyBtZXRob2QgImNyZWF0ZUFwcGxpY2F0aW9uKGFkZHJlc3MsYWRkcmVzcyx1aW50NjQsdWludDY0LHVpbnQ2NCx1aW50NjQpdm9pZCIKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDAKICAgIG1hdGNoIGNyZWF0ZUFwcGxpY2F0aW9uCiAgICBlcnIKCm1haW5fZGVwb3NpdF9yb3V0ZUA2OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MTUwCiAgICAvLyBAYWJpbWV0aG9kKHsgYWxsb3dBY3Rpb25zOiBbJ05vT3AnLCAnT3B0SW4nXSwgZGVmYXVsdEFyZ3VtZW50czogeyBidWRnZXQ6IHsgY29uc3RhbnQ6IDMwMDAgfSB9IH0pCiAgICBpbnRjXzEgLy8gMQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgc2hsCiAgICBwdXNoaW50IDMgLy8gMwogICAgJgogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgICYmCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIG11c3QgYmUgb25lIG9mIE5vT3AsIE9wdEluICYmIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGIgZGVwb3NpdAoKbWFpbl9jbG9zZU91dE9mQXBwbGljYXRpb25fcm91dGVANToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjg0CiAgICAvLyBAYWJpbWV0aG9kKHsgZGVmYXVsdEFyZ3VtZW50czogeyBidWRnZXQ6IHsgY29uc3RhbnQ6IDMwMDAgfSB9IH0pCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBwdXNoaW50IDIgLy8gQ2xvc2VPdXQKICAgID09CiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgJiYKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gbXVzdCBiZSBDbG9zZU91dCAmJiBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBiIGNsb3NlT3V0T2ZBcHBsaWNhdGlvbgoKbWFpbl9vcHRJblRvQXBwbGljYXRpb25fcm91dGVANDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjczCiAgICAvLyBvcHRJblRvQXBwbGljYXRpb24oKTogdm9pZCB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBpbnRjXzEgLy8gT3B0SW4KICAgID09CiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgJiYKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gbXVzdCBiZSBPcHRJbiAmJiBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBiIG9wdEluVG9BcHBsaWNhdGlvbgoKCi8vIF9wdXlhX2xpYi51dGlsLmVuc3VyZV9idWRnZXQocmVxdWlyZWRfYnVkZ2V0OiB1aW50NjQsIGZlZV9zb3VyY2U6IHVpbnQ2NCkgLT4gdm9pZDoKZW5zdXJlX2J1ZGdldDoKICAgIHByb3RvIDIgMAogICAgZnJhbWVfZGlnIC0yCiAgICBwdXNoaW50IDEwIC8vIDEwCiAgICArCgplbnN1cmVfYnVkZ2V0X3doaWxlX3RvcEAxOgogICAgZnJhbWVfZGlnIDAKICAgIGdsb2JhbCBPcGNvZGVCdWRnZXQKICAgID4KICAgIGJ6IGVuc3VyZV9idWRnZXRfYWZ0ZXJfd2hpbGVANgogICAgaXR4bl9iZWdpbgogICAgcHVzaGludCA2IC8vIGFwcGwKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIHB1c2hpbnQgNSAvLyBEZWxldGVBcHBsaWNhdGlvbgogICAgaXR4bl9maWVsZCBPbkNvbXBsZXRpb24KICAgIGJ5dGVjIDI3IC8vIDB4MDY4MTAxCiAgICBpdHhuX2ZpZWxkIEFwcHJvdmFsUHJvZ3JhbQogICAgYnl0ZWMgMjcgLy8gMHgwNjgxMDEKICAgIGl0eG5fZmllbGQgQ2xlYXJTdGF0ZVByb2dyYW0KICAgIGZyYW1lX2RpZyAtMQogICAgc3dpdGNoIGVuc3VyZV9idWRnZXRfc3dpdGNoX2Nhc2VfMEAzIGVuc3VyZV9idWRnZXRfc3dpdGNoX2Nhc2VfMUA0CgplbnN1cmVfYnVkZ2V0X3N3aXRjaF9jYXNlX25leHRANToKICAgIGl0eG5fc3VibWl0CiAgICBiIGVuc3VyZV9idWRnZXRfd2hpbGVfdG9wQDEKCmVuc3VyZV9idWRnZXRfc3dpdGNoX2Nhc2VfMUA0OgogICAgZ2xvYmFsIE1pblR4bkZlZQogICAgaXR4bl9maWVsZCBGZWUKICAgIGIgZW5zdXJlX2J1ZGdldF9zd2l0Y2hfY2FzZV9uZXh0QDUKCmVuc3VyZV9idWRnZXRfc3dpdGNoX2Nhc2VfMEAzOgogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICBiIGVuc3VyZV9idWRnZXRfc3dpdGNoX2Nhc2VfbmV4dEA1CgplbnN1cmVfYnVkZ2V0X2FmdGVyX3doaWxlQDY6CiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3V0aWxzLmFsZ28udHM6OmJpZ3VpbnRUb1VpbnQ2NE1vZHVsbyh2OiBieXRlcykgLT4gdWludDY0OgpiaWd1aW50VG9VaW50NjRNb2R1bG86CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3V0aWxzLmFsZ28udHM6MTUKICAgIC8vIGV4cG9ydCBmdW5jdGlvbiBiaWd1aW50VG9VaW50NjRNb2R1bG8odjogYmlndWludCk6IHVpbnQ2NCB7CiAgICBwcm90byAxIDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvdXRpbHMuYWxnby50czoxNwogICAgLy8gY29uc3QgbGVuID0gb3AubGVuKGIpOwogICAgZnJhbWVfZGlnIC0xCiAgICBsZW4KICAgIGR1cAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy91dGlscy5hbGdvLnRzOjE4CiAgICAvLyBjb25zdCBzdGFydDogdWludDY0ID0gbGVuID4gOCA/IChsZW4gLSA4KSA6IDA7CiAgICBpbnRjXzIgLy8gOAogICAgPgogICAgYnogYmlndWludFRvVWludDY0TW9kdWxvX3Rlcm5hcnlfZmFsc2VAMgogICAgZnJhbWVfZGlnIDAKICAgIGludGNfMiAvLyA4CiAgICAtCgpiaWd1aW50VG9VaW50NjRNb2R1bG9fdGVybmFyeV9tZXJnZUAzOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy91dGlscy5hbGdvLnRzOjE5CiAgICAvLyBjb25zdCBsYXN0OCA9IGIuc2xpY2Uoc3RhcnQpOyAgICAgICAgICAgLy8ga2VlcCBsZWFzdC1zaWduaWZpY2FudCA4IGJ5dGVzCiAgICBkdXAKICAgIGZyYW1lX2RpZyAwCiAgICBkdXAKICAgIGNvdmVyIDMKICAgID49CiAgICBkaWcgMgogICAgc3dhcAogICAgc2VsZWN0CiAgICBmcmFtZV9kaWcgLTEKICAgIHN3YXAKICAgIHVuY292ZXIgMgogICAgc3Vic3RyaW5nMwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy91dGlscy5hbGdvLnRzOjIwCiAgICAvLyByZXR1cm4gb3AuYnRvaShsYXN0OCk7ICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNvbnZlcnQgdG8gdWludDY0CiAgICBidG9pCiAgICBzd2FwCiAgICByZXRzdWIKCmJpZ3VpbnRUb1VpbnQ2NE1vZHVsb190ZXJuYXJ5X2ZhbHNlQDI6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3V0aWxzLmFsZ28udHM6MTgKICAgIC8vIGNvbnN0IHN0YXJ0OiB1aW50NjQgPSBsZW4gPiA4ID8gKGxlbiAtIDgpIDogMDsKICAgIGludGNfMCAvLyAwCiAgICBiIGJpZ3VpbnRUb1VpbnQ2NE1vZHVsb190ZXJuYXJ5X21lcmdlQDMKCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo6UG9vbC5jcmVhdGVBcHBsaWNhdGlvbltyb3V0aW5nXSgpIC0+IHZvaWQ6CmNyZWF0ZUFwcGxpY2F0aW9uOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NjAKICAgIC8vIGNyZWF0ZUFwcGxpY2F0aW9uKG93bmVyOiBBZGRyZXNzLCByb3V0ZXI6IEFkZHJlc3MsIGE6IHVpbnQ2NCwgYXNzZXQ6IEFzc2V0LCBmZWVTaGFyZUJQOiB1aW50NjQsIGJhbGFuY2VSYXRpb01pbkJQOiB1aW50NjQpOiB2b2lkIHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzMgLy8gMzIKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQuc3RhdGljX2FycmF5PGFyYzQudWludDgsIDMyPgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZHVwCiAgICBsZW4KICAgIGludGNfMyAvLyAzMgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC5zdGF0aWNfYXJyYXk8YXJjNC51aW50OCwgMzI+CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAzCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyA0CiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyA1CiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyA2CiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL293bmFibGUuYWxnby50czo2CiAgICAvLyBwcm90ZWN0ZWQgb3duZXIgPSBHbG9iYWxTdGF0ZTxBZGRyZXNzPigpOwogICAgYnl0ZWMgMTQgLy8gIm93bmVyIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9vd25hYmxlLmFsZ28udHM6OQogICAgLy8gdGhpcy5vd25lci52YWx1ZSA9IG93bmVyOwogICAgZGlnIDYKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MjcKICAgIC8vIGFzc2V0ID0gR2xvYmFsU3RhdGU8QXNzZXQ+KCk7CiAgICBieXRlY18yIC8vICJhc3NldCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czozOAogICAgLy8gdGhpcy5hc3NldC52YWx1ZSA9IGFzc2V0OwogICAgdW5jb3ZlciAzCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NTAKICAgIC8vIGEgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KCk7CiAgICBieXRlYyAxOSAvLyAiYSIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjYyCiAgICAvLyB0aGlzLmEudmFsdWUgPSBhOwogICAgdW5jb3ZlciAzCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDUKICAgIC8vIHJvdXRlciA9IEdsb2JhbFN0YXRlPEFkZHJlc3M+KCk7Ly8gaXMgZGVwb3NpdCBvcGVyYXRpb24gYWxsb3dlZAogICAgYnl0ZWMgMjAgLy8gInJvdXRlciIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjYzCiAgICAvLyB0aGlzLnJvdXRlci52YWx1ZSA9IHJvdXRlcjsKICAgIHVuY292ZXIgMwogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjU2CiAgICAvLyBwcml2YXRlIHN0b3BBdXRob3JpdHkgPSBHbG9iYWxTdGF0ZTxBZGRyZXNzPigpOy8vIGNhbiByZXN0cmljdCBkZXBvc2l0IG9yIHdpdGhkcmF3IG9wZXJhdGlvbnMKICAgIGJ5dGVjIDIxIC8vICJzdG9wQXV0aG9yaXR5IgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NjQKICAgIC8vIHRoaXMuc3RvcEF1dGhvcml0eS52YWx1ZSA9IG93bmVyOwogICAgdW5jb3ZlciAzCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDQKICAgIC8vIGZlZVNoYXJlQlAgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KCk7CiAgICBieXRlYyAxNSAvLyAiZmVlU2hhcmVCUCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjY1CiAgICAvLyB0aGlzLmZlZVNoYXJlQlAudmFsdWUgPSBmZWVTaGFyZUJQOwogICAgdW5jb3ZlciAyCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDgKICAgIC8vIGJhbGFuY2VSYXRpb01pbkJQID0gR2xvYmFsU3RhdGU8dWludDY0PigpOwogICAgYnl0ZWMgMTYgLy8gImJhbGFuY2VSYXRpb01pbkJQIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NjYKICAgIC8vIHRoaXMuYmFsYW5jZVJhdGlvTWluQlAudmFsdWUgPSBiYWxhbmNlUmF0aW9NaW5CUDsKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo2OAogICAgLy8gY29uc3QgZGVjaW1hbHMgPSB0aGlzLmFzc2V0LnZhbHVlLmRlY2ltYWxzOwogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoyNwogICAgLy8gYXNzZXQgPSBHbG9iYWxTdGF0ZTxBc3NldD4oKTsKICAgIGJ5dGVjXzIgLy8gImFzc2V0IgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NjgKICAgIC8vIGNvbnN0IGRlY2ltYWxzID0gdGhpcy5hc3NldC52YWx1ZS5kZWNpbWFsczsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICBhc3NldF9wYXJhbXNfZ2V0IEFzc2V0RGVjaW1hbHMKICAgIHN3YXAKICAgIGR1cAogICAgdW5jb3ZlciAyCiAgICBhc3NlcnQgLy8gYXNzZXQgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo2OQogICAgLy8gdGhpcy50b2tlbkFtb3VudFJlZHVjZS52YWx1ZSA9IGRlY2ltYWxzID4gU1lTVEVNX1BSRUNJU0lPTiA/IDEwICoqIChkZWNpbWFscyAtIFNZU1RFTV9QUkVDSVNJT04pIDogMDsKICAgIHB1c2hpbnQgMyAvLyAzCiAgICA+CiAgICBieiBjcmVhdGVBcHBsaWNhdGlvbl90ZXJuYXJ5X2ZhbHNlQDMKICAgIGR1cAogICAgcHVzaGludCAzIC8vIDMKICAgIC0KICAgIHB1c2hpbnQgMTAgLy8gMTAKICAgIHN3YXAKICAgIGV4cAoKY3JlYXRlQXBwbGljYXRpb25fdGVybmFyeV9tZXJnZUA0OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NTMKICAgIC8vIHByaXZhdGUgdG9rZW5BbW91bnRSZWR1Y2UgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KCk7CiAgICBieXRlYyAyMiAvLyAidG9rZW5BbW91bnRSZWR1Y2UiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo2OQogICAgLy8gdGhpcy50b2tlbkFtb3VudFJlZHVjZS52YWx1ZSA9IGRlY2ltYWxzID4gU1lTVEVNX1BSRUNJU0lPTiA/IDEwICoqIChkZWNpbWFscyAtIFNZU1RFTV9QUkVDSVNJT04pIDogMDsKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo3MAogICAgLy8gdGhpcy50b2tlbkFtb3VudEluY3JlYXNlLnZhbHVlID0gZGVjaW1hbHMgPCBTWVNURU1fUFJFQ0lTSU9OID8gMTAgKiogKFNZU1RFTV9QUkVDSVNJT04gLSBkZWNpbWFscykgOiAwOwogICAgZHVwCiAgICBwdXNoaW50IDMgLy8gMwogICAgPAogICAgYnogY3JlYXRlQXBwbGljYXRpb25fdGVybmFyeV9mYWxzZUA2CiAgICBwdXNoaW50IDMgLy8gMwogICAgZGlnIDEKICAgIC0KICAgIHB1c2hpbnQgMTAgLy8gMTAKICAgIHN3YXAKICAgIGV4cAoKY3JlYXRlQXBwbGljYXRpb25fdGVybmFyeV9tZXJnZUA3OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NTQKICAgIC8vIHByaXZhdGUgdG9rZW5BbW91bnRJbmNyZWFzZSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oKTsKICAgIGJ5dGVjIDIzIC8vICJ0b2tlbkFtb3VudEluY3JlYXNlIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NzAKICAgIC8vIHRoaXMudG9rZW5BbW91bnRJbmNyZWFzZS52YWx1ZSA9IGRlY2ltYWxzIDwgU1lTVEVNX1BSRUNJU0lPTiA/IDEwICoqIChTWVNURU1fUFJFQ0lTSU9OIC0gZGVjaW1hbHMpIDogMDsKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo2MAogICAgLy8gY3JlYXRlQXBwbGljYXRpb24ob3duZXI6IEFkZHJlc3MsIHJvdXRlcjogQWRkcmVzcywgYTogdWludDY0LCBhc3NldDogQXNzZXQsIGZlZVNoYXJlQlA6IHVpbnQ2NCwgYmFsYW5jZVJhdGlvTWluQlA6IHVpbnQ2NCk6IHZvaWQgewogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKY3JlYXRlQXBwbGljYXRpb25fdGVybmFyeV9mYWxzZUA2OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NzAKICAgIC8vIHRoaXMudG9rZW5BbW91bnRJbmNyZWFzZS52YWx1ZSA9IGRlY2ltYWxzIDwgU1lTVEVNX1BSRUNJU0lPTiA/IDEwICoqIChTWVNURU1fUFJFQ0lTSU9OIC0gZGVjaW1hbHMpIDogMDsKICAgIGludGNfMCAvLyAwCiAgICBiIGNyZWF0ZUFwcGxpY2F0aW9uX3Rlcm5hcnlfbWVyZ2VANwoKY3JlYXRlQXBwbGljYXRpb25fdGVybmFyeV9mYWxzZUAzOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NjkKICAgIC8vIHRoaXMudG9rZW5BbW91bnRSZWR1Y2UudmFsdWUgPSBkZWNpbWFscyA+IFNZU1RFTV9QUkVDSVNJT04gPyAxMCAqKiAoZGVjaW1hbHMgLSBTWVNURU1fUFJFQ0lTSU9OKSA6IDA7CiAgICBpbnRjXzAgLy8gMAogICAgYiBjcmVhdGVBcHBsaWNhdGlvbl90ZXJuYXJ5X21lcmdlQDQKCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo6UG9vbC5vcHRJblRvQXBwbGljYXRpb25bcm91dGluZ10oKSAtPiB2b2lkOgpvcHRJblRvQXBwbGljYXRpb246CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo3NAogICAgLy8gc3VwZXIub3B0SW5Ub0FwcGxpY2F0aW9uKFR4bi5zZW5kZXIpOwogICAgdHhuIFNlbmRlcgogICAgY2FsbHN1YiBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6OlJld2FyZE1hbmFnZXIub3B0SW5Ub0FwcGxpY2F0aW9uCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo3MwogICAgLy8gb3B0SW5Ub0FwcGxpY2F0aW9uKCk6IHZvaWQgewogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjpQb29sLmNsb3NlT3V0T2ZBcHBsaWNhdGlvbltyb3V0aW5nXSgpIC0+IHZvaWQ6CmNsb3NlT3V0T2ZBcHBsaWNhdGlvbjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjg0CiAgICAvLyBAYWJpbWV0aG9kKHsgZGVmYXVsdEFyZ3VtZW50czogeyBidWRnZXQ6IHsgY29uc3RhbnQ6IDMwMDAgfSB9IH0pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo4NgogICAgLy8gY29uc3Qgc2VuZGVyID0gVHhuLnNlbmRlcjsKICAgIHR4biBTZW5kZXIKICAgIGR1cAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6ODgKICAgIC8vIGNvbnN0IGxwQmFsYW5jZTogdWludDY0ID0gdGhpcy5iYWxhbmNlKHNlbmRlcikudmFsdWU7CiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjMzCiAgICAvLyBiYWxhbmNlID0gTG9jYWxTdGF0ZTx1aW50NjQ+KCk7CiAgICBieXRlY18zIC8vICJiYWxhbmNlIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6ODgKICAgIC8vIGNvbnN0IGxwQmFsYW5jZTogdWludDY0ID0gdGhpcy5iYWxhbmNlKHNlbmRlcikudmFsdWU7CiAgICBhcHBfbG9jYWxfZ2V0X2V4CiAgICBzd2FwCiAgICBkdXAKICAgIHVuY292ZXIgMgogICAgYXNzZXJ0IC8vIGNoZWNrIExvY2FsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo5MAogICAgLy8gaWYgKGxwQmFsYW5jZSA+IDApIHsKICAgIGJ6IGNsb3NlT3V0T2ZBcHBsaWNhdGlvbl9hZnRlcl9pZl9lbHNlQDMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjkxCiAgICAvLyB0aGlzLndpdGhkcmF3KGxwQmFsYW5jZSwgYnVkZ2V0KTsKICAgIGR1cAogICAgZGlnIDMKICAgIGNhbGxzdWIgc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6OlBvb2wud2l0aGRyYXcKCmNsb3NlT3V0T2ZBcHBsaWNhdGlvbl9hZnRlcl9pZl9lbHNlQDM6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6NTEKICAgIC8vIGNvbnN0IGxwQW1vdW50ID0gdGhpcy5iYWxhbmNlKGZyb20pLnZhbHVlOwogICAgZGlnIDEKICAgIGR1cAogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czozMwogICAgLy8gYmFsYW5jZSA9IExvY2FsU3RhdGU8dWludDY0PigpOwogICAgYnl0ZWNfMyAvLyAiYmFsYW5jZSIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czo1MQogICAgLy8gY29uc3QgbHBBbW91bnQgPSB0aGlzLmJhbGFuY2UoZnJvbSkudmFsdWU7CiAgICBhcHBfbG9jYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgTG9jYWxTdGF0ZSBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czo1MgogICAgLy8gYXNzZXJ0KGxwQW1vdW50ID09PSAwLCAnUmV3YXJkTWFuYWdlcjogd2l0aGRyYXcgTFAgYmVmb3JlIGNsb3NlIG91dCcpOwogICAgIQogICAgYXNzZXJ0IC8vIFJld2FyZE1hbmFnZXI6IHdpdGhkcmF3IExQIGJlZm9yZSBjbG9zZSBvdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czo1NAogICAgLy8gY29uc3QgcGVuZGluZyA9IHRoaXMucGVuZGluZ1Jld2FyZChmcm9tKTsKICAgIGNhbGxzdWIgc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjpSZXdhcmRNYW5hZ2VyLnBlbmRpbmdSZXdhcmQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czo1NQogICAgLy8gYXNzZXJ0KHBlbmRpbmcgPT09IDAsICdSZXdhcmRNYW5hZ2VyOiBjbGFpbSByZXdhcmRzIGJlZm9yZSBjbG9zZSBvdXQnKTsKICAgICEKICAgIGFzc2VydCAvLyBSZXdhcmRNYW5hZ2VyOiBjbGFpbSByZXdhcmRzIGJlZm9yZSBjbG9zZSBvdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjg0CiAgICAvLyBAYWJpbWV0aG9kKHsgZGVmYXVsdEFyZ3VtZW50czogeyBidWRnZXQ6IHsgY29uc3RhbnQ6IDMwMDAgfSB9IH0pCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6OlBvb2wub3B0SW5Bc3NldFtyb3V0aW5nXSgpIC0+IHZvaWQ6Cm9wdEluQXNzZXQ6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoxMDMKICAgIC8vIHRoaXMub25seU93bmVyKCk7CiAgICBjYWxsc3ViIG9ubHlPd25lcgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MTA2LTExMgogICAgLy8gaXR4bgogICAgLy8gICAuYXNzZXRUcmFuc2Zlcih7CiAgICAvLyAgICAgeGZlckFzc2V0OiB0aGlzLmFzc2V0LnZhbHVlLAogICAgLy8gICAgIGFzc2V0QW1vdW50OiAwLAogICAgLy8gICAgIGFzc2V0UmVjZWl2ZXI6IEdsb2JhbC5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzLAogICAgLy8gICB9KQogICAgLy8gICAuc3VibWl0KCk7CiAgICBpdHhuX2JlZ2luCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoxMDgKICAgIC8vIHhmZXJBc3NldDogdGhpcy5hc3NldC52YWx1ZSwKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MjcKICAgIC8vIGFzc2V0ID0gR2xvYmFsU3RhdGU8QXNzZXQ+KCk7CiAgICBieXRlY18yIC8vICJhc3NldCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjEwOAogICAgLy8geGZlckFzc2V0OiB0aGlzLmFzc2V0LnZhbHVlLAogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjExMAogICAgLy8gYXNzZXRSZWNlaXZlcjogR2xvYmFsLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MsCiAgICBnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwogICAgaXR4bl9maWVsZCBBc3NldFJlY2VpdmVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoxMDkKICAgIC8vIGFzc2V0QW1vdW50OiAwLAogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgQXNzZXRBbW91bnQKICAgIGl0eG5fZmllbGQgWGZlckFzc2V0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoxMDYtMTExCiAgICAvLyBpdHhuCiAgICAvLyAgIC5hc3NldFRyYW5zZmVyKHsKICAgIC8vICAgICB4ZmVyQXNzZXQ6IHRoaXMuYXNzZXQudmFsdWUsCiAgICAvLyAgICAgYXNzZXRBbW91bnQ6IDAsCiAgICAvLyAgICAgYXNzZXRSZWNlaXZlcjogR2xvYmFsLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MsCiAgICAvLyAgIH0pCiAgICBwdXNoaW50IDQgLy8gNAogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoxMDYtMTEyCiAgICAvLyBpdHhuCiAgICAvLyAgIC5hc3NldFRyYW5zZmVyKHsKICAgIC8vICAgICB4ZmVyQXNzZXQ6IHRoaXMuYXNzZXQudmFsdWUsCiAgICAvLyAgICAgYXNzZXRBbW91bnQ6IDAsCiAgICAvLyAgICAgYXNzZXRSZWNlaXZlcjogR2xvYmFsLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MsCiAgICAvLyAgIH0pCiAgICAvLyAgIC5zdWJtaXQoKTsKICAgIGl0eG5fc3VibWl0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoxMTQKICAgIC8vIGxvZygnUG9vbDogb3B0LWluIGNvbXBsZXRlZCcpOwogICAgcHVzaGJ5dGVzICJQb29sOiBvcHQtaW4gY29tcGxldGVkIgogICAgbG9nCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoxMDIKICAgIC8vIG9wdEluQXNzZXQoKTogdm9pZCB7CiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6OlBvb2wuZGVwb3NpdFtyb3V0aW5nXSgpIC0+IHZvaWQ6CmRlcG9zaXQ6CiAgICBwdXNoYnl0ZXMgIiIKICAgIGR1cG4gNAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MTUwCiAgICAvLyBAYWJpbWV0aG9kKHsgYWxsb3dBY3Rpb25zOiBbJ05vT3AnLCAnT3B0SW4nXSwgZGVmYXVsdEFyZ3VtZW50czogeyBidWRnZXQ6IHsgY29uc3RhbnQ6IDMwMDAgfSB9IH0pCiAgICB0eG4gR3JvdXBJbmRleAogICAgaW50Y18xIC8vIDEKICAgIC0KICAgIGR1cAogICAgZ3R4bnMgVHlwZUVudW0KICAgIHB1c2hpbnQgNCAvLyBheGZlcgogICAgPT0KICAgIGFzc2VydCAvLyB0cmFuc2FjdGlvbiB0eXBlIGlzIGF4ZmVyCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoxNTIKICAgIC8vIGVuc3VyZUJ1ZGdldChidWRnZXQsIE9wVXBGZWVTb3VyY2UuR3JvdXBDcmVkaXQpOwogICAgaW50Y18wIC8vIDAKICAgIGNhbGxzdWIgZW5zdXJlX2J1ZGdldAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MTU1CiAgICAvLyBpZiAoVHhuLm9uQ29tcGxldGlvbiA9PT0gT25Db21wbGV0ZUFjdGlvbi5PcHRJbikgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgaW50Y18xIC8vIDEKICAgID09CiAgICBieiBkZXBvc2l0X2FmdGVyX2lmX2Vsc2VAMwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MTU2CiAgICAvLyBzdXBlci5vcHRJblRvQXBwbGljYXRpb24oVHhuLnNlbmRlcik7CiAgICB0eG4gU2VuZGVyCiAgICBjYWxsc3ViIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czo6UmV3YXJkTWFuYWdlci5vcHRJblRvQXBwbGljYXRpb24KCmRlcG9zaXRfYWZ0ZXJfaWZfZWxzZUAzOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MTM5CiAgICAvLyBhc3NlcnQodGhpcy5jYW5EZXBvc2l0LnZhbHVlLCAnUG9vbDogZGVwb3NpdCBwcm9oaWJpdGVkJyk7CiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NTcKICAgIC8vIGNhbkRlcG9zaXQgPSBHbG9iYWxTdGF0ZTxib29sZWFuPih7IGluaXRpYWxWYWx1ZTogdHJ1ZSB9KTsvLyBpcyBkZXBvc2l0IG9wZXJhdGlvbiBhbGxvd2VkCiAgICBieXRlYyAxMiAvLyAiY2FuRGVwb3NpdCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjEzOQogICAgLy8gYXNzZXJ0KHRoaXMuY2FuRGVwb3NpdC52YWx1ZSwgJ1Bvb2w6IGRlcG9zaXQgcHJvaGliaXRlZCcpOwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIGFzc2VydCAvLyBQb29sOiBkZXBvc2l0IHByb2hpYml0ZWQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjE2MQogICAgLy8gY29uc3Qgb2xkRCA9IHRoaXMuZC52YWx1ZTsKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo1MQogICAgLy8gZCA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBieXRlYyA2IC8vICJkIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MTYxCiAgICAvLyBjb25zdCBvbGREID0gdGhpcy5kLnZhbHVlOwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIHN3YXAKICAgIGR1cAogICAgY292ZXIgMgogICAgYnVyeSA2CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoxNjMKICAgIC8vIGFzc2VydChhc3NldFRyYW5zZmVyUmVmLnhmZXJBc3NldC5pZCA9PT0gdGhpcy5hc3NldC52YWx1ZS5pZCwgYFdyb25nIGFzc2V0YCk7CiAgICBkaWcgMQogICAgZHVwCiAgICBndHhucyBYZmVyQXNzZXQKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MjcKICAgIC8vIGFzc2V0ID0gR2xvYmFsU3RhdGU8QXNzZXQ+KCk7CiAgICBieXRlY18yIC8vICJhc3NldCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjE2MwogICAgLy8gYXNzZXJ0KGFzc2V0VHJhbnNmZXJSZWYueGZlckFzc2V0LmlkID09PSB0aGlzLmFzc2V0LnZhbHVlLmlkLCBgV3JvbmcgYXNzZXRgKTsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICA9PQogICAgYXNzZXJ0IC8vIFdyb25nIGFzc2V0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3V0aWxzLmFsZ28udHM6MjQKICAgIC8vIGFzc2VydChhc3NldFRyYW5zZmVyVHhuLmFzc2V0UmVjZWl2ZXIgPT09IEdsb2JhbC5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzLCBgQXNzZXQgbXVzdCBnbyB0byBhcHBgKTsKICAgIGR1cAogICAgZ3R4bnMgQXNzZXRSZWNlaXZlcgogICAgZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKICAgID09CiAgICBhc3NlcnQgLy8gQXNzZXQgbXVzdCBnbyB0byBhcHAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvdXRpbHMuYWxnby50czoyNwogICAgLy8gYXNzZXJ0KGFzc2V0VHJhbnNmZXJUeG4ucmVrZXlUbyA9PT0gR2xvYmFsLnplcm9BZGRyZXNzLCBgUmVrZXkgbm90IGFsbG93ZWRgKTsKICAgIGR1cAogICAgZ3R4bnMgUmVrZXlUbwogICAgZ2xvYmFsIFplcm9BZGRyZXNzCiAgICA9PQogICAgYXNzZXJ0IC8vIFJla2V5IG5vdCBhbGxvd2VkCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3V0aWxzLmFsZ28udHM6MjgKICAgIC8vIGFzc2VydChhc3NldFRyYW5zZmVyVHhuLmFzc2V0Q2xvc2VUbyA9PT0gR2xvYmFsLnplcm9BZGRyZXNzLCBgQ2xvc2VUbyBub3QgYWxsb3dlZGApOwogICAgZHVwCiAgICBndHhucyBBc3NldENsb3NlVG8KICAgIGdsb2JhbCBaZXJvQWRkcmVzcwogICAgPT0KICAgIGFzc2VydCAvLyBDbG9zZVRvIG5vdCBhbGxvd2VkCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3V0aWxzLmFsZ28udHM6MjkKICAgIC8vIHJldHVybiBhc3NldFRyYW5zZmVyVHhuLmFzc2V0QW1vdW50OwogICAgZ3R4bnMgQXNzZXRBbW91bnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjE2NQogICAgLy8gY29uc3QgYW1vdW50U1AgPSB0aGlzLnRvU3lzdGVtUHJlY2lzaW9uKGFtb3VudCk7CiAgICBjYWxsc3ViIHRvU3lzdGVtUHJlY2lzaW9uCiAgICBkdXAKICAgIGJ1cnkgOAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MTY2CiAgICAvLyBhc3NlcnQoYW1vdW50U1AgPiAwLCAnUG9vbDogdG9vIGxpdHRsZScpOwogICAgZHVwCiAgICBhc3NlcnQgLy8gUG9vbDogdG9vIGxpdHRsZQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MTY5CiAgICAvLyB0aGlzLnJlc2VydmVzLnZhbHVlICs9IGFtb3VudFNQOwogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ5CiAgICAvLyByZXNlcnZlcyA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBieXRlYyA0IC8vICJyZXNlcnZlcyIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjE2OQogICAgLy8gdGhpcy5yZXNlcnZlcy52YWx1ZSArPSBhbW91bnRTUDsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICArCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0OQogICAgLy8gcmVzZXJ2ZXMgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgYnl0ZWMgNCAvLyAicmVzZXJ2ZXMiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoxNjkKICAgIC8vIHRoaXMucmVzZXJ2ZXMudmFsdWUgKz0gYW1vdW50U1A7CiAgICBzd2FwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MTcxCiAgICAvLyBjb25zdCB0b2tlbkJhbGFuY2UgPSB0aGlzLnRva2VuQmFsYW5jZS52YWx1ZTsKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NgogICAgLy8gdG9rZW5CYWxhbmNlID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogMCB9KTsKICAgIGJ5dGVjXzAgLy8gInRva2VuQmFsYW5jZSIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjE3MQogICAgLy8gY29uc3QgdG9rZW5CYWxhbmNlID0gdGhpcy50b2tlbkJhbGFuY2UudmFsdWU7CiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgc3dhcAogICAgZHVwCiAgICBjb3ZlciAyCiAgICBidXJ5IDYKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjE3MgogICAgLy8gY29uc3QgdlVzZEJhbGFuY2UgPSB0aGlzLnZVc2RCYWxhbmNlLnZhbHVlOwogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ3CiAgICAvLyB2VXNkQmFsYW5jZSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBieXRlY18xIC8vICJ2VXNkQmFsYW5jZSIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjE3MgogICAgLy8gY29uc3QgdlVzZEJhbGFuY2UgPSB0aGlzLnZVc2RCYWxhbmNlLnZhbHVlOwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIHN3YXAKICAgIGR1cAogICAgY292ZXIgMgogICAgYnVyeSA2CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoxNzQKICAgIC8vIGNvbnN0IG9sZEJhbGFuY2U6IHVpbnQ2NCA9ICh0b2tlbkJhbGFuY2UgKyB2VXNkQmFsYW5jZSk7CiAgICArCiAgICBidXJ5IDYKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjE3NQogICAgLy8gaWYgKG9sZEQgPT09IDAgfHwgb2xkQmFsYW5jZSA9PT0gMCkgewogICAgYnogZGVwb3NpdF9pZl9ib2R5QDUKICAgIGRpZyA0CiAgICBibnogZGVwb3NpdF9lbHNlX2JvZHlANgoKZGVwb3NpdF9pZl9ib2R5QDU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoxNzcKICAgIC8vIGNvbnN0IGhhbGZBbW91bnQ6IHVpbnQ2NCA9IGFtb3VudFNQID4+IDE7CiAgICBkaWcgNQogICAgaW50Y18xIC8vIDEKICAgIHNocgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MTc4CiAgICAvLyB0aGlzLnRva2VuQmFsYW5jZS52YWx1ZSArPSBoYWxmQW1vdW50OwogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ2CiAgICAvLyB0b2tlbkJhbGFuY2UgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgYnl0ZWNfMCAvLyAidG9rZW5CYWxhbmNlIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MTc4CiAgICAvLyB0aGlzLnRva2VuQmFsYW5jZS52YWx1ZSArPSBoYWxmQW1vdW50OwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIGRpZyAxCiAgICArCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NgogICAgLy8gdG9rZW5CYWxhbmNlID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogMCB9KTsKICAgIGJ5dGVjXzAgLy8gInRva2VuQmFsYW5jZSIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjE3OAogICAgLy8gdGhpcy50b2tlbkJhbGFuY2UudmFsdWUgKz0gaGFsZkFtb3VudDsKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoxNzkKICAgIC8vIHRoaXMudlVzZEJhbGFuY2UudmFsdWUgKz0gaGFsZkFtb3VudDsKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NwogICAgLy8gdlVzZEJhbGFuY2UgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgYnl0ZWNfMSAvLyAidlVzZEJhbGFuY2UiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoxNzkKICAgIC8vIHRoaXMudlVzZEJhbGFuY2UudmFsdWUgKz0gaGFsZkFtb3VudDsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICArCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NwogICAgLy8gdlVzZEJhbGFuY2UgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgYnl0ZWNfMSAvLyAidlVzZEJhbGFuY2UiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoxNzkKICAgIC8vIHRoaXMudlVzZEJhbGFuY2UudmFsdWUgKz0gaGFsZkFtb3VudDsKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CgpkZXBvc2l0X2FmdGVyX2lmX2Vsc2VANzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjE4NQogICAgLy8gdGhpcy51cGRhdGVEKCk7CiAgICBjYWxsc3ViIHVwZGF0ZUQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjE4NwogICAgLy8gdGhpcy5kZXBvc2l0THAoVHhuLnNlbmRlciwgdGhpcy5kLnZhbHVlIC0gb2xkRCk7CiAgICB0eG4gU2VuZGVyCiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NTEKICAgIC8vIGQgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgYnl0ZWMgNiAvLyAiZCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjE4NwogICAgLy8gdGhpcy5kZXBvc2l0THAoVHhuLnNlbmRlciwgdGhpcy5kLnZhbHVlIC0gb2xkRCk7CiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgZGlnIDUKICAgIC0KICAgIGNhbGxzdWIgZGVwb3NpdExwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoxODkKICAgIC8vIGFzc2VydCh0aGlzLnRva2VuQmFsYW5jZS52YWx1ZSA8IE1BWF9UT0tFTl9CQUxBTkNFLCAnUG9vbDogdG9vIG11Y2gnKTsKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NgogICAgLy8gdG9rZW5CYWxhbmNlID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogMCB9KTsKICAgIGJ5dGVjXzAgLy8gInRva2VuQmFsYW5jZSIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjE4OQogICAgLy8gYXNzZXJ0KHRoaXMudG9rZW5CYWxhbmNlLnZhbHVlIDwgTUFYX1RPS0VOX0JBTEFOQ0UsICdQb29sOiB0b28gbXVjaCcpOwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIHB1c2hpbnQgMTA5OTUxMTYyNzc3NiAvLyAxMDk5NTExNjI3Nzc2CiAgICA8CiAgICBhc3NlcnQgLy8gUG9vbDogdG9vIG11Y2gKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjE1MAogICAgLy8gQGFiaW1ldGhvZCh7IGFsbG93QWN0aW9uczogWydOb09wJywgJ09wdEluJ10sIGRlZmF1bHRBcmd1bWVudHM6IHsgYnVkZ2V0OiB7IGNvbnN0YW50OiAzMDAwIH0gfSB9KQogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKZGVwb3NpdF9lbHNlX2JvZHlANjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjE4MgogICAgLy8gdGhpcy50b2tlbkJhbGFuY2UudmFsdWUgKz0gbmV3IFVpbnQ8NjQ+KChCaWdVaW50KGFtb3VudFNQKSAqIEJpZ1VpbnQodG9rZW5CYWxhbmNlKSkgLyBCaWdVaW50KG9sZEJhbGFuY2UpKS5hc1VpbnQ2NCgpOwogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ2CiAgICAvLyB0b2tlbkJhbGFuY2UgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgYnl0ZWNfMCAvLyAidG9rZW5CYWxhbmNlIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MTgyCiAgICAvLyB0aGlzLnRva2VuQmFsYW5jZS52YWx1ZSArPSBuZXcgVWludDw2ND4oKEJpZ1VpbnQoYW1vdW50U1ApICogQmlnVWludCh0b2tlbkJhbGFuY2UpKSAvIEJpZ1VpbnQob2xkQmFsYW5jZSkpLmFzVWludDY0KCk7CiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgZGlnIDYKICAgIGl0b2IKICAgIGRpZyA0CiAgICBpdG9iCiAgICBkaWcgMQogICAgYioKICAgIGRpZyA3CiAgICBpdG9iCiAgICBzd2FwCiAgICBkaWcgMQogICAgYi8KICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzIgLy8gOAogICAgPD0KICAgIGFzc2VydCAvLyBvdmVyZmxvdwogICAgaW50Y18yIC8vIDgKICAgIGJ6ZXJvCiAgICBzd2FwCiAgICBkaWcgMQogICAgYnwKICAgIGJ0b2kKICAgIHVuY292ZXIgNAogICAgKwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDYKICAgIC8vIHRva2VuQmFsYW5jZSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBieXRlY18wIC8vICJ0b2tlbkJhbGFuY2UiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoxODIKICAgIC8vIHRoaXMudG9rZW5CYWxhbmNlLnZhbHVlICs9IG5ldyBVaW50PDY0PigoQmlnVWludChhbW91bnRTUCkgKiBCaWdVaW50KHRva2VuQmFsYW5jZSkpIC8gQmlnVWludChvbGRCYWxhbmNlKSkuYXNVaW50NjQoKTsKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoxODMKICAgIC8vIHRoaXMudlVzZEJhbGFuY2UudmFsdWUgKz0gbmV3IFVpbnQ8NjQ+KChCaWdVaW50KGFtb3VudFNQKSAqIEJpZ1VpbnQodlVzZEJhbGFuY2UpKSAvIEJpZ1VpbnQob2xkQmFsYW5jZSkpLmFzVWludDY0KCk7CiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDcKICAgIC8vIHZVc2RCYWxhbmNlID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogMCB9KTsKICAgIGJ5dGVjXzEgLy8gInZVc2RCYWxhbmNlIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MTgzCiAgICAvLyB0aGlzLnZVc2RCYWxhbmNlLnZhbHVlICs9IG5ldyBVaW50PDY0PigoQmlnVWludChhbW91bnRTUCkgKiBCaWdVaW50KHZVc2RCYWxhbmNlKSkgLyBCaWdVaW50KG9sZEJhbGFuY2UpKS5hc1VpbnQ2NCgpOwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIGRpZyA1CiAgICBpdG9iCiAgICB1bmNvdmVyIDQKICAgIGIqCiAgICB1bmNvdmVyIDMKICAgIGIvCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDgKICAgIDw9CiAgICBhc3NlcnQgLy8gb3ZlcmZsb3cKICAgIHVuY292ZXIgMgogICAgYnwKICAgIGJ0b2kKICAgICsKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ3CiAgICAvLyB2VXNkQmFsYW5jZSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBieXRlY18xIC8vICJ2VXNkQmFsYW5jZSIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjE4MwogICAgLy8gdGhpcy52VXNkQmFsYW5jZS52YWx1ZSArPSBuZXcgVWludDw2ND4oKEJpZ1VpbnQoYW1vdW50U1ApICogQmlnVWludCh2VXNkQmFsYW5jZSkpIC8gQmlnVWludChvbGRCYWxhbmNlKSkuYXNVaW50NjQoKTsKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICBiIGRlcG9zaXRfYWZ0ZXJfaWZfZWxzZUA3CgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6OlBvb2wud2l0aGRyYXdbcm91dGluZ10oKSAtPiB2b2lkOgp3aXRoZHJhdzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjE5NwogICAgLy8gQGFiaW1ldGhvZCh7IGRlZmF1bHRBcmd1bWVudHM6IHsgYnVkZ2V0OiB7IGNvbnN0YW50OiAzMDAwIH0gfSB9KQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgYnRvaQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgYnRvaQogICAgY2FsbHN1YiBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo6UG9vbC53aXRoZHJhdwogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjpQb29sLnN3YXBUb1ZVc2Rbcm91dGluZ10oKSAtPiB2b2lkOgpzd2FwVG9WVXNkOgogICAgcHVzaGJ5dGVzICIiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyNDUtMjQ5CiAgICAvLyBzd2FwVG9WVXNkKAogICAgLy8gICB1c2VyOiBBZGRyZXNzLAogICAgLy8gICBhbW91bnQ6IHVpbnQ2NCwKICAgIC8vICAgemVyb0ZlZTogYm9vbGVhbiwKICAgIC8vICk6IHVpbnQ2NCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18zIC8vIDMyCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnN0YXRpY19hcnJheTxhcmM0LnVpbnQ4LCAzMj4KICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzIgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50NjQKICAgIGJ0b2kKICAgIGR1cAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMwogICAgZHVwCiAgICBsZW4KICAgIGludGNfMSAvLyAxCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LmJvb2wKICAgIGludGNfMCAvLyAwCiAgICBnZXRiaXQKICAgIHN3YXAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjI1MAogICAgLy8gdGhpcy5vbmx5Um91dGVyKCk7CiAgICBjYWxsc3ViIG9ubHlSb3V0ZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjI1MgogICAgLy8gbGV0IHJlc3VsdDogdWludDY0ID0gMDsgLy8gMCBieSBkZWZhdWx0CiAgICBpbnRjXzAgLy8gMAogICAgc3dhcAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MjUzCiAgICAvLyBsZXQgZmVlOiB1aW50NjQgPSAwOwogICAgaW50Y18wIC8vIDAKICAgIHN3YXAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjI1NAogICAgLy8gaWYgKGFtb3VudCA+IDApIHsKICAgIGJ6IHN3YXBUb1ZVc2RfYWZ0ZXJfaWZfZWxzZUA3CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyNTUKICAgIC8vIGlmICghemVyb0ZlZSkgewogICAgZGlnIDIKICAgIGJueiBzd2FwVG9WVXNkX2FmdGVyX2lmX2Vsc2VANAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MjU2CiAgICAvLyBmZWUgPSAoYW1vdW50ICogdGhpcy5mZWVTaGFyZUJQLnZhbHVlKSAvIEJQOwogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ0CiAgICAvLyBmZWVTaGFyZUJQID0gR2xvYmFsU3RhdGU8dWludDY0PigpOwogICAgYnl0ZWMgMTUgLy8gImZlZVNoYXJlQlAiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyNTYKICAgIC8vIGZlZSA9IChhbW91bnQgKiB0aGlzLmZlZVNoYXJlQlAudmFsdWUpIC8gQlA7CiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgZGlnIDQKICAgICoKICAgIGludGMgNCAvLyAxMDAwMAogICAgLwogICAgYnVyeSAxCgpzd2FwVG9WVXNkX2FmdGVyX2lmX2Vsc2VANDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjI1OAogICAgLy8gY29uc3QgYW1vdW50SW4gPSB0aGlzLnRvU3lzdGVtUHJlY2lzaW9uKGFtb3VudCAtIGZlZSk7CiAgICBkaWcgMwogICAgZHVwCiAgICBkaWcgMgogICAgLQogICAgY2FsbHN1YiB0b1N5c3RlbVByZWNpc2lvbgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MjYwCiAgICAvLyBmZWUgPSBhbW91bnQgLSB0aGlzLmZyb21TeXN0ZW1QcmVjaXNpb24oYW1vdW50SW4pOwogICAgZHVwCiAgICBjYWxsc3ViIGZyb21TeXN0ZW1QcmVjaXNpb24KICAgIHVuY292ZXIgMgogICAgc3dhcAogICAgLQogICAgYnVyeSAyCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyNjMKICAgIC8vIHRoaXMudG9rZW5CYWxhbmNlLnZhbHVlICs9IGFtb3VudEluOwogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ2CiAgICAvLyB0b2tlbkJhbGFuY2UgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgYnl0ZWNfMCAvLyAidG9rZW5CYWxhbmNlIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MjYzCiAgICAvLyB0aGlzLnRva2VuQmFsYW5jZS52YWx1ZSArPSBhbW91bnRJbjsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICBkaWcgMQogICAgKwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDYKICAgIC8vIHRva2VuQmFsYW5jZSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBieXRlY18wIC8vICJ0b2tlbkJhbGFuY2UiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyNjMKICAgIC8vIHRoaXMudG9rZW5CYWxhbmNlLnZhbHVlICs9IGFtb3VudEluOwogICAgc3dhcAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjI2NAogICAgLy8gdGhpcy5yZXNlcnZlcy52YWx1ZSArPSBhbW91bnRJbjsKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0OQogICAgLy8gcmVzZXJ2ZXMgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgYnl0ZWMgNCAvLyAicmVzZXJ2ZXMiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyNjQKICAgIC8vIHRoaXMucmVzZXJ2ZXMudmFsdWUgKz0gYW1vdW50SW47CiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgKwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDkKICAgIC8vIHJlc2VydmVzID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogMCB9KTsKICAgIGJ5dGVjIDQgLy8gInJlc2VydmVzIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MjY0CiAgICAvLyB0aGlzLnJlc2VydmVzLnZhbHVlICs9IGFtb3VudEluOwogICAgc3dhcAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjI2NgogICAgLy8gY29uc3QgdlVzZE5ld0Ftb3VudCA9IHRoaXMuZ2V0WSh0aGlzLnRva2VuQmFsYW5jZS52YWx1ZSk7CiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDYKICAgIC8vIHRva2VuQmFsYW5jZSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBieXRlY18wIC8vICJ0b2tlbkJhbGFuY2UiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyNjYKICAgIC8vIGNvbnN0IHZVc2ROZXdBbW91bnQgPSB0aGlzLmdldFkodGhpcy50b2tlbkJhbGFuY2UudmFsdWUpOwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIGNhbGxzdWIgZ2V0WQogICAgZHVwCiAgICBidXJ5IDcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjI2NwogICAgLy8gaWYgKHRoaXMudlVzZEJhbGFuY2UudmFsdWUgPiB2VXNkTmV3QW1vdW50KSB7CiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDcKICAgIC8vIHZVc2RCYWxhbmNlID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogMCB9KTsKICAgIGJ5dGVjXzEgLy8gInZVc2RCYWxhbmNlIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MjY3CiAgICAvLyBpZiAodGhpcy52VXNkQmFsYW5jZS52YWx1ZSA+IHZVc2ROZXdBbW91bnQpIHsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICA8CiAgICBieiBzd2FwVG9WVXNkX2FmdGVyX2lmX2Vsc2VANgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MjY4CiAgICAvLyByZXN1bHQgPSB0aGlzLnZVc2RCYWxhbmNlLnZhbHVlIC0gdlVzZE5ld0Ftb3VudDsKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NwogICAgLy8gdlVzZEJhbGFuY2UgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgYnl0ZWNfMSAvLyAidlVzZEJhbGFuY2UiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyNjgKICAgIC8vIHJlc3VsdCA9IHRoaXMudlVzZEJhbGFuY2UudmFsdWUgLSB2VXNkTmV3QW1vdW50OwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIGRpZyA2CiAgICAtCiAgICBidXJ5IDIKCnN3YXBUb1ZVc2RfYWZ0ZXJfaWZfZWxzZUA2OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDcKICAgIC8vIHZVc2RCYWxhbmNlID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogMCB9KTsKICAgIGJ5dGVjXzEgLy8gInZVc2RCYWxhbmNlIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MjcwCiAgICAvLyB0aGlzLnZVc2RCYWxhbmNlLnZhbHVlID0gdlVzZE5ld0Ftb3VudDsKICAgIGRpZyA2CiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MjcxCiAgICAvLyB0aGlzLmFkZFJld2FyZHMoZmVlKTsKICAgIGR1cAogICAgY2FsbHN1YiBhZGRSZXdhcmRzCgpzd2FwVG9WVXNkX2FmdGVyX2lmX2Vsc2VANzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjI3NAogICAgLy8gZW1pdDxTd2FwcGVkVG9WVXNkPih7IHNlbmRlcjogdXNlciwgdG9rZW5JZDogdGhpcy5hc3NldC52YWx1ZS5pZCwgYW1vdW50LCB2VXNkQW1vdW50OiByZXN1bHQsIGZlZSB9KTsKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MjcKICAgIC8vIGFzc2V0ID0gR2xvYmFsU3RhdGU8QXNzZXQ+KCk7CiAgICBieXRlY18yIC8vICJhc3NldCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjI3NAogICAgLy8gZW1pdDxTd2FwcGVkVG9WVXNkPih7IHNlbmRlcjogdXNlciwgdG9rZW5JZDogdGhpcy5hc3NldC52YWx1ZS5pZCwgYW1vdW50LCB2VXNkQW1vdW50OiByZXN1bHQsIGZlZSB9KTsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICBpdG9iCiAgICBkaWcgNQogICAgc3dhcAogICAgY29uY2F0CiAgICBkaWcgNAogICAgaXRvYgogICAgY29uY2F0CiAgICBkaWcgMgogICAgaXRvYgogICAgc3dhcAogICAgZGlnIDEKICAgIGNvbmNhdAogICAgZGlnIDIKICAgIGl0b2IKICAgIGNvbmNhdAogICAgcHVzaGJ5dGVzIDB4MmJiYmVjYTMgLy8gbWV0aG9kICJTd2FwcGVkVG9WVXNkKGFkZHJlc3MsdWludDY0LHVpbnQ2NCx1aW50NjQsdWludDY0KSIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyNzYKICAgIC8vIHRoaXMudmFsaWRhdGVCYWxhbmNlUmF0aW8oKTsKICAgIGNhbGxzdWIgdmFsaWRhdGVCYWxhbmNlUmF0aW8KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjI0NS0yNDkKICAgIC8vIHN3YXBUb1ZVc2QoCiAgICAvLyAgIHVzZXI6IEFkZHJlc3MsCiAgICAvLyAgIGFtb3VudDogdWludDY0LAogICAgLy8gICB6ZXJvRmVlOiBib29sZWFuLAogICAgLy8gKTogdWludDY0IHsKICAgIGJ5dGVjIDI0IC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6OlBvb2wuc3dhcEZyb21WVXNkW3JvdXRpbmddKCkgLT4gdm9pZDoKc3dhcEZyb21WVXNkOgogICAgcHVzaGJ5dGVzICIiCiAgICBkdXAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjI5MS0yOTYKICAgIC8vIHN3YXBGcm9tVlVzZCgKICAgIC8vICAgdXNlcjogQWRkcmVzcywKICAgIC8vICAgYW1vdW50OiB1aW50NjQsCiAgICAvLyAgIHJlY2VpdmVBbW91bnRNaW46IHVpbnQ2NCwKICAgIC8vICAgemVyb0ZlZTogYm9vbGVhbiwKICAgIC8vICk6IHVpbnQ2NCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18zIC8vIDMyCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnN0YXRpY19hcnJheTxhcmM0LnVpbnQ4LCAzMj4KICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzIgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50NjQKICAgIGJ0b2kKICAgIGR1cAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMwogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgYnRvaQogICAgc3dhcAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgNAogICAgZHVwCiAgICBsZW4KICAgIGludGNfMSAvLyAxCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LmJvb2wKICAgIGludGNfMCAvLyAwCiAgICBnZXRiaXQKICAgIHN3YXAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjI5NwogICAgLy8gdGhpcy5vbmx5Um91dGVyKCk7CiAgICBjYWxsc3ViIG9ubHlSb3V0ZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjI5OQogICAgLy8gbGV0IHJlc3VsdFNQOiB1aW50NjQgPSAwOyAvLyAwIGJ5IGRlZmF1bHQKICAgIGludGNfMCAvLyAwCiAgICBzd2FwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozMDAKICAgIC8vIGxldCByZXN1bHQ6IHVpbnQ2NCA9IDA7IC8vIDAgYnkgZGVmYXVsdAogICAgaW50Y18wIC8vIDAKICAgIHN3YXAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjMwMQogICAgLy8gbGV0IGZlZTogdWludDY0ID0gMDsKICAgIGludGNfMCAvLyAwCiAgICBzd2FwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozMDIKICAgIC8vIGlmIChhbW91bnQgPiAwKSB7CiAgICBieiBzd2FwRnJvbVZVc2RfYWZ0ZXJfaWZfZWxzZUA4CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozMDMKICAgIC8vIHRoaXMudlVzZEJhbGFuY2UudmFsdWUgKz0gYW1vdW50OwogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ3CiAgICAvLyB2VXNkQmFsYW5jZSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBieXRlY18xIC8vICJ2VXNkQmFsYW5jZSIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjMwMwogICAgLy8gdGhpcy52VXNkQmFsYW5jZS52YWx1ZSArPSBhbW91bnQ7CiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgZGlnIDYKICAgICsKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ3CiAgICAvLyB2VXNkQmFsYW5jZSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBieXRlY18xIC8vICJ2VXNkQmFsYW5jZSIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjMwMwogICAgLy8gdGhpcy52VXNkQmFsYW5jZS52YWx1ZSArPSBhbW91bnQ7CiAgICBkaWcgMQogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjMwNAogICAgLy8gY29uc3QgbmV3QW1vdW50ID0gdGhpcy5nZXRZKHRoaXMudlVzZEJhbGFuY2UudmFsdWUpOwogICAgY2FsbHN1YiBnZXRZCiAgICBkdXAKICAgIGJ1cnkgMTAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjMwNQogICAgLy8gY29uc3QgdG9rZW5CYWxhbmNlID0gdGhpcy50b2tlbkJhbGFuY2UudmFsdWU7CiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDYKICAgIC8vIHRva2VuQmFsYW5jZSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBieXRlY18wIC8vICJ0b2tlbkJhbGFuY2UiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozMDUKICAgIC8vIGNvbnN0IHRva2VuQmFsYW5jZSA9IHRoaXMudG9rZW5CYWxhbmNlLnZhbHVlOwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIHN3YXAKICAgIGR1cAogICAgY292ZXIgMgogICAgYnVyeSAxMQogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MzA2CiAgICAvLyBpZiAodG9rZW5CYWxhbmNlID4gbmV3QW1vdW50KSB7CiAgICA8CiAgICBieiBzd2FwRnJvbVZVc2RfYWZ0ZXJfaWZfZWxzZUA0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozMDcKICAgIC8vIHJlc3VsdFNQID0gdG9rZW5CYWxhbmNlIC0gbmV3QW1vdW50OwogICAgZGlnIDcKICAgIGRpZyA5CiAgICAtCiAgICBkdXAKICAgIGJ1cnkgNAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MzA4CiAgICAvLyByZXN1bHQgPSB0aGlzLmZyb21TeXN0ZW1QcmVjaXNpb24ocmVzdWx0U1ApOwogICAgY2FsbHN1YiBmcm9tU3lzdGVtUHJlY2lzaW9uCiAgICBidXJ5IDIKCnN3YXBGcm9tVlVzZF9hZnRlcl9pZl9lbHNlQDQ6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozMTIKICAgIC8vIGFzc2VydChyZXN1bHRTUCA8PSB0aGlzLnJlc2VydmVzLnZhbHVlLCAnUG9vbDogcmVzZXJ2ZXMnKTsKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0OQogICAgLy8gcmVzZXJ2ZXMgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgYnl0ZWMgNCAvLyAicmVzZXJ2ZXMiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozMTIKICAgIC8vIGFzc2VydChyZXN1bHRTUCA8PSB0aGlzLnJlc2VydmVzLnZhbHVlLCAnUG9vbDogcmVzZXJ2ZXMnKTsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICBkaWcgMwogICAgZHVwCiAgICBjb3ZlciAyCiAgICBkaWcgMQogICAgPD0KICAgIGFzc2VydCAvLyBQb29sOiByZXNlcnZlcwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MzE0CiAgICAvLyB0aGlzLnJlc2VydmVzLnZhbHVlIC09IHJlc3VsdFNQOwogICAgc3dhcAogICAgLQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDkKICAgIC8vIHJlc2VydmVzID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogMCB9KTsKICAgIGJ5dGVjIDQgLy8gInJlc2VydmVzIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MzE0CiAgICAvLyB0aGlzLnJlc2VydmVzLnZhbHVlIC09IHJlc3VsdFNQOwogICAgc3dhcAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjMxNQogICAgLy8gaWYgKCF6ZXJvRmVlKSB7CiAgICBkaWcgMwogICAgYm56IHN3YXBGcm9tVlVzZF9hZnRlcl9pZl9lbHNlQDYKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjMxNgogICAgLy8gZmVlID0gKHJlc3VsdCAqIHRoaXMuZmVlU2hhcmVCUC52YWx1ZSkgLyBCUDsKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NAogICAgLy8gZmVlU2hhcmVCUCA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oKTsKICAgIGJ5dGVjIDE1IC8vICJmZWVTaGFyZUJQIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MzE2CiAgICAvLyBmZWUgPSAocmVzdWx0ICogdGhpcy5mZWVTaGFyZUJQLnZhbHVlKSAvIEJQOwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIGRpZyAyCiAgICAqCiAgICBpbnRjIDQgLy8gMTAwMDAKICAgIC8KICAgIGJ1cnkgMQoKc3dhcEZyb21WVXNkX2FmdGVyX2lmX2Vsc2VANjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjMxOQogICAgLy8gcmVzdWx0IC09IGZlZTsKICAgIGR1cDIKICAgIGR1cAogICAgY292ZXIgMgogICAgLQogICAgZHVwCiAgICBidXJ5IDQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ2CiAgICAvLyB0b2tlbkJhbGFuY2UgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgYnl0ZWNfMCAvLyAidG9rZW5CYWxhbmNlIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MzIxCiAgICAvLyB0aGlzLnRva2VuQmFsYW5jZS52YWx1ZSA9IG5ld0Ftb3VudDsKICAgIGRpZyAxMQogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjMyMgogICAgLy8gYXNzZXJ0KHJlc3VsdCA+PSByZWNlaXZlQW1vdW50TWluLCAnUG9vbDogc2xpcHBhZ2UnKTsKICAgIGR1cAogICAgZGlnIDcKICAgID49CiAgICBhc3NlcnQgLy8gUG9vbDogc2xpcHBhZ2UKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjMyMy0zMjcKICAgIC8vIGl0eG4uYXNzZXRUcmFuc2Zlcih7CiAgICAvLyAgIHhmZXJBc3NldDogdGhpcy5hc3NldC52YWx1ZSwKICAgIC8vICAgYXNzZXRBbW91bnQ6IHJlc3VsdCwKICAgIC8vICAgYXNzZXRSZWNlaXZlcjogdXNlci5uYXRpdmUsCiAgICAvLyB9KS5zdWJtaXQoKTsKICAgIGl0eG5fYmVnaW4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjMyNAogICAgLy8geGZlckFzc2V0OiB0aGlzLmFzc2V0LnZhbHVlLAogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoyNwogICAgLy8gYXNzZXQgPSBHbG9iYWxTdGF0ZTxBc3NldD4oKTsKICAgIGJ5dGVjXzIgLy8gImFzc2V0IgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MzI0CiAgICAvLyB4ZmVyQXNzZXQ6IHRoaXMuYXNzZXQudmFsdWUsCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgZGlnIDkKICAgIGl0eG5fZmllbGQgQXNzZXRSZWNlaXZlcgogICAgaXR4bl9maWVsZCBYZmVyQXNzZXQKICAgIGl0eG5fZmllbGQgQXNzZXRBbW91bnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjMyMy0zMjcKICAgIC8vIGl0eG4uYXNzZXRUcmFuc2Zlcih7CiAgICAvLyAgIHhmZXJBc3NldDogdGhpcy5hc3NldC52YWx1ZSwKICAgIC8vICAgYXNzZXRBbW91bnQ6IHJlc3VsdCwKICAgIC8vICAgYXNzZXRSZWNlaXZlcjogdXNlci5uYXRpdmUsCiAgICAvLyB9KS5zdWJtaXQoKTsKICAgIHB1c2hpbnQgNCAvLyA0CiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnRjXzAgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKICAgIGl0eG5fc3VibWl0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozMjgKICAgIC8vIHRoaXMuYWRkUmV3YXJkcyhmZWUpOwogICAgY2FsbHN1YiBhZGRSZXdhcmRzCgpzd2FwRnJvbVZVc2RfYWZ0ZXJfaWZfZWxzZUA4OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MzMwCiAgICAvLyBlbWl0PFN3YXBwZWRGcm9tVlVzZD4oeyByZWNpcGllbnQ6IHVzZXIsIHRva2VuSWQ6IHRoaXMuYXNzZXQudmFsdWUuaWQsIHZVc2RBbW91bnQ6IGFtb3VudCwgYW1vdW50OiByZXN1bHQsIGZlZSB9KTsKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MjcKICAgIC8vIGFzc2V0ID0gR2xvYmFsU3RhdGU8QXNzZXQ+KCk7CiAgICBieXRlY18yIC8vICJhc3NldCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjMzMAogICAgLy8gZW1pdDxTd2FwcGVkRnJvbVZVc2Q+KHsgcmVjaXBpZW50OiB1c2VyLCB0b2tlbklkOiB0aGlzLmFzc2V0LnZhbHVlLmlkLCB2VXNkQW1vdW50OiBhbW91bnQsIGFtb3VudDogcmVzdWx0LCBmZWUgfSk7CiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgaXRvYgogICAgZGlnIDcKICAgIHN3YXAKICAgIGNvbmNhdAogICAgZGlnIDYKICAgIGl0b2IKICAgIGNvbmNhdAogICAgZGlnIDIKICAgIGl0b2IKICAgIHN3YXAKICAgIGRpZyAxCiAgICBjb25jYXQKICAgIGRpZyAyCiAgICBpdG9iCiAgICBjb25jYXQKICAgIHB1c2hieXRlcyAweGQzZjFkNTQyIC8vIG1ldGhvZCAiU3dhcHBlZEZyb21WVXNkKGFkZHJlc3MsdWludDY0LHVpbnQ2NCx1aW50NjQsdWludDY0KSIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozMzIKICAgIC8vIHRoaXMudmFsaWRhdGVCYWxhbmNlUmF0aW8oKTsKICAgIGNhbGxzdWIgdmFsaWRhdGVCYWxhbmNlUmF0aW8KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjI5MS0yOTYKICAgIC8vIHN3YXBGcm9tVlVzZCgKICAgIC8vICAgdXNlcjogQWRkcmVzcywKICAgIC8vICAgYW1vdW50OiB1aW50NjQsCiAgICAvLyAgIHJlY2VpdmVBbW91bnRNaW46IHVpbnQ2NCwKICAgIC8vICAgemVyb0ZlZTogYm9vbGVhbiwKICAgIC8vICk6IHVpbnQ2NCB7CiAgICBieXRlYyAyNCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjpQb29sLnNldEZlZVNoYXJlW3JvdXRpbmddKCkgLT4gdm9pZDoKc2V0RmVlU2hhcmU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozMzkKICAgIC8vIHNldEZlZVNoYXJlKGZlZVNoYXJlQlA6IHVpbnQ2NCk6IHZvaWQgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgYnRvaQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MzQwCiAgICAvLyB0aGlzLm9ubHlPd25lcigpOwogICAgY2FsbHN1YiBvbmx5T3duZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjM0MQogICAgLy8gYXNzZXJ0KGZlZVNoYXJlQlAgPD0gQlAsICdQb29sOiB0b28gbGFyZ2UnKTsKICAgIGR1cAogICAgaW50YyA0IC8vIDEwMDAwCiAgICA8PQogICAgYXNzZXJ0IC8vIFBvb2w6IHRvbyBsYXJnZQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDQKICAgIC8vIGZlZVNoYXJlQlAgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KCk7CiAgICBieXRlYyAxNSAvLyAiZmVlU2hhcmVCUCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjM0MgogICAgLy8gdGhpcy5mZWVTaGFyZUJQLnZhbHVlID0gZmVlU2hhcmVCUDsKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozMzkKICAgIC8vIHNldEZlZVNoYXJlKGZlZVNoYXJlQlA6IHVpbnQ2NCk6IHZvaWQgewogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjpQb29sLmFkanVzdFRvdGFsTHBBbW91bnRbcm91dGluZ10oKSAtPiB2b2lkOgphZGp1c3RUb3RhbExwQW1vdW50OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MzQ2CiAgICAvLyB0aGlzLm9ubHlPd25lcigpOwogICAgY2FsbHN1YiBvbmx5T3duZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjM0NwogICAgLy8gY29uc3QgZCA9IHRoaXMuZC52YWx1ZTsKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo1MQogICAgLy8gZCA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBieXRlYyA2IC8vICJkIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MzQ3CiAgICAvLyBjb25zdCBkID0gdGhpcy5kLnZhbHVlOwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIHN3YXAKICAgIGR1cAogICAgdW5jb3ZlciAyCiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozNDgKICAgIC8vIGNvbnN0IHRvdGFsU3VwcGx5ID0gdGhpcy50b3RhbFN1cHBseS52YWx1ZTsKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MjkKICAgIC8vIHRvdGFsU3VwcGx5ID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogMCB9KTsKICAgIGJ5dGVjIDcgLy8gInRvdGFsU3VwcGx5IgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MzQ4CiAgICAvLyBjb25zdCB0b3RhbFN1cHBseSA9IHRoaXMudG90YWxTdXBwbHkudmFsdWU7CiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgc3dhcAogICAgZHVwCiAgICBjb3ZlciAyCiAgICBjb3ZlciAzCiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozNTAKICAgIC8vIGlmIChkID4gdG90YWxTdXBwbHkpIHsKICAgID4KICAgIGJ6IGFkanVzdFRvdGFsTHBBbW91bnRfYWZ0ZXJfaWZfZWxzZUAzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozNTEKICAgIC8vIHRoaXMuZGVwb3NpdExwKFR4bi5zZW5kZXIsIGQgLSB0b3RhbFN1cHBseSk7CiAgICB0eG4gU2VuZGVyCiAgICBkaWcgMgogICAgZGlnIDIKICAgIC0KICAgIGNhbGxzdWIgZGVwb3NpdExwCgphZGp1c3RUb3RhbExwQW1vdW50X2FmdGVyX2lmX2Vsc2VAMzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjM0NQogICAgLy8gYWRqdXN0VG90YWxMcEFtb3VudCgpOiB2b2lkIHsKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo6UG9vbC5zZXRCYWxhbmNlUmF0aW9NaW5CUFtyb3V0aW5nXSgpIC0+IHZvaWQ6CnNldEJhbGFuY2VSYXRpb01pbkJQOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MzU4CiAgICAvLyBzZXRCYWxhbmNlUmF0aW9NaW5CUChiYWxhbmNlUmF0aW9NaW5CUDogdWludDY0KTogdm9pZCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozNTkKICAgIC8vIHRoaXMub25seU93bmVyKCk7CiAgICBjYWxsc3ViIG9ubHlPd25lcgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MzYwCiAgICAvLyBhc3NlcnQoYmFsYW5jZVJhdGlvTWluQlAgPD0gQlAsICdQb29sOiB0b28gbGFyZ2UnKTsKICAgIGR1cAogICAgaW50YyA0IC8vIDEwMDAwCiAgICA8PQogICAgYXNzZXJ0IC8vIFBvb2w6IHRvbyBsYXJnZQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDgKICAgIC8vIGJhbGFuY2VSYXRpb01pbkJQID0gR2xvYmFsU3RhdGU8dWludDY0PigpOwogICAgYnl0ZWMgMTYgLy8gImJhbGFuY2VSYXRpb01pbkJQIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MzYxCiAgICAvLyB0aGlzLmJhbGFuY2VSYXRpb01pbkJQLnZhbHVlID0gYmFsYW5jZVJhdGlvTWluQlA7CiAgICBzd2FwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MzU4CiAgICAvLyBzZXRCYWxhbmNlUmF0aW9NaW5CUChiYWxhbmNlUmF0aW9NaW5CUDogdWludDY0KTogdm9pZCB7CiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6OlBvb2wuc3RvcERlcG9zaXRbcm91dGluZ10oKSAtPiB2b2lkOgpzdG9wRGVwb3NpdDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjM2NQogICAgLy8gdGhpcy5vbmx5U3RvcEF1dGhvcml0eSgpOwogICAgY2FsbHN1YiBvbmx5U3RvcEF1dGhvcml0eQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NTcKICAgIC8vIGNhbkRlcG9zaXQgPSBHbG9iYWxTdGF0ZTxib29sZWFuPih7IGluaXRpYWxWYWx1ZTogdHJ1ZSB9KTsvLyBpcyBkZXBvc2l0IG9wZXJhdGlvbiBhbGxvd2VkCiAgICBieXRlYyAxMiAvLyAiY2FuRGVwb3NpdCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjM2NgogICAgLy8gdGhpcy5jYW5EZXBvc2l0LnZhbHVlID0gZmFsc2U7CiAgICBpbnRjXzAgLy8gMAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjM2NAogICAgLy8gc3RvcERlcG9zaXQoKTogdm9pZCB7CiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6OlBvb2wuc3RhcnREZXBvc2l0W3JvdXRpbmddKCkgLT4gdm9pZDoKc3RhcnREZXBvc2l0OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MzcwCiAgICAvLyB0aGlzLm9ubHlPd25lcigpOwogICAgY2FsbHN1YiBvbmx5T3duZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjU3CiAgICAvLyBjYW5EZXBvc2l0ID0gR2xvYmFsU3RhdGU8Ym9vbGVhbj4oeyBpbml0aWFsVmFsdWU6IHRydWUgfSk7Ly8gaXMgZGVwb3NpdCBvcGVyYXRpb24gYWxsb3dlZAogICAgYnl0ZWMgMTIgLy8gImNhbkRlcG9zaXQiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozNzEKICAgIC8vIHRoaXMuY2FuRGVwb3NpdC52YWx1ZSA9IHRydWU7CiAgICBpbnRjXzEgLy8gMQogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjM2OQogICAgLy8gc3RhcnREZXBvc2l0KCk6IHZvaWQgewogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjpQb29sLnN0b3BXaXRoZHJhd1tyb3V0aW5nXSgpIC0+IHZvaWQ6CnN0b3BXaXRoZHJhdzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjM3NQogICAgLy8gdGhpcy5vbmx5U3RvcEF1dGhvcml0eSgpOwogICAgY2FsbHN1YiBvbmx5U3RvcEF1dGhvcml0eQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NTgKICAgIC8vIGNhbldpdGhkcmF3ID0gR2xvYmFsU3RhdGU8Ym9vbGVhbj4oeyBpbml0aWFsVmFsdWU6IHRydWUgfSk7Ly8gaXMgd2l0aGRyYXduIG9wZXJhdGlvbiBhbGxvd2VkCiAgICBieXRlYyAxMyAvLyAiY2FuV2l0aGRyYXciCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozNzYKICAgIC8vIHRoaXMuY2FuV2l0aGRyYXcudmFsdWUgPSBmYWxzZTsKICAgIGludGNfMCAvLyAwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6Mzc0CiAgICAvLyBzdG9wV2l0aGRyYXcoKTogdm9pZCB7CiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6OlBvb2wuc3RhcnRXaXRoZHJhd1tyb3V0aW5nXSgpIC0+IHZvaWQ6CnN0YXJ0V2l0aGRyYXc6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozODAKICAgIC8vIHRoaXMub25seU93bmVyKCk7CiAgICBjYWxsc3ViIG9ubHlPd25lcgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NTgKICAgIC8vIGNhbldpdGhkcmF3ID0gR2xvYmFsU3RhdGU8Ym9vbGVhbj4oeyBpbml0aWFsVmFsdWU6IHRydWUgfSk7Ly8gaXMgd2l0aGRyYXduIG9wZXJhdGlvbiBhbGxvd2VkCiAgICBieXRlYyAxMyAvLyAiY2FuV2l0aGRyYXciCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozODEKICAgIC8vIHRoaXMuY2FuV2l0aGRyYXcudmFsdWUgPSB0cnVlOwogICAgaW50Y18xIC8vIDEKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozNzkKICAgIC8vIHN0YXJ0V2l0aGRyYXcoKTogdm9pZCB7CiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6OlBvb2wuc2V0U3RvcEF1dGhvcml0eVtyb3V0aW5nXSgpIC0+IHZvaWQ6CnNldFN0b3BBdXRob3JpdHk6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozODQKICAgIC8vIHNldFN0b3BBdXRob3JpdHkoc3RvcEF1dGhvcml0eTogQWRkcmVzcyk6IHZvaWQgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMyAvLyAzMgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC5zdGF0aWNfYXJyYXk8YXJjNC51aW50OCwgMzI+CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozODUKICAgIC8vIHRoaXMub25seU93bmVyKCk7CiAgICBjYWxsc3ViIG9ubHlPd25lcgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NTYKICAgIC8vIHByaXZhdGUgc3RvcEF1dGhvcml0eSA9IEdsb2JhbFN0YXRlPEFkZHJlc3M+KCk7Ly8gY2FuIHJlc3RyaWN0IGRlcG9zaXQgb3Igd2l0aGRyYXcgb3BlcmF0aW9ucwogICAgYnl0ZWMgMjEgLy8gInN0b3BBdXRob3JpdHkiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozODYKICAgIC8vIHRoaXMuc3RvcEF1dGhvcml0eS52YWx1ZSA9IHN0b3BBdXRob3JpdHk7CiAgICBzd2FwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6Mzg0CiAgICAvLyBzZXRTdG9wQXV0aG9yaXR5KHN0b3BBdXRob3JpdHk6IEFkZHJlc3MpOiB2b2lkIHsKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo6UG9vbC5zZXRSb3V0ZXJbcm91dGluZ10oKSAtPiB2b2lkOgpzZXRSb3V0ZXI6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozODkKICAgIC8vIHNldFJvdXRlcihyb3V0ZXI6IEFkZHJlc3MpOiB2b2lkIHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzMgLy8gMzIKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQuc3RhdGljX2FycmF5PGFyYzQudWludDgsIDMyPgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MzkwCiAgICAvLyB0aGlzLm9ubHlPd25lcigpOwogICAgY2FsbHN1YiBvbmx5T3duZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ1CiAgICAvLyByb3V0ZXIgPSBHbG9iYWxTdGF0ZTxBZGRyZXNzPigpOy8vIGlzIGRlcG9zaXQgb3BlcmF0aW9uIGFsbG93ZWQKICAgIGJ5dGVjIDIwIC8vICJyb3V0ZXIiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozOTEKICAgIC8vIHRoaXMucm91dGVyLnZhbHVlID0gcm91dGVyOwogICAgc3dhcAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjM4OQogICAgLy8gc2V0Um91dGVyKHJvdXRlcjogQWRkcmVzcyk6IHZvaWQgewogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czo6UmV3YXJkTWFuYWdlci5jbGFpbVJld2FyZHNbcm91dGluZ10oKSAtPiB2b2lkOgpjbGFpbVJld2FyZHM6CiAgICBwdXNoYnl0ZXMgIiIKICAgIGR1cAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjYxCiAgICAvLyBjb25zdCB1c2VyID0gVHhuLnNlbmRlcjsKICAgIHR4biBTZW5kZXIKICAgIGR1cAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjYyCiAgICAvLyBjb25zdCB1c2VyTHBBbW91bnQgPSB0aGlzLmJhbGFuY2UodXNlcikudmFsdWU7CiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjMzCiAgICAvLyBiYWxhbmNlID0gTG9jYWxTdGF0ZTx1aW50NjQ+KCk7CiAgICBieXRlY18zIC8vICJiYWxhbmNlIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjYyCiAgICAvLyBjb25zdCB1c2VyTHBBbW91bnQgPSB0aGlzLmJhbGFuY2UodXNlcikudmFsdWU7CiAgICBhcHBfbG9jYWxfZ2V0X2V4CiAgICBzd2FwCiAgICBkdXAKICAgIHVuY292ZXIgMgogICAgYXNzZXJ0IC8vIGNoZWNrIExvY2FsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6NjMKICAgIC8vIGlmICh1c2VyTHBBbW91bnQgPiAwKSB7CiAgICBieiBjbGFpbVJld2FyZHNfYWZ0ZXJfaWZfZWxzZUA2CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6NjQKICAgIC8vIGNvbnN0IHJld2FyZHMgPSBiaWd1aW50VG9VaW50NjRNb2R1bG8oQmlnVWludCh1c2VyTHBBbW91bnQpICogdGhpcy5hY2NSZXdhcmRQZXJTaGFyZVAudmFsdWUgLyBQX1NDQUxFKTsKICAgIGR1cAogICAgaXRvYgogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czozMAogICAgLy8gYWNjUmV3YXJkUGVyU2hhcmVQID0gR2xvYmFsU3RhdGU8YmlndWludD4oeyBpbml0aWFsVmFsdWU6IDBuIH0pOwogICAgYnl0ZWMgOCAvLyAiYWNjUmV3YXJkUGVyU2hhcmVQIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjY0CiAgICAvLyBjb25zdCByZXdhcmRzID0gYmlndWludFRvVWludDY0TW9kdWxvKEJpZ1VpbnQodXNlckxwQW1vdW50KSAqIHRoaXMuYWNjUmV3YXJkUGVyU2hhcmVQLnZhbHVlIC8gUF9TQ0FMRSk7CiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgYioKICAgIGJ5dGVjIDkgLy8gMHgwMTAwMDAwMDAwMDAwMAogICAgYi8KICAgIGNhbGxzdWIgYmlndWludFRvVWludDY0TW9kdWxvCiAgICBkdXAKICAgIGJ1cnkgNAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjY1CiAgICAvLyBjb25zdCBwZW5kaW5nOiB1aW50NjQgPSByZXdhcmRzIC0gdGhpcy51c2VyUmV3YXJkRGVidCh1c2VyKS52YWx1ZTsKICAgIGRpZyAyCiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjM0CiAgICAvLyB1c2VyUmV3YXJkRGVidCA9IExvY2FsU3RhdGU8dWludDY0PigpOwogICAgYnl0ZWMgNSAvLyAidXNlclJld2FyZERlYnQiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6NjUKICAgIC8vIGNvbnN0IHBlbmRpbmc6IHVpbnQ2NCA9IHJld2FyZHMgLSB0aGlzLnVzZXJSZXdhcmREZWJ0KHVzZXIpLnZhbHVlOwogICAgYXBwX2xvY2FsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIExvY2FsU3RhdGUgZXhpc3RzCiAgICAtCiAgICBkdXAKICAgIGJ1cnkgNQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjY2CiAgICAvLyBpZiAocGVuZGluZyA+IDApIHsKICAgIGJ6IGNsYWltUmV3YXJkc19hZnRlcl9pZl9lbHNlQDYKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czo2NwogICAgLy8gdGhpcy51c2VyUmV3YXJkRGVidCh1c2VyKS52YWx1ZSA9IHJld2FyZHM7CiAgICBkaWcgMQogICAgZHVwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MzQKICAgIC8vIHVzZXJSZXdhcmREZWJ0ID0gTG9jYWxTdGF0ZTx1aW50NjQ+KCk7CiAgICBieXRlYyA1IC8vICJ1c2VyUmV3YXJkRGVidCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czo2NwogICAgLy8gdGhpcy51c2VyUmV3YXJkRGVidCh1c2VyKS52YWx1ZSA9IHJld2FyZHM7CiAgICBkaWcgNQogICAgYXBwX2xvY2FsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjY4CiAgICAvLyBpdHhuLmFzc2V0VHJhbnNmZXIoeyB4ZmVyQXNzZXQ6IHRoaXMuYXNzZXQudmFsdWUsIGFzc2V0QW1vdW50OiBwZW5kaW5nLCBhc3NldFJlY2VpdmVyOiB1c2VyIH0pLnN1Ym1pdCgpOwogICAgaXR4bl9iZWdpbgogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoyNwogICAgLy8gYXNzZXQgPSBHbG9iYWxTdGF0ZTxBc3NldD4oKTsKICAgIGJ5dGVjXzIgLy8gImFzc2V0IgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjY4CiAgICAvLyBpdHhuLmFzc2V0VHJhbnNmZXIoeyB4ZmVyQXNzZXQ6IHRoaXMuYXNzZXQudmFsdWUsIGFzc2V0QW1vdW50OiBwZW5kaW5nLCBhc3NldFJlY2VpdmVyOiB1c2VyIH0pLnN1Ym1pdCgpOwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIGRpZyAxCiAgICBpdHhuX2ZpZWxkIEFzc2V0UmVjZWl2ZXIKICAgIGRpZyA1CiAgICBkdXAKICAgIGNvdmVyIDIKICAgIGl0eG5fZmllbGQgQXNzZXRBbW91bnQKICAgIGl0eG5fZmllbGQgWGZlckFzc2V0CiAgICBwdXNoaW50IDQgLy8gNAogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICBpdHhuX3N1Ym1pdAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjY5CiAgICAvLyBlbWl0PFJld2FyZHNDbGFpbWVkPih7IHVzZXI6IG5ldyBBZGRyZXNzKHVzZXIpLCBwZW5kaW5nIH0pOwogICAgaXRvYgogICAgY29uY2F0CiAgICBieXRlYyAyNSAvLyBtZXRob2QgIlJld2FyZHNDbGFpbWVkKGFkZHJlc3MsdWludDY0KSIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCgpjbGFpbVJld2FyZHNfYWZ0ZXJfaWZfZWxzZUA2OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjU5CiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6OlJld2FyZE1hbmFnZXIuc2V0QWRtaW5GZWVTaGFyZVtyb3V0aW5nXSgpIC0+IHZvaWQ6CnNldEFkbWluRmVlU2hhcmU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6NzQKICAgIC8vIEBhYmltZXRob2QoKQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgYnRvaQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjc2CiAgICAvLyB0aGlzLm9ubHlPd25lcigpOwogICAgY2FsbHN1YiBvbmx5T3duZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czo3NwogICAgLy8gYXNzZXJ0KGFkbWluRmVlU2hhcmVCUCA8PSBCUCwgJ1Jld2FyZE1hbmFnZXI6IHRvbyBoaWdoJyk7CiAgICBkdXAKICAgIGludGMgNCAvLyAxMDAwMAogICAgPD0KICAgIGFzc2VydCAvLyBSZXdhcmRNYW5hZ2VyOiB0b28gaGlnaAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjI4CiAgICAvLyBhZG1pbkZlZVNoYXJlQlAgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiBCUCAvIDUgfSk7IC8vIERlZmF1bHQgYWRtaW4gZmVlIGlzIDIwJQogICAgYnl0ZWMgMTggLy8gImFkbWluRmVlU2hhcmVCUCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czo3OAogICAgLy8gdGhpcy5hZG1pbkZlZVNoYXJlQlAudmFsdWUgPSBhZG1pbkZlZVNoYXJlQlA7CiAgICBzd2FwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjc0CiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6OlJld2FyZE1hbmFnZXIuY2xhaW1BZG1pbkZlZVtyb3V0aW5nXSgpIC0+IHZvaWQ6CmNsYWltQWRtaW5GZWU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6ODMKICAgIC8vIHRoaXMub25seU93bmVyKCk7CiAgICBjYWxsc3ViIG9ubHlPd25lcgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjg0CiAgICAvLyBjb25zdCBhZG1pbkZlZUFtb3VudCA9IHRoaXMuYWRtaW5GZWVBbW91bnQudmFsdWU7CiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjMxCiAgICAvLyBhZG1pbkZlZUFtb3VudCA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBieXRlYyAxMSAvLyAiYWRtaW5GZWVBbW91bnQiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6ODQKICAgIC8vIGNvbnN0IGFkbWluRmVlQW1vdW50ID0gdGhpcy5hZG1pbkZlZUFtb3VudC52YWx1ZTsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBzd2FwCiAgICBkdXAKICAgIHVuY292ZXIgMgogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjg1CiAgICAvLyBpZiAoYWRtaW5GZWVBbW91bnQgPiAwKSB7CiAgICBieiBjbGFpbUFkbWluRmVlX2FmdGVyX2lmX2Vsc2VANAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjg2LTkwCiAgICAvLyBpdHhuLmFzc2V0VHJhbnNmZXIoewogICAgLy8gICB4ZmVyQXNzZXQ6IHRoaXMuYXNzZXQudmFsdWUsCiAgICAvLyAgIGFzc2V0QW1vdW50OiBhZG1pbkZlZUFtb3VudCwKICAgIC8vICAgYXNzZXRSZWNlaXZlcjogdGhpcy5vd25lci52YWx1ZS5ieXRlcywKICAgIC8vIH0pLnN1Ym1pdCgpOwogICAgaXR4bl9iZWdpbgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjg3CiAgICAvLyB4ZmVyQXNzZXQ6IHRoaXMuYXNzZXQudmFsdWUsCiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjI3CiAgICAvLyBhc3NldCA9IEdsb2JhbFN0YXRlPEFzc2V0PigpOwogICAgYnl0ZWNfMiAvLyAiYXNzZXQiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6ODcKICAgIC8vIHhmZXJBc3NldDogdGhpcy5hc3NldC52YWx1ZSwKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6ODkKICAgIC8vIGFzc2V0UmVjZWl2ZXI6IHRoaXMub3duZXIudmFsdWUuYnl0ZXMsCiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9vd25hYmxlLmFsZ28udHM6NgogICAgLy8gcHJvdGVjdGVkIG93bmVyID0gR2xvYmFsU3RhdGU8QWRkcmVzcz4oKTsKICAgIGJ5dGVjIDE0IC8vICJvd25lciIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czo4OQogICAgLy8gYXNzZXRSZWNlaXZlcjogdGhpcy5vd25lci52YWx1ZS5ieXRlcywKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICBpdHhuX2ZpZWxkIEFzc2V0UmVjZWl2ZXIKICAgIGRpZyAxCiAgICBpdHhuX2ZpZWxkIEFzc2V0QW1vdW50CiAgICBpdHhuX2ZpZWxkIFhmZXJBc3NldAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjg2LTkwCiAgICAvLyBpdHhuLmFzc2V0VHJhbnNmZXIoewogICAgLy8gICB4ZmVyQXNzZXQ6IHRoaXMuYXNzZXQudmFsdWUsCiAgICAvLyAgIGFzc2V0QW1vdW50OiBhZG1pbkZlZUFtb3VudCwKICAgIC8vICAgYXNzZXRSZWNlaXZlcjogdGhpcy5vd25lci52YWx1ZS5ieXRlcywKICAgIC8vIH0pLnN1Ym1pdCgpOwogICAgcHVzaGludCA0IC8vIDQKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludGNfMCAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgaXR4bl9zdWJtaXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czozMQogICAgLy8gYWRtaW5GZWVBbW91bnQgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgYnl0ZWMgMTEgLy8gImFkbWluRmVlQW1vdW50IgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjkxCiAgICAvLyB0aGlzLmFkbWluRmVlQW1vdW50LnZhbHVlID0gMDsKICAgIGludGNfMCAvLyAwCiAgICBhcHBfZ2xvYmFsX3B1dAoKY2xhaW1BZG1pbkZlZV9hZnRlcl9pZl9lbHNlQDQ6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6ODEKICAgIC8vIEBhYmltZXRob2QoKQogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czo6UmV3YXJkTWFuYWdlci5wZW5kaW5nUmV3YXJkW3JvdXRpbmddKCkgLT4gdm9pZDoKcGVuZGluZ1Jld2FyZDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czo5NQogICAgLy8gQGFiaW1ldGhvZCh7IHJlYWRvbmx5OiB0cnVlIH0pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18zIC8vIDMyCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnN0YXRpY19hcnJheTxhcmM0LnVpbnQ4LCAzMj4KICAgIGNhbGxzdWIgc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjpSZXdhcmRNYW5hZ2VyLnBlbmRpbmdSZXdhcmQKICAgIGl0b2IKICAgIGJ5dGVjIDI0IC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9vd25hYmxlLmFsZ28udHM6Ok93bmFibGUudHJhbnNmZXJPd25lcnNoaXBbcm91dGluZ10oKSAtPiB2b2lkOgp0cmFuc2Zlck93bmVyc2hpcDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvb3duYWJsZS5hbGdvLnRzOjE2CiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzMgLy8gMzIKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQuc3RhdGljX2FycmF5PGFyYzQudWludDgsIDMyPgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9vd25hYmxlLmFsZ28udHM6MTgKICAgIC8vIHRoaXMub25seU93bmVyKCk7CiAgICBjYWxsc3ViIG9ubHlPd25lcgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9vd25hYmxlLmFsZ28udHM6NgogICAgLy8gcHJvdGVjdGVkIG93bmVyID0gR2xvYmFsU3RhdGU8QWRkcmVzcz4oKTsKICAgIGJ5dGVjIDE0IC8vICJvd25lciIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvb3duYWJsZS5hbGdvLnRzOjE5CiAgICAvLyB0aGlzLm93bmVyLnZhbHVlID0gbmV3T3duZXI7CiAgICBzd2FwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9vd25hYmxlLmFsZ28udHM6MTYKICAgIC8vIEBhYmltZXRob2QoKQogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjpQb29sLm9ubHlSb3V0ZXIoKSAtPiB2b2lkOgpvbmx5Um91dGVyOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MTE4CiAgICAvLyBhc3NlcnQob3AuVHhuLnNlbmRlci5ieXRlcyA9PT0gdGhpcy5yb3V0ZXIudmFsdWUuYnl0ZXMsICdQb29sOiBvbmx5IHJvdXRlcicpOwogICAgdHhuIFNlbmRlcgogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ1CiAgICAvLyByb3V0ZXIgPSBHbG9iYWxTdGF0ZTxBZGRyZXNzPigpOy8vIGlzIGRlcG9zaXQgb3BlcmF0aW9uIGFsbG93ZWQKICAgIGJ5dGVjIDIwIC8vICJyb3V0ZXIiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoxMTgKICAgIC8vIGFzc2VydChvcC5UeG4uc2VuZGVyLmJ5dGVzID09PSB0aGlzLnJvdXRlci52YWx1ZS5ieXRlcywgJ1Bvb2w6IG9ubHkgcm91dGVyJyk7CiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgPT0KICAgIGFzc2VydCAvLyBQb29sOiBvbmx5IHJvdXRlcgogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6OlBvb2wub25seVN0b3BBdXRob3JpdHkoKSAtPiB2b2lkOgpvbmx5U3RvcEF1dGhvcml0eToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjEyMgogICAgLy8gYXNzZXJ0KG9wLlR4bi5zZW5kZXIuYnl0ZXMgPT09IHRoaXMuc3RvcEF1dGhvcml0eS52YWx1ZS5ieXRlcywgJ1Bvb2w6IGlzIG5vdCBzdG9wQXV0aG9yaXR5Jyk7CiAgICB0eG4gU2VuZGVyCiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NTYKICAgIC8vIHByaXZhdGUgc3RvcEF1dGhvcml0eSA9IEdsb2JhbFN0YXRlPEFkZHJlc3M+KCk7Ly8gY2FuIHJlc3RyaWN0IGRlcG9zaXQgb3Igd2l0aGRyYXcgb3BlcmF0aW9ucwogICAgYnl0ZWMgMjEgLy8gInN0b3BBdXRob3JpdHkiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoxMjIKICAgIC8vIGFzc2VydChvcC5UeG4uc2VuZGVyLmJ5dGVzID09PSB0aGlzLnN0b3BBdXRob3JpdHkudmFsdWUuYnl0ZXMsICdQb29sOiBpcyBub3Qgc3RvcEF1dGhvcml0eScpOwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgID09CiAgICBhc3NlcnQgLy8gUG9vbDogaXMgbm90IHN0b3BBdXRob3JpdHkKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjpQb29sLnZhbGlkYXRlQmFsYW5jZVJhdGlvKCkgLT4gdm9pZDoKdmFsaWRhdGVCYWxhbmNlUmF0aW86CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoxMjgKICAgIC8vIHByaXZhdGUgdmFsaWRhdGVCYWxhbmNlUmF0aW8oKTogdm9pZCB7CiAgICBwcm90byAwIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjEyOQogICAgLy8gY29uc3QgdG9rZW5CYWxhbmNlID0gdGhpcy50b2tlbkJhbGFuY2UudmFsdWU7CiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDYKICAgIC8vIHRva2VuQmFsYW5jZSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBieXRlY18wIC8vICJ0b2tlbkJhbGFuY2UiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoxMjkKICAgIC8vIGNvbnN0IHRva2VuQmFsYW5jZSA9IHRoaXMudG9rZW5CYWxhbmNlLnZhbHVlOwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIHN3YXAKICAgIGR1cAogICAgdW5jb3ZlciAyCiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoxMzAKICAgIC8vIGNvbnN0IHZVc2RCYWxhbmNlID0gdGhpcy52VXNkQmFsYW5jZS52YWx1ZTsKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NwogICAgLy8gdlVzZEJhbGFuY2UgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgYnl0ZWNfMSAvLyAidlVzZEJhbGFuY2UiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoxMzAKICAgIC8vIGNvbnN0IHZVc2RCYWxhbmNlID0gdGhpcy52VXNkQmFsYW5jZS52YWx1ZTsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBzd2FwCiAgICBkdXAKICAgIGNvdmVyIDIKICAgIGNvdmVyIDMKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjEzMQogICAgLy8gaWYgKHRva2VuQmFsYW5jZSA+IHZVc2RCYWxhbmNlKSB7CiAgICA+CiAgICBieiB2YWxpZGF0ZUJhbGFuY2VSYXRpb19lbHNlX2JvZHlAMgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MTMyCiAgICAvLyBhc3NlcnQoKHZVc2RCYWxhbmNlICogQlApIC8gdG9rZW5CYWxhbmNlID49IHRoaXMuYmFsYW5jZVJhdGlvTWluQlAudmFsdWUsICdQb29sOiBsb3cgdlVTRCBiYWxhbmNlJyk7CiAgICBmcmFtZV9kaWcgMQogICAgaW50YyA0IC8vIDEwMDAwCiAgICAqCiAgICBmcmFtZV9kaWcgMAogICAgLwogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ4CiAgICAvLyBiYWxhbmNlUmF0aW9NaW5CUCA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oKTsKICAgIGJ5dGVjIDE2IC8vICJiYWxhbmNlUmF0aW9NaW5CUCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjEzMgogICAgLy8gYXNzZXJ0KCh2VXNkQmFsYW5jZSAqIEJQKSAvIHRva2VuQmFsYW5jZSA+PSB0aGlzLmJhbGFuY2VSYXRpb01pbkJQLnZhbHVlLCAnUG9vbDogbG93IHZVU0QgYmFsYW5jZScpOwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgID49CiAgICBhc3NlcnQgLy8gUG9vbDogbG93IHZVU0QgYmFsYW5jZQoKdmFsaWRhdGVCYWxhbmNlUmF0aW9fYWZ0ZXJfaWZfZWxzZUA1OgogICAgcmV0c3ViCgp2YWxpZGF0ZUJhbGFuY2VSYXRpb19lbHNlX2JvZHlAMjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjEzMwogICAgLy8gfSBlbHNlIGlmICh0b2tlbkJhbGFuY2UgPCB2VXNkQmFsYW5jZSkgewogICAgZnJhbWVfZGlnIDAKICAgIGZyYW1lX2RpZyAxCiAgICA8CiAgICBieiB2YWxpZGF0ZUJhbGFuY2VSYXRpb19hZnRlcl9pZl9lbHNlQDUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjEzNAogICAgLy8gYXNzZXJ0KCh0b2tlbkJhbGFuY2UgKiBCUCkgLyB2VXNkQmFsYW5jZSA+PSB0aGlzLmJhbGFuY2VSYXRpb01pbkJQLnZhbHVlLCAnUG9vbDogbG93IHRva2VuIGJhbGFuY2UnKTsKICAgIGZyYW1lX2RpZyAwCiAgICBpbnRjIDQgLy8gMTAwMDAKICAgICoKICAgIGZyYW1lX2RpZyAxCiAgICAvCiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDgKICAgIC8vIGJhbGFuY2VSYXRpb01pbkJQID0gR2xvYmFsU3RhdGU8dWludDY0PigpOwogICAgYnl0ZWMgMTYgLy8gImJhbGFuY2VSYXRpb01pbkJQIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MTM0CiAgICAvLyBhc3NlcnQoKHRva2VuQmFsYW5jZSAqIEJQKSAvIHZVc2RCYWxhbmNlID49IHRoaXMuYmFsYW5jZVJhdGlvTWluQlAudmFsdWUsICdQb29sOiBsb3cgdG9rZW4gYmFsYW5jZScpOwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgID49CiAgICBhc3NlcnQgLy8gUG9vbDogbG93IHRva2VuIGJhbGFuY2UKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjpQb29sLndpdGhkcmF3KGFtb3VudExwOiB1aW50NjQsIGJ1ZGdldDogdWludDY0KSAtPiB2b2lkOgpzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo6UG9vbC53aXRoZHJhdzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjE5Ny0xOTgKICAgIC8vIEBhYmltZXRob2QoeyBkZWZhdWx0QXJndW1lbnRzOiB7IGJ1ZGdldDogeyBjb25zdGFudDogMzAwMCB9IH0gfSkKICAgIC8vIHdpdGhkcmF3KGFtb3VudExwOiB1aW50NjQsIGJ1ZGdldDogdWludDY0KTogdm9pZCB7CiAgICBwcm90byAyIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjE5OQogICAgLy8gZW5zdXJlQnVkZ2V0KGJ1ZGdldCwgT3BVcEZlZVNvdXJjZS5Hcm91cENyZWRpdCk7CiAgICBmcmFtZV9kaWcgLTEKICAgIGludGNfMCAvLyAwCiAgICBjYWxsc3ViIGVuc3VyZV9idWRnZXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjE0MwogICAgLy8gYXNzZXJ0KHRoaXMuY2FuV2l0aGRyYXcudmFsdWUsICciUG9vbDogd2l0aGRyYXcgcHJvaGliaXRlZCcpOwogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjU4CiAgICAvLyBjYW5XaXRoZHJhdyA9IEdsb2JhbFN0YXRlPGJvb2xlYW4+KHsgaW5pdGlhbFZhbHVlOiB0cnVlIH0pOy8vIGlzIHdpdGhkcmF3biBvcGVyYXRpb24gYWxsb3dlZAogICAgYnl0ZWMgMTMgLy8gImNhbldpdGhkcmF3IgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MTQzCiAgICAvLyBhc3NlcnQodGhpcy5jYW5XaXRoZHJhdy52YWx1ZSwgJyJQb29sOiB3aXRoZHJhdyBwcm9oaWJpdGVkJyk7CiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgYXNzZXJ0IC8vICJQb29sOiB3aXRoZHJhdyBwcm9oaWJpdGVkCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyMDMKICAgIC8vIGNvbnN0IG9sZEQgPSB0aGlzLmQudmFsdWU7CiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NTEKICAgIC8vIGQgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgYnl0ZWMgNiAvLyAiZCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjIwMwogICAgLy8gY29uc3Qgb2xkRCA9IHRoaXMuZC52YWx1ZTsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyMDQKICAgIC8vIHRoaXMud2l0aGRyYXdMcChUeG4uc2VuZGVyLCBhbW91bnRMcCk7CiAgICB0eG4gU2VuZGVyCiAgICBkdXAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoxMzAKICAgIC8vIGxldCB1c2VyTHBBbW91bnQgPSB0aGlzLmJhbGFuY2UoZnJvbSkudmFsdWU7CiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjMzCiAgICAvLyBiYWxhbmNlID0gTG9jYWxTdGF0ZTx1aW50NjQ+KCk7CiAgICBieXRlY18zIC8vICJiYWxhbmNlIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjEzMAogICAgLy8gbGV0IHVzZXJMcEFtb3VudCA9IHRoaXMuYmFsYW5jZShmcm9tKS52YWx1ZTsKICAgIGFwcF9sb2NhbF9nZXRfZXgKICAgIHN3YXAKICAgIGR1cAogICAgdW5jb3ZlciAyCiAgICBhc3NlcnQgLy8gY2hlY2sgTG9jYWxTdGF0ZSBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoxMzEKICAgIC8vIGFzc2VydCh1c2VyTHBBbW91bnQgPj0gbHBBbW91bnQsICdSZXdhcmRNYW5hZ2VyOiBub3QgZW5vdWdoIGFtb3VudCcpOwogICAgZHVwCiAgICBmcmFtZV9kaWcgLTIKICAgID49CiAgICBhc3NlcnQgLy8gUmV3YXJkTWFuYWdlcjogbm90IGVub3VnaCBhbW91bnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoxMzIKICAgIC8vIGNvbnN0IGFjY1Jld2FyZFBlclNoYXJlUCA9IHRoaXMuYWNjUmV3YXJkUGVyU2hhcmVQLnZhbHVlOwogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czozMAogICAgLy8gYWNjUmV3YXJkUGVyU2hhcmVQID0gR2xvYmFsU3RhdGU8YmlndWludD4oeyBpbml0aWFsVmFsdWU6IDBuIH0pOwogICAgYnl0ZWMgOCAvLyAiYWNjUmV3YXJkUGVyU2hhcmVQIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjEzMgogICAgLy8gY29uc3QgYWNjUmV3YXJkUGVyU2hhcmVQID0gdGhpcy5hY2NSZXdhcmRQZXJTaGFyZVAudmFsdWU7CiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgc3dhcAogICAgY292ZXIgMgogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjEzMwogICAgLy8gbGV0IHBlbmRpbmc6IHVpbnQ2NCA9IDA7CiAgICBpbnRjXzAgLy8gMAogICAgc3dhcAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjEzNAogICAgLy8gaWYgKHVzZXJMcEFtb3VudCA+IDApIHsKICAgIGJ6IHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjpQb29sLndpdGhkcmF3X2FmdGVyX2lmX2Vsc2VANgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjEzNQogICAgLy8gcGVuZGluZyA9IGJpZ3VpbnRUb1VpbnQ2NE1vZHVsbygoQmlnVWludCh1c2VyTHBBbW91bnQpICogYWNjUmV3YXJkUGVyU2hhcmVQKSAvIFBfU0NBTEUpIC0gdGhpcy51c2VyUmV3YXJkRGVidChmcm9tKS52YWx1ZTsKICAgIGZyYW1lX2RpZyAyCiAgICBpdG9iCiAgICBmcmFtZV9kaWcgMwogICAgYioKICAgIGJ5dGVjIDkgLy8gMHgwMTAwMDAwMDAwMDAwMAogICAgYi8KICAgIGNhbGxzdWIgYmlndWludFRvVWludDY0TW9kdWxvCiAgICBmcmFtZV9kaWcgMQogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czozNAogICAgLy8gdXNlclJld2FyZERlYnQgPSBMb2NhbFN0YXRlPHVpbnQ2ND4oKTsKICAgIGJ5dGVjIDUgLy8gInVzZXJSZXdhcmREZWJ0IgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjEzNQogICAgLy8gcGVuZGluZyA9IGJpZ3VpbnRUb1VpbnQ2NE1vZHVsbygoQmlnVWludCh1c2VyTHBBbW91bnQpICogYWNjUmV3YXJkUGVyU2hhcmVQKSAvIFBfU0NBTEUpIC0gdGhpcy51c2VyUmV3YXJkRGVidChmcm9tKS52YWx1ZTsKICAgIGFwcF9sb2NhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBMb2NhbFN0YXRlIGV4aXN0cwogICAgLQogICAgZnJhbWVfYnVyeSA0CgpzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo6UG9vbC53aXRoZHJhd19hZnRlcl9pZl9lbHNlQDY6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MTM3CiAgICAvLyB1c2VyTHBBbW91bnQgLT0gbHBBbW91bnQ7CiAgICBmcmFtZV9kaWcgMgogICAgZnJhbWVfZGlnIC0yCiAgICAtCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MTM4CiAgICAvLyB0aGlzLmJhbGFuY2UoZnJvbSkudmFsdWUgLT0gbHBBbW91bnQ7CiAgICBmcmFtZV9kaWcgMQogICAgZHVwCiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjMzCiAgICAvLyBiYWxhbmNlID0gTG9jYWxTdGF0ZTx1aW50NjQ+KCk7CiAgICBieXRlY18zIC8vICJiYWxhbmNlIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjEzOAogICAgLy8gdGhpcy5iYWxhbmNlKGZyb20pLnZhbHVlIC09IGxwQW1vdW50OwogICAgYXBwX2xvY2FsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIExvY2FsU3RhdGUgZXhpc3RzCiAgICBmcmFtZV9kaWcgLTIKICAgIC0KICAgIGRpZyAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MzMKICAgIC8vIGJhbGFuY2UgPSBMb2NhbFN0YXRlPHVpbnQ2ND4oKTsKICAgIGJ5dGVjXzMgLy8gImJhbGFuY2UiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MTM4CiAgICAvLyB0aGlzLmJhbGFuY2UoZnJvbSkudmFsdWUgLT0gbHBBbW91bnQ7CiAgICB1bmNvdmVyIDIKICAgIGFwcF9sb2NhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoxMzkKICAgIC8vIHRoaXMudG90YWxTdXBwbHkudmFsdWUgLT0gbHBBbW91bnQ7CiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjI5CiAgICAvLyB0b3RhbFN1cHBseSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBieXRlYyA3IC8vICJ0b3RhbFN1cHBseSIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoxMzkKICAgIC8vIHRoaXMudG90YWxTdXBwbHkudmFsdWUgLT0gbHBBbW91bnQ7CiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgZnJhbWVfZGlnIC0yCiAgICAtCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MjkKICAgIC8vIHRvdGFsU3VwcGx5ID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogMCB9KTsKICAgIGJ5dGVjIDcgLy8gInRvdGFsU3VwcGx5IgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjEzOQogICAgLy8gdGhpcy50b3RhbFN1cHBseS52YWx1ZSAtPSBscEFtb3VudDsKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MTQwCiAgICAvLyB0aGlzLnVzZXJSZXdhcmREZWJ0KGZyb20pLnZhbHVlID0gYmlndWludFRvVWludDY0TW9kdWxvKEJpZ1VpbnQodXNlckxwQW1vdW50KSAqIGFjY1Jld2FyZFBlclNoYXJlUCAvIFBfU0NBTEUpOwogICAgc3dhcAogICAgaXRvYgogICAgZnJhbWVfZGlnIDMKICAgIGIqCiAgICBieXRlYyA5IC8vIDB4MDEwMDAwMDAwMDAwMDAKICAgIGIvCiAgICBjYWxsc3ViIGJpZ3VpbnRUb1VpbnQ2NE1vZHVsbwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjM0CiAgICAvLyB1c2VyUmV3YXJkRGVidCA9IExvY2FsU3RhdGU8dWludDY0PigpOwogICAgYnl0ZWMgNSAvLyAidXNlclJld2FyZERlYnQiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MTQwCiAgICAvLyB0aGlzLnVzZXJSZXdhcmREZWJ0KGZyb20pLnZhbHVlID0gYmlndWludFRvVWludDY0TW9kdWxvKEJpZ1VpbnQodXNlckxwQW1vdW50KSAqIGFjY1Jld2FyZFBlclNoYXJlUCAvIFBfU0NBTEUpOwogICAgc3dhcAogICAgYXBwX2xvY2FsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjE0MQogICAgLy8gaWYgKHBlbmRpbmcgPiAwKSB7CiAgICBmcmFtZV9kaWcgNAogICAgYnogc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6OlBvb2wud2l0aGRyYXdfYWZ0ZXJfaWZfZWxzZUA5CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MTQyCiAgICAvLyBpdHhuLmFzc2V0VHJhbnNmZXIoeyB4ZmVyQXNzZXQ6IHRoaXMuYXNzZXQudmFsdWUsIGFzc2V0QW1vdW50OiBwZW5kaW5nLCBhc3NldFJlY2VpdmVyOiBmcm9tIH0pLnN1Ym1pdCgpOwogICAgaXR4bl9iZWdpbgogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoyNwogICAgLy8gYXNzZXQgPSBHbG9iYWxTdGF0ZTxBc3NldD4oKTsKICAgIGJ5dGVjXzIgLy8gImFzc2V0IgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjE0MgogICAgLy8gaXR4bi5hc3NldFRyYW5zZmVyKHsgeGZlckFzc2V0OiB0aGlzLmFzc2V0LnZhbHVlLCBhc3NldEFtb3VudDogcGVuZGluZywgYXNzZXRSZWNlaXZlcjogZnJvbSB9KS5zdWJtaXQoKTsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICBmcmFtZV9kaWcgMQogICAgZHVwCiAgICBjb3ZlciAyCiAgICBpdHhuX2ZpZWxkIEFzc2V0UmVjZWl2ZXIKICAgIGZyYW1lX2RpZyA0CiAgICBkdXAKICAgIGNvdmVyIDIKICAgIGl0eG5fZmllbGQgQXNzZXRBbW91bnQKICAgIGl0eG5fZmllbGQgWGZlckFzc2V0CiAgICBwdXNoaW50IDQgLy8gNAogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICBpdHhuX3N1Ym1pdAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjE0MwogICAgLy8gZW1pdDxSZXdhcmRzQ2xhaW1lZD4oeyB1c2VyOiBuZXcgQWRkcmVzcyhmcm9tKSwgcGVuZGluZyB9KTsKICAgIGl0b2IKICAgIGNvbmNhdAogICAgYnl0ZWMgMjUgLy8gbWV0aG9kICJSZXdhcmRzQ2xhaW1lZChhZGRyZXNzLHVpbnQ2NCkiCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwoKc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6OlBvb2wud2l0aGRyYXdfYWZ0ZXJfaWZfZWxzZUA5OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjE0NQogICAgLy8gZW1pdDxXaXRoZHJhdz4oeyBmcm9tOiBuZXcgQWRkcmVzcyhmcm9tKSwgbHBBbW91bnQgfSk7CiAgICBmcmFtZV9kaWcgLTIKICAgIGl0b2IKICAgIGZyYW1lX2RpZyAxCiAgICBkaWcgMQogICAgY29uY2F0CiAgICBwdXNoYnl0ZXMgMHhkM2FmYTRmMSAvLyBtZXRob2QgIldpdGhkcmF3KGFkZHJlc3MsdWludDY0KSIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyMDkKICAgIC8vIGNvbnN0IHRva2VuQmFsYW5jZSA9IHRoaXMudG9rZW5CYWxhbmNlLnZhbHVlOwogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ2CiAgICAvLyB0b2tlbkJhbGFuY2UgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgYnl0ZWNfMCAvLyAidG9rZW5CYWxhbmNlIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MjA5CiAgICAvLyBjb25zdCB0b2tlbkJhbGFuY2UgPSB0aGlzLnRva2VuQmFsYW5jZS52YWx1ZTsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyMTAKICAgIC8vIGNvbnN0IHZVc2RCYWxhbmNlID0gdGhpcy52VXNkQmFsYW5jZS52YWx1ZTsKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NwogICAgLy8gdlVzZEJhbGFuY2UgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgYnl0ZWNfMSAvLyAidlVzZEJhbGFuY2UiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyMTAKICAgIC8vIGNvbnN0IHZVc2RCYWxhbmNlID0gdGhpcy52VXNkQmFsYW5jZS52YWx1ZTsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyMTIKICAgIC8vIGNvbnN0IG9sZEJhbGFuY2U6IHVpbnQ2NCA9ICh0b2tlbkJhbGFuY2UgKyB2VXNkQmFsYW5jZSk7CiAgICBkdXAyCiAgICArCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyMTMKICAgIC8vIHRoaXMudG9rZW5CYWxhbmNlLnZhbHVlIC09IG5ldyBVaW50PDY0PigoQmlnVWludChhbW91bnRMcCkgKiBCaWdVaW50KHRva2VuQmFsYW5jZSkpIC8gQmlnVWludChvbGRCYWxhbmNlKSkuYXNVaW50NjQoKTsKICAgIGRpZyAyCiAgICBpdG9iCiAgICBkaWcgNAogICAgYioKICAgIGRpZyAxCiAgICBpdG9iCiAgICBzd2FwCiAgICBkaWcgMQogICAgYi8KICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzIgLy8gOAogICAgPD0KICAgIGFzc2VydCAvLyBvdmVyZmxvdwogICAgaW50Y18yIC8vIDgKICAgIGJ6ZXJvCiAgICBzd2FwCiAgICBkaWcgMQogICAgYnwKICAgIGJ0b2kKICAgIHVuY292ZXIgNQogICAgc3dhcAogICAgLQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDYKICAgIC8vIHRva2VuQmFsYW5jZSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBieXRlY18wIC8vICJ0b2tlbkJhbGFuY2UiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyMTMKICAgIC8vIHRoaXMudG9rZW5CYWxhbmNlLnZhbHVlIC09IG5ldyBVaW50PDY0PigoQmlnVWludChhbW91bnRMcCkgKiBCaWdVaW50KHRva2VuQmFsYW5jZSkpIC8gQmlnVWludChvbGRCYWxhbmNlKSkuYXNVaW50NjQoKTsKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyMTQKICAgIC8vIHRoaXMudlVzZEJhbGFuY2UudmFsdWUgLT0gbmV3IFVpbnQ8NjQ+KChCaWdVaW50KGFtb3VudExwKSAqIEJpZ1VpbnQodlVzZEJhbGFuY2UpKSAvIEJpZ1VpbnQob2xkQmFsYW5jZSkpLmFzVWludDY0KCk7CiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDcKICAgIC8vIHZVc2RCYWxhbmNlID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogMCB9KTsKICAgIGJ5dGVjXzEgLy8gInZVc2RCYWxhbmNlIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MjE0CiAgICAvLyB0aGlzLnZVc2RCYWxhbmNlLnZhbHVlIC09IG5ldyBVaW50PDY0PigoQmlnVWludChhbW91bnRMcCkgKiBCaWdVaW50KHZVc2RCYWxhbmNlKSkgLyBCaWdVaW50KG9sZEJhbGFuY2UpKS5hc1VpbnQ2NCgpOwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIHVuY292ZXIgNAogICAgaXRvYgogICAgdW5jb3ZlciA1CiAgICBiKgogICAgdW5jb3ZlciAzCiAgICBiLwogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyA4CiAgICA8PQogICAgYXNzZXJ0IC8vIG92ZXJmbG93CiAgICB1bmNvdmVyIDIKICAgIGJ8CiAgICBidG9pCiAgICAtCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NwogICAgLy8gdlVzZEJhbGFuY2UgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgYnl0ZWNfMSAvLyAidlVzZEJhbGFuY2UiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyMTQKICAgIC8vIHRoaXMudlVzZEJhbGFuY2UudmFsdWUgLT0gbmV3IFVpbnQ8NjQ+KChCaWdVaW50KGFtb3VudExwKSAqIEJpZ1VpbnQodlVzZEJhbGFuY2UpKSAvIEJpZ1VpbnQob2xkQmFsYW5jZSkpLmFzVWludDY0KCk7CiAgICBkaWcgMQogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjIxNgogICAgLy8gYXNzZXJ0KHRoaXMudG9rZW5CYWxhbmNlLnZhbHVlICsgdGhpcy52VXNkQmFsYW5jZS52YWx1ZSA8IG9sZEJhbGFuY2UsICdQb29sOiB6ZXJvIGNoYW5nZXMnKTsKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NgogICAgLy8gdG9rZW5CYWxhbmNlID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogMCB9KTsKICAgIGJ5dGVjXzAgLy8gInRva2VuQmFsYW5jZSIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjIxNgogICAgLy8gYXNzZXJ0KHRoaXMudG9rZW5CYWxhbmNlLnZhbHVlICsgdGhpcy52VXNkQmFsYW5jZS52YWx1ZSA8IG9sZEJhbGFuY2UsICdQb29sOiB6ZXJvIGNoYW5nZXMnKTsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICArCiAgICA+CiAgICBhc3NlcnQgLy8gUG9vbDogemVybyBjaGFuZ2VzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyMTkKICAgIC8vIGFzc2VydChhbW91bnRMcCA8PSB0aGlzLnJlc2VydmVzLnZhbHVlLCAnUG9vbDogcmVzZXJ2ZXMnKTsKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0OQogICAgLy8gcmVzZXJ2ZXMgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgYnl0ZWMgNCAvLyAicmVzZXJ2ZXMiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyMTkKICAgIC8vIGFzc2VydChhbW91bnRMcCA8PSB0aGlzLnJlc2VydmVzLnZhbHVlLCAnUG9vbDogcmVzZXJ2ZXMnKTsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICBmcmFtZV9kaWcgLTIKICAgIGRpZyAxCiAgICA8PQogICAgYXNzZXJ0IC8vIFBvb2w6IHJlc2VydmVzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyMjIKICAgIC8vIHRoaXMucmVzZXJ2ZXMudmFsdWUgLT0gYW1vdW50THA7CiAgICBmcmFtZV9kaWcgLTIKICAgIC0KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ5CiAgICAvLyByZXNlcnZlcyA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBieXRlYyA0IC8vICJyZXNlcnZlcyIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjIyMgogICAgLy8gdGhpcy5yZXNlcnZlcy52YWx1ZSAtPSBhbW91bnRMcDsKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyMjUKICAgIC8vIHRoaXMudXBkYXRlRCgpOwogICAgY2FsbHN1YiB1cGRhdGVECiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyMjYKICAgIC8vIGFzc2VydCh0aGlzLmQudmFsdWUgPCBvbGRELCAnUG9vbDogemVybyBEIGNoYW5nZXMnKTsKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo1MQogICAgLy8gZCA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBieXRlYyA2IC8vICJkIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MjI2CiAgICAvLyBhc3NlcnQodGhpcy5kLnZhbHVlIDwgb2xkRCwgJ1Bvb2w6IHplcm8gRCBjaGFuZ2VzJyk7CiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgZnJhbWVfZGlnIDAKICAgIDwKICAgIGFzc2VydCAvLyBQb29sOiB6ZXJvIEQgY2hhbmdlcwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MjI4LTIzMgogICAgLy8gaXR4bi5hc3NldFRyYW5zZmVyKHsKICAgIC8vICAgeGZlckFzc2V0OiB0aGlzLmFzc2V0LnZhbHVlLAogICAgLy8gICBhc3NldEFtb3VudDogdGhpcy5mcm9tU3lzdGVtUHJlY2lzaW9uKGFtb3VudExwKSwKICAgIC8vICAgYXNzZXRSZWNlaXZlcjogVHhuLnNlbmRlciwKICAgIC8vIH0pLnN1Ym1pdCgpOwogICAgaXR4bl9iZWdpbgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MjI5CiAgICAvLyB4ZmVyQXNzZXQ6IHRoaXMuYXNzZXQudmFsdWUsCiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjI3CiAgICAvLyBhc3NldCA9IEdsb2JhbFN0YXRlPEFzc2V0PigpOwogICAgYnl0ZWNfMiAvLyAiYXNzZXQiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyMjkKICAgIC8vIHhmZXJBc3NldDogdGhpcy5hc3NldC52YWx1ZSwKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyMzAKICAgIC8vIGFzc2V0QW1vdW50OiB0aGlzLmZyb21TeXN0ZW1QcmVjaXNpb24oYW1vdW50THApLAogICAgZnJhbWVfZGlnIC0yCiAgICBjYWxsc3ViIGZyb21TeXN0ZW1QcmVjaXNpb24KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjIzMQogICAgLy8gYXNzZXRSZWNlaXZlcjogVHhuLnNlbmRlciwKICAgIHR4biBTZW5kZXIKICAgIGl0eG5fZmllbGQgQXNzZXRSZWNlaXZlcgogICAgaXR4bl9maWVsZCBBc3NldEFtb3VudAogICAgaXR4bl9maWVsZCBYZmVyQXNzZXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjIyOC0yMzIKICAgIC8vIGl0eG4uYXNzZXRUcmFuc2Zlcih7CiAgICAvLyAgIHhmZXJBc3NldDogdGhpcy5hc3NldC52YWx1ZSwKICAgIC8vICAgYXNzZXRBbW91bnQ6IHRoaXMuZnJvbVN5c3RlbVByZWNpc2lvbihhbW91bnRMcCksCiAgICAvLyAgIGFzc2V0UmVjZWl2ZXI6IFR4bi5zZW5kZXIsCiAgICAvLyB9KS5zdWJtaXQoKTsKICAgIHB1c2hpbnQgNCAvLyA0CiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnRjXzAgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKICAgIGl0eG5fc3VibWl0CiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo6UG9vbC5nZXRZKHg6IHVpbnQ2NCkgLT4gdWludDY0OgpnZXRZOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6Mzk3CiAgICAvLyBwcml2YXRlIGdldFkoeDogdWludDY0KTogdWludDY0IHsKICAgIHByb3RvIDEgMQogICAgaW50Y18wIC8vIDAKICAgIGR1cAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6Mzk4CiAgICAvLyBjb25zdCB4XyA9IEJpZ1VpbnQoeCk7CiAgICBmcmFtZV9kaWcgLTEKICAgIGl0b2IKICAgIGR1cAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6Mzk5CiAgICAvLyBjb25zdCBkXyA9IEJpZ1VpbnQodGhpcy5kLnZhbHVlKTsKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo1MQogICAgLy8gZCA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBieXRlYyA2IC8vICJkIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6Mzk5CiAgICAvLyBjb25zdCBkXyA9IEJpZ1VpbnQodGhpcy5kLnZhbHVlKTsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICBpdG9iCiAgICBkdXAKICAgIGNvdmVyIDIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQwMAogICAgLy8gY29uc3QgYTQgPSBCaWdVaW50KHRoaXMuYS52YWx1ZSA8PCAyKTsKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo1MAogICAgLy8gYSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oKTsKICAgIGJ5dGVjIDE5IC8vICJhIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDAwCiAgICAvLyBjb25zdCBhNCA9IEJpZ1VpbnQodGhpcy5hLnZhbHVlIDw8IDIpOwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIHB1c2hpbnQgMiAvLyAyCiAgICBzaGwKICAgIGl0b2IKICAgIGR1cAogICAgY292ZXIgMwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDAxCiAgICAvLyBjb25zdCBhOCA9IEJpZ1VpbnQoYTQgKiAybik7CiAgICBieXRlYyAxNyAvLyAweDAyCiAgICBiKgogICAgY292ZXIgMgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDAzCiAgICAvLyBjb25zdCBkTWludXNYSXNQb3NpdGl2ZSA9IGRfID49IHhfOwogICAgYjw9CiAgICBkdXAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQwNAogICAgLy8gY29uc3QgZE1pbnVzWEFiczogYmlndWludCA9IGRNaW51c1hJc1Bvc2l0aXZlID8gKGRfIC0geF8pIDogKHhfIC0gZF8pOwogICAgYnogZ2V0WV90ZXJuYXJ5X2ZhbHNlQDIKICAgIGZyYW1lX2RpZyAzCiAgICBmcmFtZV9kaWcgMgogICAgYi0KCmdldFlfdGVybmFyeV9tZXJnZUAzOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDA2CiAgICAvLyBjb25zdCBhNEJ5RE1pbnVzWEFiczogYmlndWludCA9IGE0ICogZE1pbnVzWEFiczsKICAgIGZyYW1lX2RpZyA0CiAgICBiKgogICAgZnJhbWVfYnVyeSAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0MTEKICAgIC8vIGlmIChkTWludXNYSXNQb3NpdGl2ZSkgewogICAgZnJhbWVfZGlnIDYKICAgIGJ6IGdldFlfZWxzZV9ib2R5QDgKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQxMgogICAgLy8gaWYgKGE0QnlETWludXNYQWJzID49IGRfKSB7CiAgICBmcmFtZV9kaWcgMAogICAgZnJhbWVfZGlnIDMKICAgIGI+PQogICAgYnogZ2V0WV9lbHNlX2JvZHlANgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDEzCiAgICAvLyBwYXJ0MUFicyA9IGE0QnlETWludXNYQWJzIC0gZF87CiAgICBmcmFtZV9kaWcgMAogICAgZnJhbWVfZGlnIDMKICAgIGItCiAgICBmcmFtZV9idXJ5IDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQxNAogICAgLy8gcGFydDFJc1Bvc2l0aXZlID0gdHJ1ZTsKICAgIGludGNfMSAvLyAxCgpnZXRZX2FmdGVyX2lmX2Vsc2VAOToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQyNQogICAgLy8gY29uc3QgcGFydDI6IGJpZ3VpbnQgPSBCaWdVaW50KHgpICogKGE0ICogZF8gKiBkXyAqIGRfICsgeF8gKiAocGFydDFBYnMgKiBwYXJ0MUFicykpOwogICAgZnJhbWVfZGlnIDQKICAgIGZyYW1lX2RpZyAzCiAgICBkdXAKICAgIGNvdmVyIDIKICAgIGIqCiAgICBkaWcgMQogICAgYioKICAgIGIqCiAgICBmcmFtZV9kaWcgMQogICAgZHVwCiAgICBiKgogICAgZnJhbWVfZGlnIDIKICAgIGR1cAogICAgdW5jb3ZlciAyCiAgICBiKgogICAgdW5jb3ZlciAyCiAgICBiKwogICAgYioKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQyNgogICAgLy8gbGV0IG51bWVyYXRvcjogYmlndWludCA9IHRoaXMuc3FydChwYXJ0Mik7CiAgICBjYWxsc3ViIHNxcnQKICAgIHN3YXAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQyOQogICAgLy8gaWYgKHBhcnQxSXNQb3NpdGl2ZSkgewogICAgYnogZ2V0WV9lbHNlX2JvZHlAMTEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQzMAogICAgLy8gbnVtZXJhdG9yICs9IHhfICogcGFydDFBYnM7CiAgICBmcmFtZV9kaWcgMgogICAgZnJhbWVfZGlnIDEKICAgIGIqCiAgICBiKwoKZ2V0WV9hZnRlcl9pZl9lbHNlQDEyOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDM2CiAgICAvLyByZXR1cm4gYmlndWludFRvVWludDY0TW9kdWxvKG51bWVyYXRvciAvIChhOCAqIHhfKSArIDFuKTsgLy8gKzEgdG8gb2Zmc2V0IHJvdW5kaW5nIGVycm9ycwogICAgZnJhbWVfZGlnIDUKICAgIGZyYW1lX2RpZyAyCiAgICBiKgogICAgYi8KICAgIGJ5dGVjIDEwIC8vIDB4MDEKICAgIGIrCiAgICBjYWxsc3ViIGJpZ3VpbnRUb1VpbnQ2NE1vZHVsbwogICAgZnJhbWVfYnVyeSAwCiAgICByZXRzdWIKCmdldFlfZWxzZV9ib2R5QDExOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDMyCiAgICAvLyBudW1lcmF0b3IgLT0geF8gKiBwYXJ0MUFiczsKICAgIGZyYW1lX2RpZyAyCiAgICBmcmFtZV9kaWcgMQogICAgYioKICAgIGItCiAgICBiIGdldFlfYWZ0ZXJfaWZfZWxzZUAxMgoKZ2V0WV9lbHNlX2JvZHlANjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQxNgogICAgLy8gcGFydDFBYnMgPSBkXyAtIGE0QnlETWludXNYQWJzOwogICAgZnJhbWVfZGlnIDMKICAgIGZyYW1lX2RpZyAwCiAgICBiLQogICAgZnJhbWVfYnVyeSAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0MTcKICAgIC8vIHBhcnQxSXNQb3NpdGl2ZSA9IGZhbHNlOwogICAgaW50Y18wIC8vIDAKICAgIGIgZ2V0WV9hZnRlcl9pZl9lbHNlQDkKCmdldFlfZWxzZV9ib2R5QDg6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0MjAKICAgIC8vIHBhcnQxQWJzID0gYTRCeURNaW51c1hBYnMgKyBkXzsKICAgIGZyYW1lX2RpZyAwCiAgICBmcmFtZV9kaWcgMwogICAgYisKICAgIGZyYW1lX2J1cnkgMQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDIxCiAgICAvLyBwYXJ0MUlzUG9zaXRpdmUgPSBmYWxzZTsKICAgIGludGNfMCAvLyAwCiAgICBiIGdldFlfYWZ0ZXJfaWZfZWxzZUA5CgpnZXRZX3Rlcm5hcnlfZmFsc2VAMjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQwNAogICAgLy8gY29uc3QgZE1pbnVzWEFiczogYmlndWludCA9IGRNaW51c1hJc1Bvc2l0aXZlID8gKGRfIC0geF8pIDogKHhfIC0gZF8pOwogICAgZnJhbWVfZGlnIDIKICAgIGZyYW1lX2RpZyAzCiAgICBiLQogICAgYiBnZXRZX3Rlcm5hcnlfbWVyZ2VAMwoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjpQb29sLnVwZGF0ZUQoKSAtPiB2b2lkOgp1cGRhdGVEOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDM5CiAgICAvLyBwcml2YXRlIHVwZGF0ZUQoKTogdm9pZCB7CiAgICBwcm90byAwIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ0MAogICAgLy8gY29uc3QgeCA9IEJpZ1VpbnQodGhpcy50b2tlbkJhbGFuY2UudmFsdWUpOwogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ2CiAgICAvLyB0b2tlbkJhbGFuY2UgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgYnl0ZWNfMCAvLyAidG9rZW5CYWxhbmNlIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDQwCiAgICAvLyBjb25zdCB4ID0gQmlnVWludCh0aGlzLnRva2VuQmFsYW5jZS52YWx1ZSk7CiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgaXRvYgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDQxCiAgICAvLyBjb25zdCB5ID0gQmlnVWludCh0aGlzLnZVc2RCYWxhbmNlLnZhbHVlKTsKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NwogICAgLy8gdlVzZEJhbGFuY2UgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgYnl0ZWNfMSAvLyAidlVzZEJhbGFuY2UiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NDEKICAgIC8vIGNvbnN0IHkgPSBCaWdVaW50KHRoaXMudlVzZEJhbGFuY2UudmFsdWUpOwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIGl0b2IKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ0NgogICAgLy8gY29uc3QgeHk6IGJpZ3VpbnQgPSB4ICogeTsKICAgIGR1cDIKICAgIGIqCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NDcKICAgIC8vIGNvbnN0IGFfID0gQmlnVWludCh0aGlzLmEudmFsdWUpOwogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjUwCiAgICAvLyBhID0gR2xvYmFsU3RhdGU8dWludDY0PigpOwogICAgYnl0ZWMgMTkgLy8gImEiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NDcKICAgIC8vIGNvbnN0IGFfID0gQmlnVWludCh0aGlzLmEudmFsdWUpOwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIGl0b2IKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ0OQogICAgLy8gY29uc3QgcDE6IGJpZ3VpbnQgPSBhXyAqIHh5ICogKHggKyB5KTsKICAgIGR1cAogICAgZGlnIDIKICAgIGIqCiAgICB1bmNvdmVyIDQKICAgIHVuY292ZXIgNAogICAgYisKICAgIGIqCiAgICBkdXAKICAgIGNvdmVyIDIKICAgIGNvdmVyIDMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ1MQogICAgLy8gY29uc3QgcDI6IGJpZ3VpbnQgPSAoeHkgKiAoKGFfICogNG4pIC0gMW4pKSAvIDNuOwogICAgcHVzaGJ5dGVzIDB4MDQKICAgIGIqCiAgICBieXRlYyAxMCAvLyAweDAxCiAgICBiLQogICAgdW5jb3ZlciAyCiAgICBiKgogICAgYnl0ZWMgMjYgLy8gMHgwMwogICAgYi8KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ1MwogICAgLy8gY29uc3QgcDM6IGJpZ3VpbnQgPSB0aGlzLnNxcnQoKHAxICogcDEpICsgKHAyICogcDIgKiBwMikpOwogICAgZGlnIDEKICAgIGRpZyAyCiAgICBiKgogICAgZGlnIDEKICAgIGRpZyAyCiAgICBiKgogICAgdW5jb3ZlciAyCiAgICBiKgogICAgYisKICAgIGNhbGxzdWIgc3FydAogICAgZHVwCiAgICBjb3ZlciAyCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NTQKICAgIC8vIGxldCBkXyA9IHRoaXMuY2JydChwMSArIHAzKTsKICAgIGR1cDIKICAgIGIrCiAgICBjYWxsc3ViIGNicnQKICAgIGNvdmVyIDMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ1NQogICAgLy8gaWYgKHAzID4gcDEpIHsKICAgIGI8CiAgICBieiB1cGRhdGVEX2Vsc2VfYm9keUAyCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NTYKICAgIC8vIGRfIC09IHRoaXMuY2JydChwMyAtIHAxKTsKICAgIGZyYW1lX2RpZyAwCiAgICBiLQogICAgY2FsbHN1YiBjYnJ0CiAgICBmcmFtZV9kaWcgMQogICAgc3dhcAogICAgLQogICAgZnJhbWVfYnVyeSAxCgp1cGRhdGVEX2FmdGVyX2lmX2Vsc2VAMzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ2MAogICAgLy8gdGhpcy5kLnZhbHVlID0gKGRfIDw8IDEpOwogICAgZnJhbWVfZGlnIDEKICAgIGludGNfMSAvLyAxCiAgICBzaGwKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjUxCiAgICAvLyBkID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogMCB9KTsKICAgIGJ5dGVjIDYgLy8gImQiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NjAKICAgIC8vIHRoaXMuZC52YWx1ZSA9IChkXyA8PCAxKTsKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICByZXRzdWIKCnVwZGF0ZURfZWxzZV9ib2R5QDI6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NTgKICAgIC8vIGRfICs9IHRoaXMuY2JydChwMSAtIHAzKTsKICAgIGZyYW1lX2RpZyAwCiAgICBzd2FwCiAgICBiLQogICAgY2FsbHN1YiBjYnJ0CiAgICBmcmFtZV9kaWcgMQogICAgKwogICAgZnJhbWVfYnVyeSAxCiAgICBiIHVwZGF0ZURfYWZ0ZXJfaWZfZWxzZUAzCgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6OlBvb2wudG9TeXN0ZW1QcmVjaXNpb24oYW1vdW50OiB1aW50NjQpIC0+IHVpbnQ2NDoKdG9TeXN0ZW1QcmVjaXNpb246CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NjMKICAgIC8vIHByaXZhdGUgdG9TeXN0ZW1QcmVjaXNpb24oYW1vdW50OiB1aW50NjQpOiB1aW50NjQgewogICAgcHJvdG8gMSAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NjQKICAgIC8vIGNvbnN0IHRva2VuQW1vdW50UmVkdWNlID0gdGhpcy50b2tlbkFtb3VudFJlZHVjZS52YWx1ZTsKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo1MwogICAgLy8gcHJpdmF0ZSB0b2tlbkFtb3VudFJlZHVjZSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oKTsKICAgIGJ5dGVjIDIyIC8vICJ0b2tlbkFtb3VudFJlZHVjZSIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ2NAogICAgLy8gY29uc3QgdG9rZW5BbW91bnRSZWR1Y2UgPSB0aGlzLnRva2VuQW1vdW50UmVkdWNlLnZhbHVlOwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIHN3YXAKICAgIGR1cAogICAgdW5jb3ZlciAyCiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NjUKICAgIC8vIGNvbnN0IHRva2VuQW1vdW50SW5jcmVhc2UgPSB0aGlzLnRva2VuQW1vdW50SW5jcmVhc2UudmFsdWU7CiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NTQKICAgIC8vIHByaXZhdGUgdG9rZW5BbW91bnRJbmNyZWFzZSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oKTsKICAgIGJ5dGVjIDIzIC8vICJ0b2tlbkFtb3VudEluY3JlYXNlIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDY1CiAgICAvLyBjb25zdCB0b2tlbkFtb3VudEluY3JlYXNlID0gdGhpcy50b2tlbkFtb3VudEluY3JlYXNlLnZhbHVlOwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIHN3YXAKICAgIGNvdmVyIDIKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ2NwogICAgLy8gaWYgKHRva2VuQW1vdW50UmVkdWNlID4gMCkgewogICAgYnogdG9TeXN0ZW1QcmVjaXNpb25fZWxzZV9ib2R5QDIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ2OAogICAgLy8gcmV0dXJuIGFtb3VudCAvIHRva2VuQW1vdW50UmVkdWNlOwogICAgZnJhbWVfZGlnIC0xCiAgICBmcmFtZV9kaWcgMAogICAgLwogICAgZnJhbWVfYnVyeSAwCiAgICByZXRzdWIKCnRvU3lzdGVtUHJlY2lzaW9uX2Vsc2VfYm9keUAyOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDY5CiAgICAvLyB9IGVsc2UgaWYgKHRva2VuQW1vdW50SW5jcmVhc2UgPiAwKSB7CiAgICBmcmFtZV9kaWcgMQogICAgYnogdG9TeXN0ZW1QcmVjaXNpb25fYWZ0ZXJfaWZfZWxzZUA0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NzAKICAgIC8vIHJldHVybiBhbW91bnQgKiB0b2tlbkFtb3VudEluY3JlYXNlOwogICAgZnJhbWVfZGlnIC0xCiAgICBmcmFtZV9kaWcgMQogICAgKgogICAgZnJhbWVfYnVyeSAwCiAgICByZXRzdWIKCnRvU3lzdGVtUHJlY2lzaW9uX2FmdGVyX2lmX2Vsc2VANDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ3MgogICAgLy8gcmV0dXJuIGFtb3VudDsKICAgIGZyYW1lX2RpZyAtMQogICAgZnJhbWVfYnVyeSAwCiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo6UG9vbC5mcm9tU3lzdGVtUHJlY2lzaW9uKGFtb3VudDogdWludDY0KSAtPiB1aW50NjQ6CmZyb21TeXN0ZW1QcmVjaXNpb246CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NzUKICAgIC8vIHByaXZhdGUgZnJvbVN5c3RlbVByZWNpc2lvbihhbW91bnQ6IHVpbnQ2NCk6IHVpbnQ2NCB7CiAgICBwcm90byAxIDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ3NgogICAgLy8gY29uc3QgdG9rZW5BbW91bnRSZWR1Y2UgPSB0aGlzLnRva2VuQW1vdW50UmVkdWNlLnZhbHVlOwogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjUzCiAgICAvLyBwcml2YXRlIHRva2VuQW1vdW50UmVkdWNlID0gR2xvYmFsU3RhdGU8dWludDY0PigpOwogICAgYnl0ZWMgMjIgLy8gInRva2VuQW1vdW50UmVkdWNlIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDc2CiAgICAvLyBjb25zdCB0b2tlbkFtb3VudFJlZHVjZSA9IHRoaXMudG9rZW5BbW91bnRSZWR1Y2UudmFsdWU7CiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgc3dhcAogICAgZHVwCiAgICB1bmNvdmVyIDIKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ3NwogICAgLy8gY29uc3QgdG9rZW5BbW91bnRJbmNyZWFzZSA9IHRoaXMudG9rZW5BbW91bnRJbmNyZWFzZS52YWx1ZTsKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo1NAogICAgLy8gcHJpdmF0ZSB0b2tlbkFtb3VudEluY3JlYXNlID0gR2xvYmFsU3RhdGU8dWludDY0PigpOwogICAgYnl0ZWMgMjMgLy8gInRva2VuQW1vdW50SW5jcmVhc2UiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NzcKICAgIC8vIGNvbnN0IHRva2VuQW1vdW50SW5jcmVhc2UgPSB0aGlzLnRva2VuQW1vdW50SW5jcmVhc2UudmFsdWU7CiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgc3dhcAogICAgY292ZXIgMgogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDc5CiAgICAvLyBpZiAodG9rZW5BbW91bnRSZWR1Y2UgPiAwKSB7CiAgICBieiBmcm9tU3lzdGVtUHJlY2lzaW9uX2Vsc2VfYm9keUAyCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0ODAKICAgIC8vIHJldHVybiBhbW91bnQgKiB0b2tlbkFtb3VudFJlZHVjZTsKICAgIGZyYW1lX2RpZyAtMQogICAgZnJhbWVfZGlnIDAKICAgICoKICAgIGZyYW1lX2J1cnkgMAogICAgcmV0c3ViCgpmcm9tU3lzdGVtUHJlY2lzaW9uX2Vsc2VfYm9keUAyOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDgxCiAgICAvLyB9IGVsc2UgaWYgKHRva2VuQW1vdW50SW5jcmVhc2UgPiAwKSB7CiAgICBmcmFtZV9kaWcgMQogICAgYnogZnJvbVN5c3RlbVByZWNpc2lvbl9hZnRlcl9pZl9lbHNlQDQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ4MgogICAgLy8gcmV0dXJuIGFtb3VudCAvIHRva2VuQW1vdW50SW5jcmVhc2U7CiAgICBmcmFtZV9kaWcgLTEKICAgIGZyYW1lX2RpZyAxCiAgICAvCiAgICBmcmFtZV9idXJ5IDAKICAgIHJldHN1YgoKZnJvbVN5c3RlbVByZWNpc2lvbl9hZnRlcl9pZl9lbHNlQDQ6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0ODQKICAgIC8vIHJldHVybiBhbW91bnQ7CiAgICBmcmFtZV9kaWcgLTEKICAgIGZyYW1lX2J1cnkgMAogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6OlBvb2wuc3FydChuOiBieXRlcykgLT4gYnl0ZXM6CnNxcnQ6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0ODcKICAgIC8vIHByaXZhdGUgc3FydChuOiBiaWd1aW50KTogYmlndWludCB7CiAgICBwcm90byAxIDEKICAgIGludGNfMCAvLyAwCiAgICBkdXAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ4OAogICAgLy8gYXNzZXJ0KG4gPiAwbiwgJ24gbXVzdCBiZSBub24tbmVnYXRpdmUnKTsKICAgIGZyYW1lX2RpZyAtMQogICAgcHVzaGJ5dGVzIDB4CiAgICBiPgogICAgYXNzZXJ0IC8vIG4gbXVzdCBiZSBub24tbmVnYXRpdmUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ4OQogICAgLy8gaWYgKG4gPT09IDBuKSByZXR1cm4gMG47CiAgICBmcmFtZV9kaWcgLTEKICAgIHB1c2hieXRlcyAweAogICAgYj09CiAgICBieiBzcXJ0X2FmdGVyX2lmX2Vsc2VAMgogICAgcHVzaGJ5dGVzIDB4CiAgICBmcmFtZV9idXJ5IDAKICAgIHJldHN1YgoKc3FydF9hZnRlcl9pZl9lbHNlQDI6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0OTAKICAgIC8vIGlmIChuIDw9IDNuKSByZXR1cm4gMW47CiAgICBmcmFtZV9kaWcgLTEKICAgIGJ5dGVjIDI2IC8vIDB4MDMKICAgIGI8PQogICAgYnogc3FydF9hZnRlcl9pZl9lbHNlQDQKICAgIGJ5dGVjIDEwIC8vIDB4MDEKICAgIGZyYW1lX2J1cnkgMAogICAgcmV0c3ViCgpzcXJ0X2FmdGVyX2lmX2Vsc2VANDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ5MwogICAgLy8gY29uc3QgYmwgPSBiaXRMZW5ndGgoQnl0ZXMobikpOwogICAgZnJhbWVfZGlnIC0xCiAgICBiaXRsZW4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ5NAogICAgLy8gbGV0IHdpZGUgPSBleHB3KDIsIChibCArIDEpIC8gMik7CiAgICBpbnRjXzEgLy8gMQogICAgKwogICAgcHVzaGludCAyIC8vIDIKICAgIC8KICAgIHB1c2hpbnQgMiAvLyAyCiAgICBzd2FwCiAgICBleHB3CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0OTUKICAgIC8vIGNvbnN0IGhpID0gQmlnVWludCh3aWRlWzBdKTsKICAgIHN3YXAKICAgIGl0b2IKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ5NgogICAgLy8gY29uc3QgbG8gPSBCaWdVaW50KHdpZGVbMV0pOwogICAgc3dhcAogICAgaXRvYgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDk3CiAgICAvLyBsZXQgeDogYmlndWludCA9IGhpICogU0hJRlQ2NCArIGxvOwogICAgc3dhcAogICAgYnl0ZWMgMjggLy8gMHgwMTAwMDAwMDAwMDAwMDAwMDAKICAgIGIqCiAgICBiKwogICAgZHVwCiAgICBmcmFtZV9idXJ5IDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjUwMAogICAgLy8gbGV0IHk6IGJpZ3VpbnQgPSAoeCArIG4gLyB4KSAvIDJuOwogICAgZnJhbWVfZGlnIC0xCiAgICBkaWcgMQogICAgYi8KICAgIGIrCiAgICBieXRlYyAxNyAvLyAweDAyCiAgICBiLwogICAgZnJhbWVfYnVyeSAxCgpzcXJ0X3doaWxlX3RvcEA1OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NTAxCiAgICAvLyB3aGlsZSAoeSA8IHgpIHsKICAgIGZyYW1lX2RpZyAxCiAgICBmcmFtZV9kaWcgMAogICAgYjwKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjUwMS01MDQKICAgIC8vIHdoaWxlICh5IDwgeCkgewogICAgLy8gICB4ID0geTsKICAgIC8vICAgeSA9ICh4ICsgbiAvIHgpIC8gMm47CiAgICAvLyB9CiAgICBieiBzcXJ0X2FmdGVyX3doaWxlQDcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjUwMwogICAgLy8geSA9ICh4ICsgbiAvIHgpIC8gMm47CiAgICBmcmFtZV9kaWcgLTEKICAgIGZyYW1lX2RpZyAxCiAgICBkdXAKICAgIGNvdmVyIDIKICAgIGIvCiAgICBkaWcgMQogICAgYisKICAgIGJ5dGVjIDE3IC8vIDB4MDIKICAgIGIvCiAgICBmcmFtZV9idXJ5IDEKICAgIGZyYW1lX2J1cnkgMAogICAgYiBzcXJ0X3doaWxlX3RvcEA1CgpzcXJ0X2FmdGVyX3doaWxlQDc6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo1MDUKICAgIC8vIHJldHVybiB4OwogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6OlBvb2wuY2JydChuOiBieXRlcykgLT4gdWludDY0OgpjYnJ0OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NTA4CiAgICAvLyBwcml2YXRlIGNicnQobjogYmlndWludCk6IHVpbnQ2NCB7CiAgICBwcm90byAxIDEKICAgIGludGNfMCAvLyAwCiAgICBkdXBuIDMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjUwOQogICAgLy8gaWYgKG4gPT09IDBuKSByZXR1cm4gMDsKICAgIGZyYW1lX2RpZyAtMQogICAgcHVzaGJ5dGVzIDB4CiAgICBiPT0KICAgIGJ6IGNicnRfYWZ0ZXJfaWZfZWxzZUAyCiAgICBpbnRjXzAgLy8gMAogICAgZnJhbWVfYnVyeSAwCiAgICByZXRzdWIKCmNicnRfYWZ0ZXJfaWZfZWxzZUAyOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NTEwCiAgICAvLyBpZiAobiA8IDhuKSByZXR1cm4gMTsKICAgIGZyYW1lX2RpZyAtMQogICAgcHVzaGJ5dGVzIDB4MDgKICAgIGI8CiAgICBieiBjYnJ0X2FmdGVyX2lmX2Vsc2VANAogICAgaW50Y18xIC8vIDEKICAgIGZyYW1lX2J1cnkgMAogICAgcmV0c3ViCgpjYnJ0X2FmdGVyX2lmX2Vsc2VANDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjUxMwogICAgLy8gY29uc3QgYmwgPSBiaXRMZW5ndGgoQnl0ZXMobikpOwogICAgZnJhbWVfZGlnIC0xCiAgICBiaXRsZW4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjUxNAogICAgLy8gbGV0IHdpZGUgPSBleHB3KDIsIChibCArIDIpIC8gMyk7CiAgICBwdXNoaW50IDIgLy8gMgogICAgKwogICAgcHVzaGludCAzIC8vIDMKICAgIC8KICAgIHB1c2hpbnQgMiAvLyAyCiAgICBzd2FwCiAgICBleHB3CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo1MTUKICAgIC8vIGNvbnN0IGhpID0gQmlnVWludCh3aWRlWzBdKTsKICAgIHN3YXAKICAgIGl0b2IKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjUxNgogICAgLy8gY29uc3QgbG8gPSBCaWdVaW50KHdpZGVbMV0pOwogICAgc3dhcAogICAgaXRvYgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NTE3CiAgICAvLyBsZXQgeDogYmlndWludCA9IGhpICogU0hJRlQ2NCArIGxvOwogICAgc3dhcAogICAgYnl0ZWMgMjggLy8gMHgwMTAwMDAwMDAwMDAwMDAwMDAKICAgIGIqCiAgICBiKwogICAgZnJhbWVfYnVyeSAxCgpjYnJ0X3doaWxlX3RvcEA1OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NTIxCiAgICAvLyBjb25zdCB4MjogYmlndWludCA9IHggKiB4OwogICAgZnJhbWVfZGlnIDEKICAgIGR1cAogICAgYioKICAgIGR1cAogICAgZnJhbWVfYnVyeSAzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo1MjIKICAgIC8vIGlmICh4MiA9PT0gMG4pIGJyZWFrOyAvLyBzaG91bGQgbm90IGhhcHBlbiBmb3IgeD4wCiAgICBwdXNoYnl0ZXMgMHgKICAgIGI9PQogICAgYm56IGNicnRfd2hpbGVfdG9wQDE1CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo1MjMKICAgIC8vIGNvbnN0IG5leHQ6IGJpZ3VpbnQgPSAoMm4gKiB4ICsgbiAvIHgyKSAvIDNuOwogICAgYnl0ZWMgMTcgLy8gMHgwMgogICAgZnJhbWVfZGlnIDEKICAgIGR1cAogICAgY292ZXIgMgogICAgYioKICAgIGZyYW1lX2RpZyAtMQogICAgZnJhbWVfZGlnIDMKICAgIGIvCiAgICBiKwogICAgYnl0ZWMgMjYgLy8gMHgwMwogICAgYi8KICAgIGR1cAogICAgZnJhbWVfYnVyeSAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo1MjQKICAgIC8vIGlmIChuZXh0ID09PSB4IHx8IG5leHQgPT09IHggLSAxbikgewogICAgYj09CiAgICBibnogY2JydF9pZl9ib2R5QDEwCiAgICBmcmFtZV9kaWcgMQogICAgYnl0ZWMgMTAgLy8gMHgwMQogICAgYi0KICAgIGZyYW1lX2RpZyAwCiAgICBiPT0KICAgIGJ6IGNicnRfYWZ0ZXJfaWZfZWxzZUAxMQoKY2JydF9pZl9ib2R5QDEwOgogICAgZnJhbWVfZGlnIDAKICAgIGZyYW1lX2J1cnkgMQoKY2JydF93aGlsZV90b3BAMTU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo1MzIKICAgIC8vIHdoaWxlICgoeCArIDFuKSAqICh4ICsgMW4pICogKHggKyAxbikgPD0gbikgeCArPSAxbjsKICAgIGZyYW1lX2RpZyAxCiAgICBieXRlYyAxMCAvLyAweDAxCiAgICBiKwogICAgZHVwCiAgICBmcmFtZV9idXJ5IDIKICAgIGR1cAogICAgZGlnIDEKICAgIGIqCiAgICBiKgogICAgZnJhbWVfZGlnIC0xCiAgICBiPD0KICAgIGJ6IGNicnRfd2hpbGVfdG9wQDE4CiAgICBmcmFtZV9kaWcgMgogICAgZnJhbWVfYnVyeSAxCiAgICBiIGNicnRfd2hpbGVfdG9wQDE1CgpjYnJ0X3doaWxlX3RvcEAxODoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjUzMwogICAgLy8gd2hpbGUgKHggKiB4ICogeCA+IG4pIHggLT0gMW47CiAgICBmcmFtZV9kaWcgMQogICAgZHVwCiAgICBkaWcgMQogICAgYioKICAgIGIqCiAgICBmcmFtZV9kaWcgLTEKICAgIGI+CiAgICBieiBjYnJ0X2FmdGVyX3doaWxlQDIwCiAgICBmcmFtZV9kaWcgMQogICAgYnl0ZWMgMTAgLy8gMHgwMQogICAgYi0KICAgIGZyYW1lX2J1cnkgMQogICAgYiBjYnJ0X3doaWxlX3RvcEAxOAoKY2JydF9hZnRlcl93aGlsZUAyMDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjUzNAogICAgLy8gcmV0dXJuIGJpZ3VpbnRUb1VpbnQ2NE1vZHVsbyh4KTsKICAgIGZyYW1lX2RpZyAxCiAgICBjYWxsc3ViIGJpZ3VpbnRUb1VpbnQ2NE1vZHVsbwogICAgZnJhbWVfYnVyeSAwCiAgICByZXRzdWIKCmNicnRfYWZ0ZXJfaWZfZWxzZUAxMToKICAgIGZyYW1lX2RpZyAwCiAgICBmcmFtZV9idXJ5IDEKICAgIGIgY2JydF93aGlsZV90b3BANQoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czo6UmV3YXJkTWFuYWdlci5vcHRJblRvQXBwbGljYXRpb24odG86IGJ5dGVzKSAtPiB2b2lkOgpzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6OlJld2FyZE1hbmFnZXIub3B0SW5Ub0FwcGxpY2F0aW9uOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjQxCiAgICAvLyBwcm90ZWN0ZWQgb3B0SW5Ub0FwcGxpY2F0aW9uKHRvOiBBY2NvdW50KTogdm9pZCB7CiAgICBwcm90byAxIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czo0MgogICAgLy8gaWYgKCF0aGlzLmJhbGFuY2UodG8pLmhhc1ZhbHVlKSB7CiAgICBmcmFtZV9kaWcgLTEKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MzMKICAgIC8vIGJhbGFuY2UgPSBMb2NhbFN0YXRlPHVpbnQ2ND4oKTsKICAgIGJ5dGVjXzMgLy8gImJhbGFuY2UiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6NDIKICAgIC8vIGlmICghdGhpcy5iYWxhbmNlKHRvKS5oYXNWYWx1ZSkgewogICAgYXBwX2xvY2FsX2dldF9leAogICAgYnVyeSAxCiAgICBibnogc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjpSZXdhcmRNYW5hZ2VyLm9wdEluVG9BcHBsaWNhdGlvbl9hZnRlcl9pZl9lbHNlQDIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czo0MwogICAgLy8gdGhpcy5iYWxhbmNlKHRvKS52YWx1ZSA9IDA7CiAgICBmcmFtZV9kaWcgLTEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czozMwogICAgLy8gYmFsYW5jZSA9IExvY2FsU3RhdGU8dWludDY0PigpOwogICAgYnl0ZWNfMyAvLyAiYmFsYW5jZSIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czo0MwogICAgLy8gdGhpcy5iYWxhbmNlKHRvKS52YWx1ZSA9IDA7CiAgICBpbnRjXzAgLy8gMAogICAgYXBwX2xvY2FsX3B1dAoKc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjpSZXdhcmRNYW5hZ2VyLm9wdEluVG9BcHBsaWNhdGlvbl9hZnRlcl9pZl9lbHNlQDI6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6NDUKICAgIC8vIGlmICghdGhpcy51c2VyUmV3YXJkRGVidCh0bykuaGFzVmFsdWUpIHsKICAgIGZyYW1lX2RpZyAtMQogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czozNAogICAgLy8gdXNlclJld2FyZERlYnQgPSBMb2NhbFN0YXRlPHVpbnQ2ND4oKTsKICAgIGJ5dGVjIDUgLy8gInVzZXJSZXdhcmREZWJ0IgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjQ1CiAgICAvLyBpZiAoIXRoaXMudXNlclJld2FyZERlYnQodG8pLmhhc1ZhbHVlKSB7CiAgICBhcHBfbG9jYWxfZ2V0X2V4CiAgICBidXJ5IDEKICAgIGJueiBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6OlJld2FyZE1hbmFnZXIub3B0SW5Ub0FwcGxpY2F0aW9uX2FmdGVyX2lmX2Vsc2VANAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjQ2CiAgICAvLyB0aGlzLnVzZXJSZXdhcmREZWJ0KHRvKS52YWx1ZSA9IDA7CiAgICBmcmFtZV9kaWcgLTEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czozNAogICAgLy8gdXNlclJld2FyZERlYnQgPSBMb2NhbFN0YXRlPHVpbnQ2ND4oKTsKICAgIGJ5dGVjIDUgLy8gInVzZXJSZXdhcmREZWJ0IgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjQ2CiAgICAvLyB0aGlzLnVzZXJSZXdhcmREZWJ0KHRvKS52YWx1ZSA9IDA7CiAgICBpbnRjXzAgLy8gMAogICAgYXBwX2xvY2FsX3B1dAoKc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjpSZXdhcmRNYW5hZ2VyLm9wdEluVG9BcHBsaWNhdGlvbl9hZnRlcl9pZl9lbHNlQDQ6CiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6OlJld2FyZE1hbmFnZXIucGVuZGluZ1Jld2FyZCh1c2VyOiBieXRlcykgLT4gdWludDY0OgpzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6OlJld2FyZE1hbmFnZXIucGVuZGluZ1Jld2FyZDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czo5NS05NgogICAgLy8gQGFiaW1ldGhvZCh7IHJlYWRvbmx5OiB0cnVlIH0pCiAgICAvLyBwZW5kaW5nUmV3YXJkKHVzZXI6IEFjY291bnQpOiB1aW50NjQgewogICAgcHJvdG8gMSAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6OTcKICAgIC8vIHJldHVybiBiaWd1aW50VG9VaW50NjRNb2R1bG8oKEJpZ1VpbnQodGhpcy5iYWxhbmNlKHVzZXIpLnZhbHVlKSAqIHRoaXMuYWNjUmV3YXJkUGVyU2hhcmVQLnZhbHVlKSAvIFBfU0NBTEUpIC0gdGhpcy51c2VyUmV3YXJkRGVidCh1c2VyKS52YWx1ZTsKICAgIGZyYW1lX2RpZyAtMQogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czozMwogICAgLy8gYmFsYW5jZSA9IExvY2FsU3RhdGU8dWludDY0PigpOwogICAgYnl0ZWNfMyAvLyAiYmFsYW5jZSIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czo5NwogICAgLy8gcmV0dXJuIGJpZ3VpbnRUb1VpbnQ2NE1vZHVsbygoQmlnVWludCh0aGlzLmJhbGFuY2UodXNlcikudmFsdWUpICogdGhpcy5hY2NSZXdhcmRQZXJTaGFyZVAudmFsdWUpIC8gUF9TQ0FMRSkgLSB0aGlzLnVzZXJSZXdhcmREZWJ0KHVzZXIpLnZhbHVlOwogICAgYXBwX2xvY2FsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIExvY2FsU3RhdGUgZXhpc3RzCiAgICBpdG9iCiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjMwCiAgICAvLyBhY2NSZXdhcmRQZXJTaGFyZVAgPSBHbG9iYWxTdGF0ZTxiaWd1aW50Pih7IGluaXRpYWxWYWx1ZTogMG4gfSk7CiAgICBieXRlYyA4IC8vICJhY2NSZXdhcmRQZXJTaGFyZVAiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6OTcKICAgIC8vIHJldHVybiBiaWd1aW50VG9VaW50NjRNb2R1bG8oKEJpZ1VpbnQodGhpcy5iYWxhbmNlKHVzZXIpLnZhbHVlKSAqIHRoaXMuYWNjUmV3YXJkUGVyU2hhcmVQLnZhbHVlKSAvIFBfU0NBTEUpIC0gdGhpcy51c2VyUmV3YXJkRGVidCh1c2VyKS52YWx1ZTsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICBiKgogICAgYnl0ZWMgOSAvLyAweDAxMDAwMDAwMDAwMDAwCiAgICBiLwogICAgY2FsbHN1YiBiaWd1aW50VG9VaW50NjRNb2R1bG8KICAgIGZyYW1lX2RpZyAtMQogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czozNAogICAgLy8gdXNlclJld2FyZERlYnQgPSBMb2NhbFN0YXRlPHVpbnQ2ND4oKTsKICAgIGJ5dGVjIDUgLy8gInVzZXJSZXdhcmREZWJ0IgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjk3CiAgICAvLyByZXR1cm4gYmlndWludFRvVWludDY0TW9kdWxvKChCaWdVaW50KHRoaXMuYmFsYW5jZSh1c2VyKS52YWx1ZSkgKiB0aGlzLmFjY1Jld2FyZFBlclNoYXJlUC52YWx1ZSkgLyBQX1NDQUxFKSAtIHRoaXMudXNlclJld2FyZERlYnQodXNlcikudmFsdWU7CiAgICBhcHBfbG9jYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgTG9jYWxTdGF0ZSBleGlzdHMKICAgIC0KICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czo6UmV3YXJkTWFuYWdlci5hZGRSZXdhcmRzKHJld2FyZEFtb3VudDogdWludDY0KSAtPiB2b2lkOgphZGRSZXdhcmRzOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjEwMAogICAgLy8gcHJvdGVjdGVkIGFkZFJld2FyZHMocmV3YXJkQW1vdW50OiB1aW50NjQpOiB2b2lkIHsKICAgIHByb3RvIDEgMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjEwMQogICAgLy8gbGV0IHRvdGFsU3VwcGx5ID0gdGhpcy50b3RhbFN1cHBseS52YWx1ZTsKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MjkKICAgIC8vIHRvdGFsU3VwcGx5ID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogMCB9KTsKICAgIGJ5dGVjIDcgLy8gInRvdGFsU3VwcGx5IgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjEwMQogICAgLy8gbGV0IHRvdGFsU3VwcGx5ID0gdGhpcy50b3RhbFN1cHBseS52YWx1ZTsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBzd2FwCiAgICBkdXAKICAgIHVuY292ZXIgMgogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjEwMgogICAgLy8gaWYgKHRvdGFsU3VwcGx5ID4gMCkgewogICAgYnogYWRkUmV3YXJkc19hZnRlcl9pZl9lbHNlQDIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoxMDMKICAgIC8vIGNvbnN0IGFkbWluRmVlUmV3YXJkczogdWludDY0ID0gKHJld2FyZEFtb3VudCAqIHRoaXMuYWRtaW5GZWVTaGFyZUJQLnZhbHVlKSAvIEJQOwogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoyOAogICAgLy8gYWRtaW5GZWVTaGFyZUJQID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogQlAgLyA1IH0pOyAvLyBEZWZhdWx0IGFkbWluIGZlZSBpcyAyMCUKICAgIGJ5dGVjIDE4IC8vICJhZG1pbkZlZVNoYXJlQlAiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MTAzCiAgICAvLyBjb25zdCBhZG1pbkZlZVJld2FyZHM6IHVpbnQ2NCA9IChyZXdhcmRBbW91bnQgKiB0aGlzLmFkbWluRmVlU2hhcmVCUC52YWx1ZSkgLyBCUDsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICBmcmFtZV9kaWcgLTEKICAgICoKICAgIGludGMgNCAvLyAxMDAwMAogICAgLwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjEwNAogICAgLy8gcmV3YXJkQW1vdW50IC09IGFkbWluRmVlUmV3YXJkczsKICAgIGZyYW1lX2RpZyAtMQogICAgZGlnIDEKICAgIC0KICAgIGZyYW1lX2J1cnkgLTEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoxMDUKICAgIC8vIHRoaXMuYWNjUmV3YXJkUGVyU2hhcmVQLnZhbHVlICs9IEJpZ1VpbnQocmV3YXJkQW1vdW50KSAqIFBfU0NBTEUgLyBCaWdVaW50KHRvdGFsU3VwcGx5KTsKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MzAKICAgIC8vIGFjY1Jld2FyZFBlclNoYXJlUCA9IEdsb2JhbFN0YXRlPGJpZ3VpbnQ+KHsgaW5pdGlhbFZhbHVlOiAwbiB9KTsKICAgIGJ5dGVjIDggLy8gImFjY1Jld2FyZFBlclNoYXJlUCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoxMDUKICAgIC8vIHRoaXMuYWNjUmV3YXJkUGVyU2hhcmVQLnZhbHVlICs9IEJpZ1VpbnQocmV3YXJkQW1vdW50KSAqIFBfU0NBTEUgLyBCaWdVaW50KHRvdGFsU3VwcGx5KTsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICBmcmFtZV9kaWcgLTEKICAgIGl0b2IKICAgIGJ5dGVjIDkgLy8gMHgwMTAwMDAwMDAwMDAwMAogICAgYioKICAgIGZyYW1lX2RpZyAwCiAgICBpdG9iCiAgICBiLwogICAgYisKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czozMAogICAgLy8gYWNjUmV3YXJkUGVyU2hhcmVQID0gR2xvYmFsU3RhdGU8YmlndWludD4oeyBpbml0aWFsVmFsdWU6IDBuIH0pOwogICAgYnl0ZWMgOCAvLyAiYWNjUmV3YXJkUGVyU2hhcmVQIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjEwNQogICAgLy8gdGhpcy5hY2NSZXdhcmRQZXJTaGFyZVAudmFsdWUgKz0gQmlnVWludChyZXdhcmRBbW91bnQpICogUF9TQ0FMRSAvIEJpZ1VpbnQodG90YWxTdXBwbHkpOwogICAgc3dhcAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoxMDYKICAgIC8vIHRoaXMuYWRtaW5GZWVBbW91bnQudmFsdWUgKz0gYWRtaW5GZWVSZXdhcmRzOwogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czozMQogICAgLy8gYWRtaW5GZWVBbW91bnQgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgYnl0ZWMgMTEgLy8gImFkbWluRmVlQW1vdW50IgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjEwNgogICAgLy8gdGhpcy5hZG1pbkZlZUFtb3VudC52YWx1ZSArPSBhZG1pbkZlZVJld2FyZHM7CiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgKwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjMxCiAgICAvLyBhZG1pbkZlZUFtb3VudCA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBieXRlYyAxMSAvLyAiYWRtaW5GZWVBbW91bnQiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MTA2CiAgICAvLyB0aGlzLmFkbWluRmVlQW1vdW50LnZhbHVlICs9IGFkbWluRmVlUmV3YXJkczsKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CgphZGRSZXdhcmRzX2FmdGVyX2lmX2Vsc2VAMjoKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czo6UmV3YXJkTWFuYWdlci5kZXBvc2l0THAodG86IGJ5dGVzLCBscEFtb3VudDogdWludDY0KSAtPiB2b2lkOgpkZXBvc2l0THA6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MTEwCiAgICAvLyBwcm90ZWN0ZWQgZGVwb3NpdExwKHRvOiBBY2NvdW50LCBscEFtb3VudDogdWludDY0KTogdm9pZCB7CiAgICBwcm90byAyIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoxMTEKICAgIC8vIGNvbnN0IGFjY1Jld2FyZFBlclNoYXJlUCA9IHRoaXMuYWNjUmV3YXJkUGVyU2hhcmVQLnZhbHVlOwogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czozMAogICAgLy8gYWNjUmV3YXJkUGVyU2hhcmVQID0gR2xvYmFsU3RhdGU8YmlndWludD4oeyBpbml0aWFsVmFsdWU6IDBuIH0pOwogICAgYnl0ZWMgOCAvLyAiYWNjUmV3YXJkUGVyU2hhcmVQIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjExMQogICAgLy8gY29uc3QgYWNjUmV3YXJkUGVyU2hhcmVQID0gdGhpcy5hY2NSZXdhcmRQZXJTaGFyZVAudmFsdWU7CiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjExMgogICAgLy8gbGV0IHBlbmRpbmc6IHVpbnQ2NCA9IDA7CiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjExMwogICAgLy8gbGV0IHVzZXJMcEFtb3VudCA9IHRoaXMuYmFsYW5jZSh0bykudmFsdWU7CiAgICBmcmFtZV9kaWcgLTIKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MzMKICAgIC8vIGJhbGFuY2UgPSBMb2NhbFN0YXRlPHVpbnQ2ND4oKTsKICAgIGJ5dGVjXzMgLy8gImJhbGFuY2UiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MTEzCiAgICAvLyBsZXQgdXNlckxwQW1vdW50ID0gdGhpcy5iYWxhbmNlKHRvKS52YWx1ZTsKICAgIGFwcF9sb2NhbF9nZXRfZXgKICAgIHN3YXAKICAgIGR1cAogICAgdW5jb3ZlciAyCiAgICBhc3NlcnQgLy8gY2hlY2sgTG9jYWxTdGF0ZSBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoxMTQKICAgIC8vIGlmICh1c2VyTHBBbW91bnQgPiAwKSB7CiAgICBieiBkZXBvc2l0THBfYWZ0ZXJfaWZfZWxzZUAyCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MTE1CiAgICAvLyBwZW5kaW5nID0gYmlndWludFRvVWludDY0TW9kdWxvKEJpZ1VpbnQodXNlckxwQW1vdW50KSAqIGFjY1Jld2FyZFBlclNoYXJlUCAvIFBfU0NBTEUpIC0gdGhpcy51c2VyUmV3YXJkRGVidCh0bykudmFsdWU7CiAgICBmcmFtZV9kaWcgMgogICAgaXRvYgogICAgZnJhbWVfZGlnIDAKICAgIGIqCiAgICBieXRlYyA5IC8vIDB4MDEwMDAwMDAwMDAwMDAKICAgIGIvCiAgICBjYWxsc3ViIGJpZ3VpbnRUb1VpbnQ2NE1vZHVsbwogICAgZnJhbWVfZGlnIC0yCiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjM0CiAgICAvLyB1c2VyUmV3YXJkRGVidCA9IExvY2FsU3RhdGU8dWludDY0PigpOwogICAgYnl0ZWMgNSAvLyAidXNlclJld2FyZERlYnQiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MTE1CiAgICAvLyBwZW5kaW5nID0gYmlndWludFRvVWludDY0TW9kdWxvKEJpZ1VpbnQodXNlckxwQW1vdW50KSAqIGFjY1Jld2FyZFBlclNoYXJlUCAvIFBfU0NBTEUpIC0gdGhpcy51c2VyUmV3YXJkRGVidCh0bykudmFsdWU7CiAgICBhcHBfbG9jYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgTG9jYWxTdGF0ZSBleGlzdHMKICAgIC0KICAgIGZyYW1lX2J1cnkgMQoKZGVwb3NpdExwX2FmdGVyX2lmX2Vsc2VAMjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoxMTcKICAgIC8vIHVzZXJMcEFtb3VudCArPSBscEFtb3VudDsKICAgIGZyYW1lX2RpZyAyCiAgICBmcmFtZV9kaWcgLTEKICAgICsKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoxMTgKICAgIC8vIHRoaXMuYmFsYW5jZSh0bykudmFsdWUgKz0gbHBBbW91bnQ7CiAgICBmcmFtZV9kaWcgLTIKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MzMKICAgIC8vIGJhbGFuY2UgPSBMb2NhbFN0YXRlPHVpbnQ2ND4oKTsKICAgIGJ5dGVjXzMgLy8gImJhbGFuY2UiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MTE4CiAgICAvLyB0aGlzLmJhbGFuY2UodG8pLnZhbHVlICs9IGxwQW1vdW50OwogICAgYXBwX2xvY2FsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIExvY2FsU3RhdGUgZXhpc3RzCiAgICBmcmFtZV9kaWcgLTEKICAgICsKICAgIGZyYW1lX2RpZyAtMgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjMzCiAgICAvLyBiYWxhbmNlID0gTG9jYWxTdGF0ZTx1aW50NjQ+KCk7CiAgICBieXRlY18zIC8vICJiYWxhbmNlIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjExOAogICAgLy8gdGhpcy5iYWxhbmNlKHRvKS52YWx1ZSArPSBscEFtb3VudDsKICAgIHVuY292ZXIgMgogICAgYXBwX2xvY2FsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjExOQogICAgLy8gdGhpcy50b3RhbFN1cHBseS52YWx1ZSArPSBscEFtb3VudDsKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MjkKICAgIC8vIHRvdGFsU3VwcGx5ID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogMCB9KTsKICAgIGJ5dGVjIDcgLy8gInRvdGFsU3VwcGx5IgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjExOQogICAgLy8gdGhpcy50b3RhbFN1cHBseS52YWx1ZSArPSBscEFtb3VudDsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICBmcmFtZV9kaWcgLTEKICAgICsKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoyOQogICAgLy8gdG90YWxTdXBwbHkgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgYnl0ZWMgNyAvLyAidG90YWxTdXBwbHkiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MTE5CiAgICAvLyB0aGlzLnRvdGFsU3VwcGx5LnZhbHVlICs9IGxwQW1vdW50OwogICAgc3dhcAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoxMjEKICAgIC8vIHRoaXMudXNlclJld2FyZERlYnQodG8pLnZhbHVlID0gYmlndWludFRvVWludDY0TW9kdWxvKChCaWdVaW50KHVzZXJMcEFtb3VudCkgKiBhY2NSZXdhcmRQZXJTaGFyZVApIC8gUF9TQ0FMRSk7CiAgICBpdG9iCiAgICBmcmFtZV9kaWcgMAogICAgYioKICAgIGJ5dGVjIDkgLy8gMHgwMTAwMDAwMDAwMDAwMAogICAgYi8KICAgIGNhbGxzdWIgYmlndWludFRvVWludDY0TW9kdWxvCiAgICBmcmFtZV9kaWcgLTIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czozNAogICAgLy8gdXNlclJld2FyZERlYnQgPSBMb2NhbFN0YXRlPHVpbnQ2ND4oKTsKICAgIGJ5dGVjIDUgLy8gInVzZXJSZXdhcmREZWJ0IgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjEyMQogICAgLy8gdGhpcy51c2VyUmV3YXJkRGVidCh0bykudmFsdWUgPSBiaWd1aW50VG9VaW50NjRNb2R1bG8oKEJpZ1VpbnQodXNlckxwQW1vdW50KSAqIGFjY1Jld2FyZFBlclNoYXJlUCkgLyBQX1NDQUxFKTsKICAgIHVuY292ZXIgMgogICAgYXBwX2xvY2FsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjEyMgogICAgLy8gaWYgKHBlbmRpbmcgPiAwKSB7CiAgICBmcmFtZV9kaWcgMQogICAgYnogZGVwb3NpdExwX2FmdGVyX2lmX2Vsc2VANQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjEyMwogICAgLy8gaXR4bi5hc3NldFRyYW5zZmVyKHsgeGZlckFzc2V0OiB0aGlzLmFzc2V0LnZhbHVlLCBhc3NldEFtb3VudDogcGVuZGluZywgYXNzZXRSZWNlaXZlcjogdG8gfSkuc3VibWl0KCk7CiAgICBpdHhuX2JlZ2luCiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjI3CiAgICAvLyBhc3NldCA9IEdsb2JhbFN0YXRlPEFzc2V0PigpOwogICAgYnl0ZWNfMiAvLyAiYXNzZXQiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MTIzCiAgICAvLyBpdHhuLmFzc2V0VHJhbnNmZXIoeyB4ZmVyQXNzZXQ6IHRoaXMuYXNzZXQudmFsdWUsIGFzc2V0QW1vdW50OiBwZW5kaW5nLCBhc3NldFJlY2VpdmVyOiB0byB9KS5zdWJtaXQoKTsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICBmcmFtZV9kaWcgLTIKICAgIGl0eG5fZmllbGQgQXNzZXRSZWNlaXZlcgogICAgZnJhbWVfZGlnIDEKICAgIGR1cAogICAgY292ZXIgMgogICAgaXR4bl9maWVsZCBBc3NldEFtb3VudAogICAgaXR4bl9maWVsZCBYZmVyQXNzZXQKICAgIHB1c2hpbnQgNCAvLyA0CiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnRjXzAgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKICAgIGl0eG5fc3VibWl0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MTI0CiAgICAvLyBlbWl0PFJld2FyZHNDbGFpbWVkPih7IHVzZXI6IG5ldyBBZGRyZXNzKHRvKSwgcGVuZGluZyB9KTsKICAgIGl0b2IKICAgIGZyYW1lX2RpZyAtMgogICAgc3dhcAogICAgY29uY2F0CiAgICBieXRlYyAyNSAvLyBtZXRob2QgIlJld2FyZHNDbGFpbWVkKGFkZHJlc3MsdWludDY0KSIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCgpkZXBvc2l0THBfYWZ0ZXJfaWZfZWxzZUA1OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjEyNgogICAgLy8gZW1pdDxEZXBvc2l0Pih7IHRvOiBuZXcgQWRkcmVzcyh0byksIGxwQW1vdW50IH0pOwogICAgZnJhbWVfZGlnIC0xCiAgICBpdG9iCiAgICBmcmFtZV9kaWcgLTIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgcHVzaGJ5dGVzIDB4Y2ZhYjg3MjMgLy8gbWV0aG9kICJEZXBvc2l0KGFkZHJlc3MsdWludDY0KSIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL293bmFibGUuYWxnby50czo6T3duYWJsZS5vbmx5T3duZXIoKSAtPiB2b2lkOgpvbmx5T3duZXI6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL293bmFibGUuYWxnby50czoxMwogICAgLy8gYXNzZXJ0KG9wLlR4bi5zZW5kZXIuYnl0ZXMgPT09IHRoaXMub3duZXIudmFsdWUuYnl0ZXMsICdPbmx5IG93bmVyJyk7CiAgICB0eG4gU2VuZGVyCiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9vd25hYmxlLmFsZ28udHM6NgogICAgLy8gcHJvdGVjdGVkIG93bmVyID0gR2xvYmFsU3RhdGU8QWRkcmVzcz4oKTsKICAgIGJ5dGVjIDE0IC8vICJvd25lciIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvb3duYWJsZS5hbGdvLnRzOjEzCiAgICAvLyBhc3NlcnQob3AuVHhuLnNlbmRlci5ieXRlcyA9PT0gdGhpcy5vd25lci52YWx1ZS5ieXRlcywgJ09ubHkgb3duZXInKTsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICA9PQogICAgYXNzZXJ0IC8vIE9ubHkgb3duZXIKICAgIHJldHN1Ygo=",clear:"I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg=="},byteCode:{approval:"CyAFAAEIIJBOJh0MdG9rZW5CYWxhbmNlC3ZVc2RCYWxhbmNlBWFzc2V0B2JhbGFuY2UIcmVzZXJ2ZXMOdXNlclJld2FyZERlYnQBZAt0b3RhbFN1cHBseRJhY2NSZXdhcmRQZXJTaGFyZVAHAQAAAAAAAAEBDmFkbWluRmVlQW1vdW50CmNhbkRlcG9zaXQLY2FuV2l0aGRyYXcFb3duZXIKZmVlU2hhcmVCUBFiYWxhbmNlUmF0aW9NaW5CUAECD2FkbWluRmVlU2hhcmVCUAFhBnJvdXRlcg1zdG9wQXV0aG9yaXR5EXRva2VuQW1vdW50UmVkdWNlE3Rva2VuQW1vdW50SW5jcmVhc2UEFR98dQS6gYB2AQMDBoEBCQEAAAAAAAAAADEYQAApJxKB0A9nJwciZycIgABnJwsiZygiZykiZycEImcnBiJnJwwjZycNI2eCAwQBo6P/BARZt6wEm0uCNDYaAI4DALcAqwCdMRkURDEYQQCGghIEdhCkYATjrrJcBNl4rRQEDRtMBgR1v5ooBPST1+0EjVy23wT+BKXOBAKOCFkEQfyWbgSr8gAUBASxYfEEZlkczwSlrmvRBKBMW8QENhthWQRTjpEnBOF7r7Q2GgCOEgFbApMCqgNaBDYETQR0BIsElASdBKYErwTABNEFLAVDBXIFhQCABFFtNHs2GgCOAQCJACMxGZCBAxoxGBBEQgFyMRmBAhIxGBBEQgEFMRkjEjEYEERCAPOKAgCL/oEKCIsAMgwNQQAqsYEGshCBBbIZJxuyHicbsh+L/40CAAsABLNC/9syALIBQv/1IrIBQv/viYoBAYv/FUkkDUEAGIsAJAlJiwBJTgMPSwJMTYv/TE8CUhdMiSJC/+g2GgFJFSUSRDYaAkkVJRJENhoDSRUkEkQXNhoESRUkEkQXNhoFSRUkEkQXNhoGSRUkEkQXJw5LBmcqTwNnJxNPA2cnFE8DZycVTwNnJw9PAmcnEExnIiplRHEBTElPAkSBAw1BACZJgQMJgQpMlCcWTGdJgQMMQQAPgQNLAQmBCkyUJxdMZyNDIkL/9iJC/94xAIgIgCNDNhoBSRUkEkQXMQBJIitjTElPAkRBAAZJSwOIBKBLAUkiK2NEFESICHkURCNDiAlosSIqZUQyCrIUIrISshGBBLIQIrIBs4AWUG9vbDogb3B0LWluIGNvbXBsZXRlZLAjQ4AARwQxFiMJSTgQgQQSRDYaAUkVJBJEFyKI/okxGSMSQQAFMQCIB/UiJwxlREQiJwZlTElOAkUGREsBSTgRIiplRBJESTgUMgoSREk4IDIDEkRJOBUyAxJEOBKIBkxJRQhJRCInBGVECCcETGciKGVMSU4CRQZEIillTElOAkUGRAhFBkEABUsEQAA1SwUjkSIoZURLAQgoTGciKWVECClMZ4gFkTEAIicGZURLBQmIB+4iKGVEgYCAgICAIAxEI0MiKGVESwYWSwQWSwGjSwcWTEsBokkVJA5EJK9MSwGrF08ECChMZyIpZURLBRZPBKNPA6JJFSQORE8CqxcIKUxnQv+eNhoBSRUkEkQXNhoCSRUkEkQXiANDI0OAADYaAUkVJRJENhoCSRUkEkQXSTYaA0kVIxJEIlNMiALKIkwiTEEAXEsCQAANIicPZURLBAshBApFAUsDSUsCCYgFS0mIBXhPAkwJRQIiKGVESwEIKExnIicEZUQIJwRMZyIoZUSIBA5JRQciKWVEDEEACSIpZURLBglFAilLBmdJiAbAIiplRBZLBUxQSwQWUEsCFkxLAVBLAhZQgAQru+yjTFCwiAJXJxhMULAjQ4AASTYaAUkVJRJENhoCSRUkEkQXSTYaA0kVJBJEF0w2GgRJFSMSRCJTTIgCDyJMIkwiTEEAeyIpZURLBggpSwFniAODSUUKIihlTElOAkULRAxBAA1LB0sJCUlFBIgEsEUCIicEZURLA0lOAksBDkRMCScETGdLA0AADSInD2VESwILIQQKRQFKSU4CCUlFBChLC2dJSwcPRLEiKmVESwmyFLIRshKBBLIQIrIBs4gF5CIqZUQWSwdMUEsGFlBLAhZMSwFQSwIWUIAE0/HVQkxQsIgBeycYTFCwI0M2GgFJFSQSRBeIBoRJIQQORCcPTGcjQ4gGdiInBmVMSU8CRCInB2VMSU4CTgNEDUEACjEASwJLAgmIBb0jQzYaAUkVJBJEF4gGRkkhBA5EJxBMZyNDiAESJwwiZyNDiAYvJwwjZyNDiAEAJw0iZyNDiAYdJw0jZyNDNhoBSRUlEkSIBgwnFUxnI0M2GgFJFSUSRIgF+ycUTGcjQ4AASTEASSIrY0xJTwJEQQBISRYiJwhlRKMnCaKI+39JRQRLAiInBWNECUlFBUEAKUsBSScFSwVmsSIqZURLAbIUSwVJTgKyErIRgQSyECKyAbMWUCcZTFCwI0M2GgFJFSQSRBeIBY5JIQQORCcSTGcjQ4gFgCInC2VMSU8CREEAHrEiKmVEIicOZUSyFEsBshKyEYEEshAisgGzJwsiZyNDNhoBSRUlEkSIBFMWJxhMULAjQzYaAUkVJRJEiAU2Jw5MZyNDMQAiJxRlRBJEiTEAIicVZUQSRImKAAAiKGVMSU8CRCIpZUxJTgJOA0QNQQAQiwEhBAuLAAoiJxBlRA9EiYsAiwEMQf/3iwAhBAuLAQoiJxBlRA9EiYoCAIv/Ioj6QCInDWVERCInBmVEMQBJIitjTElPAkRJi/4PRCInCGVMTgJEIkxBABaLAhaLA6MnCaKI+keLASInBWNECYwEiwKL/gmLAUkiK2NEi/4JSwErTwJmIicHZUSL/gknB0xnTBaLA6MnCaKI+hEnBUxmiwRBACSxIiplRIsBSU4CshSLBElOArISshGBBLIQIrIBsxZQJxlMULCL/haLAUsBUIAE06+k8UxQsCIoZUQiKWVESghLAhZLBKNLARZMSwGiSRUkDkQkr0xLAasXTwVMCShMZyIpZURPBBZPBaNPA6JJFSQORE8CqxcJKUsBZyIoZUQIDUQiJwRlRIv+SwEORIv+CScETGeIAMgiJwZlRIsADESxIiplRIv+iAFaMQCyFLISshGBBLIQIrIBs4mKAQEiSYv/FkkiJwZlRBZJTgIiJxNlRIECkBZJTgMnEaNOAqZJQQB0iwOLAqGLBKOMAIsGQQBaiwCLA6dBAEeLAIsDoYwBI4sEiwNJTgKjSwGjo4sBSaOLAklPAqNPAqCjiAEWTEEAFYsCiwGjoIsFiwKjoicKoIj41IwAiYsCiwGjoUL/6IsDiwChjAEiQv+2iwCLA6CMASJC/6uLAosDoUL/iYoAACIoZUQWIillRBZKoyInE2VEFklLAqNPBE8EoKNJTgJOA4ABBKMnCqFPAqMnGqJLAUsCo0sBSwKjTwKjoIgAlElOAkqgiADyTgOkQQAViwChiADmiwFMCYwBiwEjkCcGTGeJiwBMoYgA0IsBCIwBQv/oigEBIicWZUxJTwJEIicXZUxOAkRBAAiL/4sACowAiYsBQQAIi/+LAQuMAImL/4wAiYoBASInFmVMSU8CRCInF2VMTgJEQQAIi/+LAAuMAImLAUEACIv/iwEKjACJi/+MAImKAQEiSYv/gAClRIv/gACoQQAFgACMAImL/ycapkEABScKjACJi/+TIwiBAgqBAkyVTBZMFkwnHKOgSYwAi/9LAaKgJxGijAGLAYsApEEAFYv/iwFJTgKiSwGgJxGijAGMAEL/44mKAQEiRwOL/4AAqEEABCKMAImL/4ABCKRBAAQjjACJi/+TgQIIgQMKgQJMlUwWTBZMJxyjoIwBiwFJo0mMA4AAqEAAJycRiwFJTgKji/+LA6KgJxqiSYwAqEAAC4sBJwqhiwCoQQA9iwCMAYsBJwqgSYwCSUsBo6OL/6ZBAAeLAowBQv/miwFJSwGjo4v/pUEACosBJwqhjAFC/+mLAYj2zYwAiYsAjAFC/4yKAQCL/yIrY0UBQAAFi/8rImaL/yInBWNFAUAABov/JwUiZomKAQGL/yIrY0QWIicIZUSjJwmiiPaJi/8iJwVjRAmJigEAIicHZUxJTwJEQQAwIicSZUSL/wshBAqL/0sBCYz/IicIZUSL/xYnCaOLABaioCcITGciJwtlRAgnC0xniYoCACInCGVEIov+IitjTElPAkRBABaLAhaLAKMnCaKI9h6L/iInBWNECYwBiwKL/wiL/iIrY0SL/wiL/itPAmYiJwdlRIv/CCcHTGcWiwCjJwmiiPXqi/4nBU8CZosBQQAksSIqZUSL/rIUiwFJTgKyErIRgQSyECKyAbMWi/5MUCcZTFCwi/8Wi/5MUIAEz6uHI0xQsIkxACInDmVEEkSJ",clear:"C4EBQw=="},events:[{name:"RewardsClaimed",args:[{type:"address",name:"user"},{type:"uint64",name:"pending"}]},{name:"Withdraw",args:[{type:"address",name:"from"},{type:"uint64",name:"lpAmount"}]},{name:"Deposit",args:[{type:"address",name:"to"},{type:"uint64",name:"lpAmount"}]},{name:"SwappedToVUsd",args:[{type:"address",name:"sender"},{type:"uint64",name:"tokenId"},{type:"uint64",name:"amount"},{type:"uint64",name:"vUsdAmount"},{type:"uint64",name:"fee"}]},{name:"SwappedFromVUsd",args:[{type:"address",name:"recipient"},{type:"uint64",name:"tokenId"},{type:"uint64",name:"vUsdAmount"},{type:"uint64",name:"amount"},{type:"uint64",name:"fee"}]}],templateVariables:{}},Yr=class{constructor(n){this.value=n}value;asByteArray(){return this.value}asString(){return this.value!==void 0?Buffer.from(this.value).toString("utf-8"):void 0}},Z=class i{static get create(){return{_resolveByMethod(n){switch(n.method){case"createApplication":case"createApplication(address,address,uint64,uint64,uint64,uint64)void":return i.create.createApplication(n)}throw new Error("Unknown ' + verb + ' method")},createApplication(n){return{...n,method:"createApplication(address,address,uint64,uint64,uint64,uint64)void",args:Array.isArray(n.args)?n.args:[n.args.owner,n.args.router,n.args.a,n.args.asset,n.args.feeShareBp,n.args.balanceRatioMinBp]}}}}static get optIn(){return{optInToApplication(n){return{...n,method:"optInToApplication()void",args:Array.isArray(n.args)?n.args:[]}},deposit(n){return{...n,method:"deposit(axfer,uint64)void",args:Array.isArray(n.args)?n.args:[n.args.assetTransferRef,n.args.budget]}}}}static get closeOut(){return{closeOutOfApplication(n){return{...n,method:"closeOutOfApplication(uint64)void",args:Array.isArray(n.args)?n.args:[n.args.budget]}}}}static optInAsset(n){return{...n,method:"optInAsset()void",args:Array.isArray(n.args)?n.args:[]}}static deposit(n){return{...n,method:"deposit(axfer,uint64)void",args:Array.isArray(n.args)?n.args:[n.args.assetTransferRef,n.args.budget]}}static withdraw(n){return{...n,method:"withdraw(uint64,uint64)void",args:Array.isArray(n.args)?n.args:[n.args.amountLp,n.args.budget]}}static swapToVUsd(n){return{...n,method:"swapToVUsd(address,uint64,bool)uint64",args:Array.isArray(n.args)?n.args:[n.args.user,n.args.amount,n.args.zeroFee]}}static swapFromVUsd(n){return{...n,method:"swapFromVUsd(address,uint64,uint64,bool)uint64",args:Array.isArray(n.args)?n.args:[n.args.user,n.args.amount,n.args.receiveAmountMin,n.args.zeroFee]}}static setFeeShare(n){return{...n,method:"setFeeShare(uint64)void",args:Array.isArray(n.args)?n.args:[n.args.feeShareBp]}}static adjustTotalLpAmount(n){return{...n,method:"adjustTotalLpAmount()void",args:Array.isArray(n.args)?n.args:[]}}static setBalanceRatioMinBp(n){return{...n,method:"setBalanceRatioMinBP(uint64)void",args:Array.isArray(n.args)?n.args:[n.args.balanceRatioMinBp]}}static stopDeposit(n){return{...n,method:"stopDeposit()void",args:Array.isArray(n.args)?n.args:[]}}static startDeposit(n){return{...n,method:"startDeposit()void",args:Array.isArray(n.args)?n.args:[]}}static stopWithdraw(n){return{...n,method:"stopWithdraw()void",args:Array.isArray(n.args)?n.args:[]}}static startWithdraw(n){return{...n,method:"startWithdraw()void",args:Array.isArray(n.args)?n.args:[]}}static setStopAuthority(n){return{...n,method:"setStopAuthority(address)void",args:Array.isArray(n.args)?n.args:[n.args.stopAuthority]}}static setRouter(n){return{...n,method:"setRouter(address)void",args:Array.isArray(n.args)?n.args:[n.args.router]}}static claimRewards(n){return{...n,method:"claimRewards()void",args:Array.isArray(n.args)?n.args:[]}}static setAdminFeeShare(n){return{...n,method:"setAdminFeeShare(uint64)void",args:Array.isArray(n.args)?n.args:[n.args.adminFeeShareBp]}}static claimAdminFee(n){return{...n,method:"claimAdminFee()void",args:Array.isArray(n.args)?n.args:[]}}static pendingReward(n){return{...n,method:"pendingReward(address)uint64",args:Array.isArray(n.args)?n.args:[n.args.user]}}static transferOwnership(n){return{...n,method:"transferOwnership(address)void",args:Array.isArray(n.args)?n.args:[n.args.newOwner]}}};var wr=class i{appClient;constructor(n){this.appClient=n instanceof ai.AppClient?n:new ai.AppClient({...n,appSpec:Br})}decodeReturnValue(n,a){return a!==void 0?(0,mg.getArc56ReturnValue)(a,this.appClient.getABIMethod(n),Br.structs):void 0}static async fromCreatorAndName(n){return new i(await ai.AppClient.fromCreatorAndName({...n,appSpec:Br}))}static async fromNetwork(n){return new i(await ai.AppClient.fromNetwork({...n,appSpec:Br}))}get appId(){return this.appClient.appId}get appAddress(){return this.appClient.appAddress}get appName(){return this.appClient.appName}get appSpec(){return this.appClient.appSpec}get algorand(){return this.appClient.algorand}params={optIn:{optInToApplication:(n={args:[]})=>this.appClient.params.optIn(Z.optIn.optInToApplication(n)),deposit:n=>this.appClient.params.optIn(Z.optIn.deposit(n))},closeOut:{closeOutOfApplication:(n={args:[void 0]})=>this.appClient.params.closeOut(Z.closeOut.closeOutOfApplication(n))},clearState:n=>this.appClient.params.bare.clearState(n),optInAsset:(n={args:[]})=>this.appClient.params.call(Z.optInAsset(n)),deposit:n=>this.appClient.params.call(Z.deposit(n)),withdraw:n=>this.appClient.params.call(Z.withdraw(n)),swapToVUsd:n=>this.appClient.params.call(Z.swapToVUsd(n)),swapFromVUsd:n=>this.appClient.params.call(Z.swapFromVUsd(n)),setFeeShare:n=>this.appClient.params.call(Z.setFeeShare(n)),adjustTotalLpAmount:(n={args:[]})=>this.appClient.params.call(Z.adjustTotalLpAmount(n)),setBalanceRatioMinBp:n=>this.appClient.params.call(Z.setBalanceRatioMinBp(n)),stopDeposit:(n={args:[]})=>this.appClient.params.call(Z.stopDeposit(n)),startDeposit:(n={args:[]})=>this.appClient.params.call(Z.startDeposit(n)),stopWithdraw:(n={args:[]})=>this.appClient.params.call(Z.stopWithdraw(n)),startWithdraw:(n={args:[]})=>this.appClient.params.call(Z.startWithdraw(n)),setStopAuthority:n=>this.appClient.params.call(Z.setStopAuthority(n)),setRouter:n=>this.appClient.params.call(Z.setRouter(n)),claimRewards:(n={args:[]})=>this.appClient.params.call(Z.claimRewards(n)),setAdminFeeShare:n=>this.appClient.params.call(Z.setAdminFeeShare(n)),claimAdminFee:(n={args:[]})=>this.appClient.params.call(Z.claimAdminFee(n)),pendingReward:n=>this.appClient.params.call(Z.pendingReward(n)),transferOwnership:n=>this.appClient.params.call(Z.transferOwnership(n))};createTransaction={optIn:{optInToApplication:(n={args:[]})=>this.appClient.createTransaction.optIn(Z.optIn.optInToApplication(n)),deposit:n=>this.appClient.createTransaction.optIn(Z.optIn.deposit(n))},closeOut:{closeOutOfApplication:(n={args:[void 0]})=>this.appClient.createTransaction.closeOut(Z.closeOut.closeOutOfApplication(n))},clearState:n=>this.appClient.createTransaction.bare.clearState(n),optInAsset:(n={args:[]})=>this.appClient.createTransaction.call(Z.optInAsset(n)),deposit:n=>this.appClient.createTransaction.call(Z.deposit(n)),withdraw:n=>this.appClient.createTransaction.call(Z.withdraw(n)),swapToVUsd:n=>this.appClient.createTransaction.call(Z.swapToVUsd(n)),swapFromVUsd:n=>this.appClient.createTransaction.call(Z.swapFromVUsd(n)),setFeeShare:n=>this.appClient.createTransaction.call(Z.setFeeShare(n)),adjustTotalLpAmount:(n={args:[]})=>this.appClient.createTransaction.call(Z.adjustTotalLpAmount(n)),setBalanceRatioMinBp:n=>this.appClient.createTransaction.call(Z.setBalanceRatioMinBp(n)),stopDeposit:(n={args:[]})=>this.appClient.createTransaction.call(Z.stopDeposit(n)),startDeposit:(n={args:[]})=>this.appClient.createTransaction.call(Z.startDeposit(n)),stopWithdraw:(n={args:[]})=>this.appClient.createTransaction.call(Z.stopWithdraw(n)),startWithdraw:(n={args:[]})=>this.appClient.createTransaction.call(Z.startWithdraw(n)),setStopAuthority:n=>this.appClient.createTransaction.call(Z.setStopAuthority(n)),setRouter:n=>this.appClient.createTransaction.call(Z.setRouter(n)),claimRewards:(n={args:[]})=>this.appClient.createTransaction.call(Z.claimRewards(n)),setAdminFeeShare:n=>this.appClient.createTransaction.call(Z.setAdminFeeShare(n)),claimAdminFee:(n={args:[]})=>this.appClient.createTransaction.call(Z.claimAdminFee(n)),pendingReward:n=>this.appClient.createTransaction.call(Z.pendingReward(n)),transferOwnership:n=>this.appClient.createTransaction.call(Z.transferOwnership(n))};send={optIn:{optInToApplication:async(n={args:[]})=>{let a=await this.appClient.send.optIn(Z.optIn.optInToApplication(n));return{...a,return:a.return}},deposit:async n=>{let a=await this.appClient.send.optIn(Z.optIn.deposit(n));return{...a,return:a.return}}},closeOut:{closeOutOfApplication:async(n={args:[void 0]})=>{let a=await this.appClient.send.closeOut(Z.closeOut.closeOutOfApplication(n));return{...a,return:a.return}}},clearState:n=>this.appClient.send.bare.clearState(n),optInAsset:async(n={args:[]})=>{let a=await this.appClient.send.call(Z.optInAsset(n));return{...a,return:a.return}},deposit:async n=>{let a=await this.appClient.send.call(Z.deposit(n));return{...a,return:a.return}},withdraw:async n=>{let a=await this.appClient.send.call(Z.withdraw(n));return{...a,return:a.return}},swapToVUsd:async n=>{let a=await this.appClient.send.call(Z.swapToVUsd(n));return{...a,return:a.return}},swapFromVUsd:async n=>{let a=await this.appClient.send.call(Z.swapFromVUsd(n));return{...a,return:a.return}},setFeeShare:async n=>{let a=await this.appClient.send.call(Z.setFeeShare(n));return{...a,return:a.return}},adjustTotalLpAmount:async(n={args:[]})=>{let a=await this.appClient.send.call(Z.adjustTotalLpAmount(n));return{...a,return:a.return}},setBalanceRatioMinBp:async n=>{let a=await this.appClient.send.call(Z.setBalanceRatioMinBp(n));return{...a,return:a.return}},stopDeposit:async(n={args:[]})=>{let a=await this.appClient.send.call(Z.stopDeposit(n));return{...a,return:a.return}},startDeposit:async(n={args:[]})=>{let a=await this.appClient.send.call(Z.startDeposit(n));return{...a,return:a.return}},stopWithdraw:async(n={args:[]})=>{let a=await this.appClient.send.call(Z.stopWithdraw(n));return{...a,return:a.return}},startWithdraw:async(n={args:[]})=>{let a=await this.appClient.send.call(Z.startWithdraw(n));return{...a,return:a.return}},setStopAuthority:async n=>{let a=await this.appClient.send.call(Z.setStopAuthority(n));return{...a,return:a.return}},setRouter:async n=>{let a=await this.appClient.send.call(Z.setRouter(n));return{...a,return:a.return}},claimRewards:async(n={args:[]})=>{let a=await this.appClient.send.call(Z.claimRewards(n));return{...a,return:a.return}},setAdminFeeShare:async n=>{let a=await this.appClient.send.call(Z.setAdminFeeShare(n));return{...a,return:a.return}},claimAdminFee:async(n={args:[]})=>{let a=await this.appClient.send.call(Z.claimAdminFee(n));return{...a,return:a.return}},pendingReward:async n=>{let a=await this.appClient.send.call(Z.pendingReward(n));return{...a,return:a.return}},transferOwnership:async n=>{let a=await this.appClient.send.call(Z.transferOwnership(n));return{...a,return:a.return}}};clone(n){return new i(this.appClient.clone(n))}async pendingReward(n){return(await this.appClient.send.call(Z.pendingReward(n))).return}state={global:{getAll:async()=>{let n=await this.appClient.state.global.getAll();return{feeShareBp:n.feeShareBP,router:n.router,tokenBalance:n.tokenBalance,vUsdBalance:n.vUsdBalance,balanceRatioMinBp:n.balanceRatioMinBP,reserves:n.reserves,a:n.a,d:n.d,tokenAmountReduce:n.tokenAmountReduce,tokenAmountIncrease:n.tokenAmountIncrease,stopAuthority:n.stopAuthority,canDeposit:n.canDeposit,canWithdraw:n.canWithdraw,asset:n.asset,adminFeeShareBp:n.adminFeeShareBP,totalSupply:n.totalSupply,accRewardPerShareP:new Yr(n.accRewardPerShareP),adminFeeAmount:n.adminFeeAmount,owner:n.owner}},feeShareBp:async()=>await this.appClient.state.global.getValue("feeShareBP"),router:async()=>await this.appClient.state.global.getValue("router"),tokenBalance:async()=>await this.appClient.state.global.getValue("tokenBalance"),vUsdBalance:async()=>await this.appClient.state.global.getValue("vUsdBalance"),balanceRatioMinBp:async()=>await this.appClient.state.global.getValue("balanceRatioMinBP"),reserves:async()=>await this.appClient.state.global.getValue("reserves"),a:async()=>await this.appClient.state.global.getValue("a"),d:async()=>await this.appClient.state.global.getValue("d"),tokenAmountReduce:async()=>await this.appClient.state.global.getValue("tokenAmountReduce"),tokenAmountIncrease:async()=>await this.appClient.state.global.getValue("tokenAmountIncrease"),stopAuthority:async()=>await this.appClient.state.global.getValue("stopAuthority"),canDeposit:async()=>await this.appClient.state.global.getValue("canDeposit"),canWithdraw:async()=>await this.appClient.state.global.getValue("canWithdraw"),asset:async()=>await this.appClient.state.global.getValue("asset"),adminFeeShareBp:async()=>await this.appClient.state.global.getValue("adminFeeShareBP"),totalSupply:async()=>await this.appClient.state.global.getValue("totalSupply"),accRewardPerShareP:async()=>new Yr(await this.appClient.state.global.getValue("accRewardPerShareP")),adminFeeAmount:async()=>await this.appClient.state.global.getValue("adminFeeAmount"),owner:async()=>await this.appClient.state.global.getValue("owner")},local:n=>{let a=typeof n=="string"?n:(0,bg.encodeAddress)(n.publicKey);return{getAll:async()=>{let r=await this.appClient.state.local(a).getAll();return{balance:r.balance,userRewardDebt:r.userRewardDebt}},balance:async()=>await this.appClient.state.local(a).getValue("balance"),userRewardDebt:async()=>await this.appClient.state.local(a).getValue("userRewardDebt")}}};newGroup(){let n=this,a=this.algorand.newGroup(),r=Promise.resolve(),o=[];return{optInAsset(s){return r=r.then(async()=>a.addAppCallMethodCall(await n.params.optInAsset(s))),o.push(void 0),this},deposit(s){return r=r.then(async()=>a.addAppCallMethodCall(await n.params.deposit(s))),o.push(void 0),this},withdraw(s){return r=r.then(async()=>a.addAppCallMethodCall(await n.params.withdraw(s))),o.push(void 0),this},swapToVUsd(s){return r=r.then(async()=>a.addAppCallMethodCall(await n.params.swapToVUsd(s))),o.push(c=>n.decodeReturnValue("swapToVUsd(address,uint64,bool)uint64",c)),this},swapFromVUsd(s){return r=r.then(async()=>a.addAppCallMethodCall(await n.params.swapFromVUsd(s))),o.push(c=>n.decodeReturnValue("swapFromVUsd(address,uint64,uint64,bool)uint64",c)),this},setFeeShare(s){return r=r.then(async()=>a.addAppCallMethodCall(await n.params.setFeeShare(s))),o.push(void 0),this},adjustTotalLpAmount(s){return r=r.then(async()=>a.addAppCallMethodCall(await n.params.adjustTotalLpAmount(s))),o.push(void 0),this},setBalanceRatioMinBp(s){return r=r.then(async()=>a.addAppCallMethodCall(await n.params.setBalanceRatioMinBp(s))),o.push(void 0),this},stopDeposit(s){return r=r.then(async()=>a.addAppCallMethodCall(await n.params.stopDeposit(s))),o.push(void 0),this},startDeposit(s){return r=r.then(async()=>a.addAppCallMethodCall(await n.params.startDeposit(s))),o.push(void 0),this},stopWithdraw(s){return r=r.then(async()=>a.addAppCallMethodCall(await n.params.stopWithdraw(s))),o.push(void 0),this},startWithdraw(s){return r=r.then(async()=>a.addAppCallMethodCall(await n.params.startWithdraw(s))),o.push(void 0),this},setStopAuthority(s){return r=r.then(async()=>a.addAppCallMethodCall(await n.params.setStopAuthority(s))),o.push(void 0),this},setRouter(s){return r=r.then(async()=>a.addAppCallMethodCall(await n.params.setRouter(s))),o.push(void 0),this},claimRewards(s){return r=r.then(async()=>a.addAppCallMethodCall(await n.params.claimRewards(s))),o.push(void 0),this},setAdminFeeShare(s){return r=r.then(async()=>a.addAppCallMethodCall(await n.params.setAdminFeeShare(s))),o.push(void 0),this},claimAdminFee(s){return r=r.then(async()=>a.addAppCallMethodCall(await n.params.claimAdminFee(s))),o.push(void 0),this},pendingReward(s){return r=r.then(async()=>a.addAppCallMethodCall(await n.params.pendingReward(s))),o.push(c=>n.decodeReturnValue("pendingReward(address)uint64",c)),this},transferOwnership(s){return r=r.then(async()=>a.addAppCallMethodCall(await n.params.transferOwnership(s))),o.push(void 0),this},get optIn(){return{optInToApplication:s=>(r=r.then(async()=>a.addAppCallMethodCall(await n.params.optIn.optInToApplication(s))),o.push(void 0),this),deposit:s=>(r=r.then(async()=>a.addAppCallMethodCall(await n.params.optIn.deposit(s))),o.push(void 0),this)}},get closeOut(){return{closeOutOfApplication:s=>(r=r.then(async()=>a.addAppCallMethodCall(await n.params.closeOut.closeOutOfApplication(s))),o.push(void 0),this)}},clearState(s){return r=r.then(()=>a.addAppCall(n.params.clearState(s))),this},addTransaction(s,c){return r=r.then(()=>a.addTransaction(s,c)),this},async composer(){return await r,a},async simulate(s){await r;let c=await(s?a.simulate(s):a.simulate());return{...c,returns:c.returns?.map((d,g)=>o[g]!==void 0?o[g](d):d.returnValue)}},async send(s){await r;let c=await a.send(s);return{...c,returns:c.returns?.map((d,g)=>o[g]!==void 0?o[g](d):d.returnValue)}}}}};var Ye=class{lpAmount;rewardDebt;constructor(n){this.lpAmount=n.lpAmount,this.rewardDebt=n.rewardDebt}get userLiquidity(){return P(this.lpAmount,3).toFixed()}earned(n,a){let r=Us(this.lpAmount,this.rewardDebt,n.accRewardPerShareP,n.p);return a?P(r,a).toFixed():r}};var xe=class{};var ii=class extends xe{constructor(a,r){super();this.algorand=a;this.api=r;a.setDefaultValidityWindow(100)}algorand;api;chainType="ALG";P=48;async buildRawTransactionClaimRewards(a){let r=a.accountAddress,o=BigInt(a.token.tokenAddress),s=BigInt(a.token.poolAddress),c=this.getPool(s),d=this.algorand.newGroup();d.addAppCallMethodCall(await c.params.claimRewards({args:[],sender:r,extraFee:An(1),assetReferences:[o]}));let{transactions:g}=await d.buildTransactions();return g=(0,cn.assignGroupID)(g),un(...g)}async buildRawTransactionDeposit(a){let r=a.accountAddress,o=BigInt(a.amount),s=BigInt(a.token.tokenAddress),c=BigInt(a.token.poolAddress),d=this.getPool(c),l=await Gi(c,r,this.algorand)?cn.OnApplicationComplete.NoOpOC:cn.OnApplicationComplete.OptInOC,A=this.algorand.newGroup(),u=await this.algorand.createTransaction.assetTransfer({assetId:s,amount:o,sender:r,receiver:d.appAddress});A.addAppCallMethodCall(await d.params.deposit({args:{assetTransferRef:u},sender:r,onComplete:l,extraFee:An(5)}));let{transactions:m}=await A.buildTransactions();return m=(0,cn.assignGroupID)(m),un(...m)}async buildRawTransactionWithdraw(a){let r=a.accountAddress,o=BigInt(a.amount),s=BigInt(a.token.tokenAddress),c=BigInt(a.token.poolAddress),d=this.getPool(c),g=this.algorand.newGroup();g.addAppCallMethodCall(await d.params.withdraw({args:{amountLp:o},sender:r,assetReferences:[s],extraFee:An(7)}));let{transactions:l}=await g.buildTransactions();return l=(0,cn.assignGroupID)(l),un(...l)}async getPoolInfoFromChain(a){let o=await this.getPool(BigInt(a.poolAddress)).state.global.getAll(),s=o.a?.toString(),c=o.d?.toString(),d=o.tokenBalance?.toString(),g=o.vUsdBalance?.toString(),l=o.totalSupply?.toString(),A=(0,cn.bytesToBigInt)(o.accRewardPerShareP?.asByteArray()??Uint8Array.from([])).toString();if(s&&c&&d&&g&&l&&A){let u=We({tokenBalance:d,vUsdBalance:g});return{aValue:s,dValue:c,tokenBalance:d,vUsdBalance:g,totalLpAmount:l,accRewardPerShareP:A,p:this.P,imbalance:u}}throw new f("Unable to pool info from chain")}async getUserBalanceInfo(a,r){let o=BigInt(r.poolAddress),s=this.getPool(o);try{let{balance:c,userRewardDebt:d}=await s.state.local(a).getAll();if(c!==void 0&&d!==void 0)return new Ye({lpAmount:c.toString(),rewardDebt:d.toString()})}catch{let g=(await this.algorand.account.getInformation(a)).appsLocalState;if(g&&!g.find(({id:A})=>A===o))return new Ye({lpAmount:"0",rewardDebt:"0"})}throw new f("Unable to get user balance")}getPool(a){return this.algorand.client.getTypedAppClientById(wr,{appId:a})}};var dn=require("web3");var ep={abi:[{inputs:[{internalType:"address",name:"_router",type:"address"},{internalType:"uint256",name:"_a",type:"uint256"},{internalType:"contract ERC20",name:"_token",type:"address"},{internalType:"uint16",name:"_feeShareBP",type:"uint16"},{internalType:"uint256",name:"_balanceRatioMinBP",type:"uint256"},{internalType:"string",name:"lpName",type:"string"},{internalType:"string",name:"lpSymbol",type:"string"}],stateMutability:"nonpayable",type:"constructor"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"owner",type:"address"},{indexed:!0,internalType:"address",name:"spender",type:"address"},{indexed:!1,internalType:"uint256",name:"value",type:"uint256"}],name:"Approval",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"user",type:"address"},{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"}],name:"Deposit",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"previousOwner",type:"address"},{indexed:!0,internalType:"address",name:"newOwner",type:"address"}],name:"OwnershipTransferred",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"user",type:"address"},{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"}],name:"RewardsClaimed",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"recipient",type:"address"},{indexed:!1,internalType:"address",name:"token",type:"address"},{indexed:!1,internalType:"uint256",name:"vUsdAmount",type:"uint256"},{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"},{indexed:!1,internalType:"uint256",name:"fee",type:"uint256"}],name:"SwappedFromVUsd",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"sender",type:"address"},{indexed:!1,internalType:"address",name:"token",type:"address"},{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"},{indexed:!1,internalType:"uint256",name:"vUsdAmount",type:"uint256"},{indexed:!1,internalType:"uint256",name:"fee",type:"uint256"}],name:"SwappedToVUsd",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"from",type:"address"},{indexed:!0,internalType:"address",name:"to",type:"address"},{indexed:!1,internalType:"uint256",name:"value",type:"uint256"}],name:"Transfer",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"user",type:"address"},{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"}],name:"Withdraw",type:"event"},{stateMutability:"payable",type:"fallback"},{inputs:[],name:"a",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"accRewardPerShareP",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"adjustTotalLpAmount",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"adminFeeAmount",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"adminFeeShareBP",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"owner",type:"address"},{internalType:"address",name:"spender",type:"address"}],name:"allowance",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"approve",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"account",type:"address"}],name:"balanceOf",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"balanceRatioMinBP",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"canDeposit",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"canWithdraw",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"claimAdminFee",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"claimRewards",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"d",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"decimals",outputs:[{internalType:"uint8",name:"",type:"uint8"}],stateMutability:"pure",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"subtractedValue",type:"uint256"}],name:"decreaseAllowance",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"amount",type:"uint256"}],name:"deposit",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"feeShareBP",outputs:[{internalType:"uint16",name:"",type:"uint16"}],stateMutability:"view",type:"function"},{inputs:[],name:"getPrice",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"x",type:"uint256"}],name:"getY",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"addedValue",type:"uint256"}],name:"increaseAllowance",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"name",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"},{inputs:[],name:"owner",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"user",type:"address"}],name:"pendingReward",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"renounceOwnership",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"reserves",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"router",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"_adminFeeShareBP",type:"uint256"}],name:"setAdminFeeShare",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"_balanceRatioMinBP",type:"uint256"}],name:"setBalanceRatioMinBP",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint16",name:"_feeShareBP",type:"uint16"}],name:"setFeeShare",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"_router",type:"address"}],name:"setRouter",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"_stopAuthority",type:"address"}],name:"setStopAuthority",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"startDeposit",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"startWithdraw",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"stopDeposit",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"stopWithdraw",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"user",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"uint256",name:"receiveAmountMin",type:"uint256"},{internalType:"bool",name:"zeroFee",type:"bool"}],name:"swapFromVUsd",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"user",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"bool",name:"zeroFee",type:"bool"}],name:"swapToVUsd",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"symbol",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"},{inputs:[],name:"token",outputs:[{internalType:"contract ERC20",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"tokenBalance",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"totalSupply",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"to",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"transfer",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"from",type:"address"},{internalType:"address",name:"to",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"transferFrom",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"newOwner",type:"address"}],name:"transferOwnership",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"user",type:"address"}],name:"userRewardDebt",outputs:[{internalType:"uint256",name:"amount",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"vUsdBalance",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"amountLp",type:"uint256"}],name:"withdraw",outputs:[],stateMutability:"nonpayable",type:"function"},{stateMutability:"payable",type:"receive"}]},ri=ep;var oi=class extends xe{constructor(a,r){super();this.web3=a;this.api=r}web3;api;chainType="EVM";P=52;async getUserBalanceInfo(a,r){let o;try{o=await Bi(this.getUserBalanceInfoByBatch(a,r),`Cannot get UserBalanceInfo for ${r.name} on ${r.chainSymbol}`,5e3)}catch{o=await ao(()=>this.getUserBalanceInfoPerProperty(a,r),`Cannot get UserBalanceInfo for ${r.name} on ${r.chainSymbol}`,5,2e3)}return o}async getPoolInfoFromChain(a){let r;try{r=await Bi(this.getPoolInfoByBatch(a),`Cannot get PoolInfo for ${a.name} on ${a.chainSymbol}`,5e3)}catch{r=await ao(()=>this.getPoolInfoPerProperty(a),`Cannot get PoolInfo for ${a.name} on ${a.chainSymbol}`,5,2e3)}return r}async getUserBalanceInfoByBatch(a,r){let o=new this.web3.eth.BatchRequest,s=this.getPoolContract(r.poolAddress),c=s.methods.userRewardDebt(a).encodeABI(),d=s.methods.balanceOf(a).encodeABI();o.add({method:"eth_call",params:[{to:r.poolAddress,data:c},"latest"]}),o.add({method:"eth_call",params:[{to:r.poolAddress,data:d},"latest"]});let[g,l]=await o.execute();if(g&&l&&!g.error&&!l.error)return new Ye({lpAmount:dn.Web3.utils.toBigInt(l.result).toString(),rewardDebt:dn.Web3.utils.toBigInt(g.result).toString()});throw new Error("Batched failed")}async getUserBalanceInfoPerProperty(a,r){let o=(await this.getPoolContract(r.poolAddress).methods.userRewardDebt(a).call()).toString(),s=(await this.getPoolContract(r.poolAddress).methods.balanceOf(a).call()).toString();return new Ye({lpAmount:s,rewardDebt:o})}async getPoolInfoByBatch(a){let r=new this.web3.eth.BatchRequest,o=this.getPoolContract(a.poolAddress),s=o.methods.a().encodeABI(),c=o.methods.d().encodeABI(),d=o.methods.tokenBalance().encodeABI(),g=o.methods.vUsdBalance().encodeABI(),l=o.methods.totalSupply().encodeABI(),A=o.methods.accRewardPerShareP().encodeABI();r.add({method:"eth_call",params:[{to:a.poolAddress,data:s},"latest"]}),r.add({method:"eth_call",params:[{to:a.poolAddress,data:c},"latest"]}),r.add({method:"eth_call",params:[{to:a.poolAddress,data:d},"latest"]}),r.add({method:"eth_call",params:[{to:a.poolAddress,data:g},"latest"]}),r.add({method:"eth_call",params:[{to:a.poolAddress,data:l},"latest"]}),r.add({method:"eth_call",params:[{to:a.poolAddress,data:A},"latest"]});let[u,m,y,v,C,R]=await r.execute();if(u&&m&&y&&v&&C&&R&&!u.error&&!m.error&&!y.error&&!v.error&&!C.error&&!R.error){let Y=dn.Web3.utils.toBigInt(y.result).toString(),h=dn.Web3.utils.toBigInt(v.result).toString(),F=We({tokenBalance:Y,vUsdBalance:h});return{aValue:dn.Web3.utils.toBigInt(u.result).toString(),dValue:dn.Web3.utils.toBigInt(m.result).toString(),tokenBalance:Y,vUsdBalance:h,totalLpAmount:dn.Web3.utils.toBigInt(C.result).toString(),accRewardPerShareP:dn.Web3.utils.toBigInt(R.result).toString(),p:this.P,imbalance:F}}throw new Error("Batched failed")}async getPoolInfoPerProperty(a){let r=this.getPoolContract(a.poolAddress),o=(await r.methods.a().call()).toString(),s=(await r.methods.d().call()).toString(),c=(await r.methods.tokenBalance().call()).toString(),d=(await r.methods.vUsdBalance().call()).toString(),g=(await r.methods.totalSupply().call()).toString(),l=(await r.methods.accRewardPerShareP().call()).toString(),A=We({tokenBalance:c,vUsdBalance:d});return{aValue:o,dValue:s,tokenBalance:c,vUsdBalance:d,totalLpAmount:g,accRewardPerShareP:l,p:this.P,imbalance:A}}async buildRawTransactionDeposit(a){return Promise.resolve({...this.buildTxParams(a),data:this.getPoolContract(a.token.poolAddress).methods.deposit(a.amount).encodeABI()})}async buildRawTransactionWithdraw(a){return Promise.resolve({...this.buildTxParams(a),data:this.getPoolContract(a.token.poolAddress).methods.withdraw(a.amount).encodeABI()})}async buildRawTransactionClaimRewards(a){return Promise.resolve({...this.buildTxParams(a),data:this.getPoolContract(a.token.poolAddress).methods.claimRewards().encodeABI()})}buildTxParams(a){return{from:a.accountAddress,to:a.token.poolAddress,value:"0"}}getPoolContract(a){return new this.web3.eth.Contract(ri.abi,a)}};var Wr=class{constructor(n,a,r,o){this.api=n;this.nodeRpcUrlsConfig=a;this.params=r;this.tokenService=o}api;nodeRpcUrlsConfig;params;tokenService;async approve(n,a){if(a){let r=n,o=a;return this.tokenService.buildRawTransactionApprove({...o,spender:o.token.poolAddress},r)}else{let r=n;return this.tokenService.buildRawTransactionApprove({...r,spender:r.token.poolAddress})}}async deposit(n,a){return D(n.amount),O("amount",n.amount,n.token.decimals),n.amount=j(n.amount,n.token.decimals).toFixed(),ga(n.token.chainSymbol,this.api,this.nodeRpcUrlsConfig,this.params,a).buildRawTransactionDeposit(n)}async withdraw(n,a){return D(n.amount),O("amount",n.amount,n.token.decimals),n.amount=j(n.amount,3).toFixed(),ga(n.token.chainSymbol,this.api,this.nodeRpcUrlsConfig,this.params,a).buildRawTransactionWithdraw(n)}async claimRewards(n,a){return ga(n.token.chainSymbol,this.api,this.nodeRpcUrlsConfig,this.params,a).buildRawTransactionClaimRewards(n)}};var gn=require("@coral-xyz/anchor"),yg=require("@solana/spl-token"),Nt=require("@solana/web3.js");var Nr=class extends xe{constructor(a,r){super();this.solanaRpcUrl=a;this.api=r}solanaRpcUrl;api;chainType="SOLANA";P=48;async getUserBalanceInfo(a,r){let o=this.buildAnchorProvider(a),s=this.getBridge(r.bridgeAddress,o),c=new Nt.PublicKey(r.poolAddress),d=await s.account.pool.fetch(c);try{let g=await Ao(new Nt.PublicKey(a),d.mint,s.programId),{lpAmount:l,rewardDebt:A}=await s.account.userDeposit.fetch(g);return new Ye({lpAmount:l.toString(),rewardDebt:A.toString()})}catch{return new Ye({lpAmount:"0",rewardDebt:"0"})}}async getPoolInfoFromChain(a){let r=this.buildAnchorProvider(a.bridgeAddress),o=await this.getBridge(a.bridgeAddress,r).account.pool.fetch(a.poolAddress),s=o.vUsdBalance.toString(),c=o.tokenBalance.toString(),d=We({tokenBalance:c,vUsdBalance:s});return{dValue:o.d.toString(),aValue:o.a.toString(),totalLpAmount:o.totalLpAmount.toString(),vUsdBalance:s,tokenBalance:c,accRewardPerShareP:o.accRewardPerShareP.toString(),p:this.P,imbalance:d}}async buildRawTransactionDeposit(a){let{bridge:r,accounts:o,preInstructions:s}=await this.prepareDataForTransaction(a),c=await r.methods.deposit(new gn.BN(a.amount)).accounts(o).preInstructions(s).transaction();return c.recentBlockhash=(await this.buildAnchorProvider(a.accountAddress).connection.getLatestBlockhash()).blockhash,c.feePayer=new Nt.PublicKey(a.accountAddress),await On(c,a.txFeeParams,this.solanaRpcUrl),c}async buildRawTransactionWithdraw(a){let{bridge:r,accounts:o,preInstructions:s}=await this.prepareDataForTransaction(a),c=await r.methods.withdraw(new gn.BN(a.amount)).accounts(o).preInstructions(s).transaction();return c.recentBlockhash=(await this.buildAnchorProvider(a.accountAddress).connection.getLatestBlockhash()).blockhash,c.feePayer=new Nt.PublicKey(a.accountAddress),await On(c,a.txFeeParams,this.solanaRpcUrl),c}async buildRawTransactionClaimRewards(a){let{bridge:r,accounts:o,preInstructions:s}=await this.prepareDataForTransaction(a),c=await r.methods.claimRewards().accounts(o).preInstructions(s).transaction();return c.recentBlockhash=(await this.buildAnchorProvider(a.accountAddress).connection.getLatestBlockhash()).blockhash,c.feePayer=new Nt.PublicKey(a.accountAddress),await On(c,a.txFeeParams,this.solanaRpcUrl),c}async prepareDataForTransaction(a){let r=this.buildAnchorProvider(a.accountAddress),o=this.getBridge(a.token.bridgeAddress,r),{accounts:s,preInstructions:c}=await this._getLPTransactionData(o,a.token.poolAddress,a.accountAddress,r);return{bridge:o,accounts:s,preInstructions:c}}getBridge(a,r){return new gn.Program({...mn,address:a},r)}buildAnchorProvider(a){let r=new Nt.Connection(this.solanaRpcUrl,"confirmed"),o=new Nt.PublicKey(a);return new gn.AnchorProvider(r,{publicKey:o},{preflightCommitment:"confirmed",commitment:"confirmed"})}async _getLPTransactionData(a,r,o,s){let c=new Nt.PublicKey(o),d=await lt(a.programId),g=await pn(a.programId),l=new Nt.PublicKey(r),u=(await a.account.pool.fetch(l)).mint,m=_e(c,u),y=await Kt(u,a.programId),v=await Ao(c,u,a.programId),C=[gn.web3.ComputeBudgetProgram.setComputeUnitLimit({units:1e6})];try{await zn(m,s)}catch{let h=(0,yg.createAssociatedTokenAccountInstruction)(c,m,c,u);C.push(h)}try{await a.account.userDeposit.fetch(v)}catch{let h=await a.methods.initDepositAccount().accountsPartial({mint:u,user:c,userDeposit:v}).instruction();C.push(h)}return{accounts:{mint:u,user:c,config:d,pool:l,bridgeAuthority:g,userDeposit:v,userToken:m,bridgeToken:y},preInstructions:C}}};var CT=require("@stellar/stellar-sdk");var e=require("@stellar/stellar-sdk"),tp=e.contract.Spec,np=e.contract.Client;var Fr=class extends np{constructor(a){super(new tp(["AAAAAAAAAAAAAAAKaW5pdGlhbGl6ZQAAAAAABwAAAAAAAAAFYWRtaW4AAAAAAAATAAAAAAAAAAZicmlkZ2UAAAAAABMAAAAAAAAAAWEAAAAAAAAKAAAAAAAAAAV0b2tlbgAAAAAAABMAAAAAAAAADGZlZV9zaGFyZV9icAAAAAoAAAAAAAAAFGJhbGFuY2VfcmF0aW9fbWluX2JwAAAACgAAAAAAAAASYWRtaW5fZmVlX3NoYXJlX2JwAAAAAAAKAAAAAQAAA+kAAAPtAAAAAAAAAAM=","AAAAAAAAAAAAAAAHZGVwb3NpdAAAAAACAAAAAAAAAAZzZW5kZXIAAAAAABMAAAAAAAAABmFtb3VudAAAAAAACgAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAId2l0aGRyYXcAAAACAAAAAAAAAAZzZW5kZXIAAAAAABMAAAAAAAAACWFtb3VudF9scAAAAAAAAAoAAAABAAAD6QAAA+0AAAAAAAAAAw==","AAAAAAAAAAAAAAANc3dhcF90b192X3VzZAAAAAAAAAMAAAAAAAAABHVzZXIAAAATAAAAAAAAAAZhbW91bnQAAAAAAAoAAAAAAAAACHplcm9fZmVlAAAAAQAAAAEAAAPpAAAACgAAAAM=","AAAAAAAAAAAAAAAPc3dhcF9mcm9tX3ZfdXNkAAAAAAQAAAAAAAAABHVzZXIAAAATAAAAAAAAAAt2dXNkX2Ftb3VudAAAAAAKAAAAAAAAABJyZWNlaXZlX2Ftb3VudF9taW4AAAAAAAoAAAAAAAAACHplcm9fZmVlAAAAAQAAAAEAAAPpAAAACgAAAAM=","AAAAAAAAAAAAAAANY2xhaW1fcmV3YXJkcwAAAAAAAAEAAAAAAAAABnNlbmRlcgAAAAAAEwAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAdgYWRtaW5gAAAAAA1zZXRfZmVlX3NoYXJlAAAAAAAAAQAAAAAAAAAMZmVlX3NoYXJlX2JwAAAACgAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAWYWRqdXN0X3RvdGFsX2xwX2Ftb3VudAAAAAAAAAAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAYc2V0X2JhbGFuY2VfcmF0aW9fbWluX2JwAAAAAQAAAAAAAAAUYmFsYW5jZV9yYXRpb19taW5fYnAAAAAKAAAAAQAAA+kAAAPtAAAAAAAAAAM=","AAAAAAAAAAAAAAAMc3RvcF9kZXBvc2l0AAAAAAAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAANc3RhcnRfZGVwb3NpdAAAAAAAAAAAAAABAAAD6QAAA+0AAAAAAAAAAw==","AAAAAAAAAAAAAAANc3RvcF93aXRoZHJhdwAAAAAAAAAAAAABAAAD6QAAA+0AAAAAAAAAAw==","AAAAAAAAAAAAAAAOc3RhcnRfd2l0aGRyYXcAAAAAAAAAAAABAAAD6QAAA+0AAAAAAAAAAw==","AAAAAAAAAAAAAAASc2V0X3N0b3BfYXV0aG9yaXR5AAAAAAABAAAAAAAAAA5zdG9wX2F1dGhvcml0eQAAAAAAEwAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAKc2V0X2JyaWRnZQAAAAAAAQAAAAAAAAAGYnJpZGdlAAAAAAATAAAAAQAAA+kAAAPtAAAAAAAAAAM=","AAAAAAAAAAAAAAAJc2V0X2FkbWluAAAAAAAAAQAAAAAAAAAJbmV3X2FkbWluAAAAAAAAEwAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAATc2V0X2FkbWluX2ZlZV9zaGFyZQAAAAABAAAAAAAAABJhZG1pbl9mZWVfc2hhcmVfYnAAAAAAAAoAAAABAAAD6QAAA+0AAAAAAAAAAw==","AAAAAAAAAAAAAAAPY2xhaW1fYWRtaW5fZmVlAAAAAAAAAAABAAAD6QAAA+0AAAAAAAAAAw==","AAAAAAAAAAZgdmlld2AAAAAAAA5wZW5kaW5nX3Jld2FyZAAAAAAAAQAAAAAAAAAEdXNlcgAAABMAAAABAAAD6QAAAAoAAAAD","AAAAAAAAAAAAAAAIZ2V0X3Bvb2wAAAAAAAAAAQAAA+kAAAfQAAAABFBvb2wAAAAD","AAAAAAAAAAAAAAAJZ2V0X2FkbWluAAAAAAAAAAAAAAEAAAPpAAAAEwAAAAM=","AAAAAAAAAAAAAAASZ2V0X3N0b3BfYXV0aG9yaXR5AAAAAAAAAAAAAQAAA+kAAAATAAAAAw==","AAAAAAAAAAAAAAAKZ2V0X2JyaWRnZQAAAAAAAAAAAAEAAAPpAAAAEwAAAAM=","AAAAAAAAAAAAAAAQZ2V0X3VzZXJfZGVwb3NpdAAAAAEAAAAAAAAABHVzZXIAAAATAAAAAQAAA+kAAAfQAAAAC1VzZXJEZXBvc2l0AAAAAAM=","AAAAAAAAAAAAAAAHdXBncmFkZQAAAAABAAAAAAAAAA1uZXdfd2FzbV9oYXNoAAAAAAAD7gAAACAAAAABAAAD6QAAA+0AAAAAAAAAAw==","AAAAAQAAAAAAAAAAAAAAD1N3YXBwZWRGcm9tVlVzZAAAAAAFAAAAAAAAAAZhbW91bnQAAAAAAAoAAAAAAAAAA2ZlZQAAAAAKAAAAAAAAAAlyZWNpcGllbnQAAAAAAAATAAAAAAAAAAV0b2tlbgAAAAAAABMAAAAAAAAAC3Z1c2RfYW1vdW50AAAAAAo=","AAAAAQAAAAAAAAAAAAAADVN3YXBwZWRUb1ZVc2QAAAAAAAAFAAAAAAAAAAZhbW91bnQAAAAAAAoAAAAAAAAAA2ZlZQAAAAAKAAAAAAAAAAZzZW5kZXIAAAAAABMAAAAAAAAABXRva2VuAAAAAAAAEwAAAAAAAAALdnVzZF9hbW91bnQAAAAACg==","AAAAAQAAAAAAAAAAAAAAB0RlcG9zaXQAAAAAAgAAAAAAAAAGYW1vdW50AAAAAAAKAAAAAAAAAAR1c2VyAAAAEw==","AAAAAQAAAAAAAAAAAAAACFdpdGhkcmF3AAAAAgAAAAAAAAAGYW1vdW50AAAAAAAKAAAAAAAAAAR1c2VyAAAAEw==","AAAAAQAAAAAAAAAAAAAADlJld2FyZHNDbGFpbWVkAAAAAAACAAAAAAAAAAZhbW91bnQAAAAAAAoAAAAAAAAABHVzZXIAAAAT","AAAAAQAAAAAAAAAAAAAABkJyaWRnZQAAAAAAAQAAAAAAAAABMAAAAAAAABM=","AAAAAgAAAAAAAAAAAAAAB0RhdGFLZXkAAAAAAQAAAAEAAAAAAAAAC1VzZXJEZXBvc2l0AAAAAAEAAAAT","AAAAAQAAAAAAAAAAAAAABFBvb2wAAAAPAAAAAAAAAAFhAAAAAAAACgAAAAAAAAAWYWNjX3Jld2FyZF9wZXJfc2hhcmVfcAAAAAAACgAAAAAAAAAQYWRtaW5fZmVlX2Ftb3VudAAAAAoAAAAAAAAAEmFkbWluX2ZlZV9zaGFyZV9icAAAAAAACgAAAAAAAAAUYmFsYW5jZV9yYXRpb19taW5fYnAAAAAKAAAAAAAAAAtjYW5fZGVwb3NpdAAAAAABAAAAAAAAAAxjYW5fd2l0aGRyYXcAAAABAAAAAAAAAAFkAAAAAAAACgAAAAAAAAAIZGVjaW1hbHMAAAAEAAAAAAAAAAxmZWVfc2hhcmVfYnAAAAAKAAAAAAAAAAhyZXNlcnZlcwAAAAoAAAAAAAAABXRva2VuAAAAAAAAEwAAAAAAAAANdG9rZW5fYmFsYW5jZQAAAAAAAAoAAAAAAAAAD3RvdGFsX2xwX2Ftb3VudAAAAAAKAAAAAAAAAA12X3VzZF9iYWxhbmNlAAAAAAAACg==","AAAAAQAAAAAAAAAAAAAAC1VzZXJEZXBvc2l0AAAAAAIAAAAAAAAACWxwX2Ftb3VudAAAAAAAAAoAAAAAAAAAC3Jld2FyZF9kZWJ0AAAAAAo=","AAAAAQAAAAAAAAAAAAAABUFkbWluAAAAAAAAAQAAAAAAAAABMAAAAAAAABM=","AAAAAQAAAAAAAAAAAAAAEEdhc09yYWNsZUFkZHJlc3MAAAABAAAAAAAAAAEwAAAAAAAAEw==","AAAAAQAAAAAAAAAAAAAACEdhc1VzYWdlAAAAAQAAAAAAAAABMAAAAAAAA+wAAAAEAAAACg==","AAAAAQAAAAAAAAAAAAAAC05hdGl2ZVRva2VuAAAAAAEAAAAAAAAAATAAAAAAAAAT","AAAAAQAAAAAAAAAAAAAADVN0b3BBdXRob3JpdHkAAAAAAAABAAAAAAAAAAEwAAAAAAAAEw==","AAAABAAAAAAAAAAAAAAABUVycm9yAAAAAAAAKAAAAAAAAAANVW5pbXBsZW1lbnRlZAAAAAAAAAAAAAAAAAAAC0luaXRpYWxpemVkAAAAAAEAAAAAAAAADVVuaW5pdGlhbGl6ZWQAAAAAAAACAAAAAAAAAAxVbmF1dGhvcml6ZWQAAAADAAAAAAAAAApJbnZhbGlkQXJnAAAAAAAEAAAAAAAAAA5JbnZhbGlkQ2hhaW5JZAAAAAAABQAAAAAAAAATSW52YWxpZE90aGVyQ2hhaW5JZAAAAAAGAAAAAAAAAA5HYXNVc2FnZU5vdFNldAAAAAAABwAAAAAAAAANQnJva2VuQWRkcmVzcwAAAAAAAAgAAAAAAAAACE5vdEZvdW5kAAAACQAAAAAAAAAYVG9rZW5JbnN1ZmZpY2llbnRCYWxhbmNlAAAACgAAAAAAAAAKQ2FzdEZhaWxlZAAAAAAACwAAAAAAAAAMVTI1Nk92ZXJmbG93AAAADAAAAAAAAAAKWmVyb0Ftb3VudAAAAAAAZwAAAAAAAAAMUG9vbE92ZXJmbG93AAAAaAAAAAAAAAALWmVyb0NoYW5nZXMAAAAAaQAAAAAAAAARUmVzZXJ2ZXNFeGhhdXN0ZWQAAAAAAABqAAAAAAAAABpJbnN1ZmZpY2llbnRSZWNlaXZlZEFtb3VudAAAAAAAawAAAAAAAAAUQmFsYW5jZVJhdGlvRXhjZWVkZWQAAABsAAAAAAAAAAlGb3JiaWRkZW4AAAAAAABtAAAAAAAAABlVbmF1dGhvcml6ZWRTdG9wQXV0aG9yaXR5AAAAAAAAywAAAAAAAAAOU3dhcFByb2hpYml0ZWQAAAAAAMwAAAAAAAAAEkFtb3VudFRvb0xvd0ZvckZlZQAAAAAAzQAAAAAAAAAWQnJpZGdlVG9UaGVaZXJvQWRkcmVzcwAAAAAAzgAAAAAAAAAORW1wdHlSZWNpcGllbnQAAAAAAM8AAAAAAAAAE1NvdXJjZU5vdFJlZ2lzdGVyZWQAAAAA0AAAAAAAAAAVV3JvbmdEZXN0aW5hdGlvbkNoYWluAAAAAAAA0QAAAAAAAAATVW5rbm93bkFub3RoZXJDaGFpbgAAAADSAAAAAAAAABFUb2tlbnNBbHJlYWR5U2VudAAAAAAAANMAAAAAAAAAEE1lc3NhZ2VQcm9jZXNzZWQAAADUAAAAAAAAAAxOb3RFbm91Z2hGZWUAAADWAAAAAAAAAAlOb01lc3NhZ2UAAAAAAADXAAAAAAAAAA1Ob1JlY2VpdmVQb29sAAAAAAAA2AAAAAAAAAAGTm9Qb29sAAAAAADZAAAAAAAAABNVbmtub3duQW5vdGhlclRva2VuAAAAANoAAAAAAAAAD1dyb25nQnl0ZUxlbmd0aAAAAAEsAAAAAAAAAApIYXNNZXNzYWdlAAAAAAEtAAAAAAAAABdJbnZhbGlkUHJpbWFyeVNpZ25hdHVyZQAAAAEuAAAAAAAAABlJbnZhbGlkU2Vjb25kYXJ5U2lnbmF0dXJlAAAAAAABLwAAAAAAAAARTm9HYXNEYXRhRm9yQ2hhaW4AAAAAAAGQ"]),a);this.options=a}options;fromJSON={initialize:this.txFromJSON,deposit:this.txFromJSON,withdraw:this.txFromJSON,swap_to_v_usd:this.txFromJSON,swap_from_v_usd:this.txFromJSON,claim_rewards:this.txFromJSON,set_fee_share:this.txFromJSON,adjust_total_lp_amount:this.txFromJSON,set_balance_ratio_min_bp:this.txFromJSON,stop_deposit:this.txFromJSON,start_deposit:this.txFromJSON,stop_withdraw:this.txFromJSON,start_withdraw:this.txFromJSON,set_stop_authority:this.txFromJSON,set_bridge:this.txFromJSON,set_admin:this.txFromJSON,set_admin_fee_share:this.txFromJSON,claim_admin_fee:this.txFromJSON,pending_reward:this.txFromJSON,get_pool:this.txFromJSON,get_admin:this.txFromJSON,get_stop_authority:this.txFromJSON,get_bridge:this.txFromJSON,get_user_deposit:this.txFromJSON,upgrade:this.txFromJSON}};var Gr=class extends xe{constructor(a,r,o){super();this.nodeRpcUrlsConfig=a;this.params=r;this.api=o}nodeRpcUrlsConfig;params;api;chainType="SRB";P=48;async getUserBalanceInfo(a,r){let s=await this.getContract(r.poolAddress).get_user_deposit({user:a});if(Qn(s))throw new f;let c=Dn(s);if(!c)throw new f;let d=c.unwrap();return new Ye({lpAmount:d.lp_amount.toString(),rewardDebt:d.reward_debt.toString()})}async getPoolInfoFromChain(a){let o=await this.getContract(a.poolAddress).get_pool();if(Qn(o))throw new f;let s=Dn(o);if(!s)throw new f;let c=s.unwrap();return{aValue:c.a.toString(),accRewardPerShareP:c.acc_reward_per_share_p.toString(),dValue:c.d.toString(),tokenBalance:c.token_balance.toString(),p:this.P,totalLpAmount:c.total_lp_amount.toString(),vUsdBalance:c.v_usd_balance.toString(),imbalance:We({tokenBalance:c.token_balance.toString(),vUsdBalance:c.v_usd_balance.toString()})}}async buildRawTransactionDeposit(a){let r=this.getContract(a.token.poolAddress,a.accountAddress),o=await Et(this.nodeRpcUrlsConfig.getNodeRpcUrl("SRB"));return(await r.deposit({sender:a.accountAddress,amount:BigInt(a.amount)},{fee:o})).toXDR()}async buildRawTransactionWithdraw(a){let r=this.getContract(a.token.poolAddress,a.accountAddress),o=await Et(this.nodeRpcUrlsConfig.getNodeRpcUrl("SRB"));return(await r.withdraw({sender:a.accountAddress,amount_lp:BigInt(a.amount)},{fee:o})).toXDR()}async buildRawTransactionClaimRewards(a){let r=this.getContract(a.token.poolAddress,a.accountAddress),o=await Et(this.nodeRpcUrlsConfig.getNodeRpcUrl("SRB"));return(await r.claim_rewards({sender:a.accountAddress},{fee:o})).toXDR()}getContract(a,r){let o={publicKey:r,contractId:a,networkPassphrase:this.params.sorobanNetworkPassphrase,rpcUrl:this.nodeRpcUrlsConfig.getNodeRpcUrl("SRB")};return new Fr(o)}};var fn=require("@clarigen/core"),Cg=require("@stacks/network"),De=require("@stacks/transactions"),Ig=require("big.js");var Zr=class extends xe{constructor(a,r,o){super();this.nodeRpcUrl=a;this.params=r;this.api=o;let s=(0,Cg.createNetwork)({network:this.params.stxIsTestnet?"testnet":"mainnet",client:{baseUrl:this.nodeRpcUrl},apiKey:this.params.stxHeroApiKey});this.client=new fn.ClarigenClient(s,this.params.stxHeroApiKey)}nodeRpcUrl;params;api;chainType="STX";P=48;A="20";client;async getUserBalanceInfo(a,r){let o=(0,fn.contractFactory)(At.pool,r.poolAddress),s=await this.client.ro(o.getLpBalance({user:a})),c=await this.client.ro(o.getUserRewardDebt({user:a}));return new Ye({lpAmount:s.toString(),rewardDebt:c.toString()})}async getPoolInfoFromChain(a){let r=(0,fn.contractFactory)(At.pool,a.poolAddress),[o,s,c,d,g]=await Promise.all([this.client.ro(r.getD()),this.client.ro(r.getTokenBalance()),this.client.ro(r.getVusdBalance()),this.client.ro(r.getLpTotalSupply()),this.client.ro(r.getAccRewardPerShareP())]),l=o.toString(),A=s.toString(),u=c.toString(),m=d.toString(),y=g.toString();if(l&&A&&u&&m&&y){let v=We({tokenBalance:A,vUsdBalance:u});return{aValue:this.A,dValue:l,tokenBalance:A,vUsdBalance:u,totalLpAmount:m,accRewardPerShareP:y,p:this.P,imbalance:v}}throw new f("Unable to pool info from chain")}async buildRawTransactionDeposit(a){let r=(0,fn.contractFactory)(At.pool,a.token.poolAddress),{contractAddress:o,contractName:s,functionName:c,functionArgs:d}=r.deposit({amount:BigInt(a.amount),ftRef:a.token.tokenAddress}),g=(0,De.makeRandomPrivKey)(),l=(0,De.privateKeyToPublic)(g),A=jt(a.amount,"lte",a.accountAddress,a.token.tokenAddress,_t(a.token)),u=jt(0,"gte",a.token.poolAddress,a.token.tokenAddress,_t(a.token)),m={contractAddress:o,contractName:s,functionName:c,functionArgs:d,publicKey:l,validateWithAbi:!0,network:this.client.network,postConditions:[A,u],postConditionMode:De.PostConditionMode.Deny};return(await(0,De.makeUnsignedContractCall)(m)).serialize()}async buildRawTransactionWithdraw(a){let r=(0,fn.contractFactory)(At.pool,a.token.poolAddress),{contractAddress:o,contractName:s,functionName:c,functionArgs:d}=r.withdraw({amountLp:BigInt(a.amount),ftRef:a.token.tokenAddress}),g=(0,De.makeRandomPrivKey)(),l=(0,De.privateKeyToPublic)(g),A=jt(Ke(a.amount,a.token.decimals).toFixed(0,Ig.Big.roundDown),"gte",a.token.poolAddress,a.token.tokenAddress,_t(a.token)),u={contractAddress:o,contractName:s,functionName:c,functionArgs:d,publicKey:l,validateWithAbi:!0,network:this.client.network,postConditions:[A],postConditionMode:De.PostConditionMode.Deny};return(await(0,De.makeUnsignedContractCall)(u)).serialize()}async buildRawTransactionClaimRewards(a){let r=(0,fn.contractFactory)(At.pool,a.token.poolAddress),{contractAddress:o,contractName:s,functionName:c,functionArgs:d}=r.claimRewards({ftRef:a.token.tokenAddress}),g=(0,De.makeRandomPrivKey)(),l=(0,De.privateKeyToPublic)(g),A=jt(0,"gte",a.token.poolAddress,a.token.tokenAddress,_t(a.token)),u={contractAddress:o,contractName:s,functionName:c,functionArgs:d,publicKey:l,validateWithAbi:!0,network:this.client.network,postConditions:[A],postConditionMode:De.PostConditionMode.Deny};return(await(0,De.makeUnsignedContractCall)(u)).serialize()}};function si(i){return i=X(i),i.startsWith("0x2::balance::Balance<")}var Qe=class i{__StructClass=!0;static $typeName="0x2::balance::Balance";static $numTypeParams=1;static $isPhantom=[!0];$typeName=i.$typeName;$fullTypeName;$typeArgs;$isPhantom=i.$isPhantom;value;constructor(n,a){this.$fullTypeName=ie(i.$typeName,...n),this.$typeArgs=n,this.value=a.value}static reified(n){let a=i.bcs;return{get typeName(){return i.$typeName},get fullTypeName(){return ie(i.$typeName,M(n))},get typeArgs(){return[M(n)]},isPhantom:i.$isPhantom,reifiedTypeArgs:[n],fromFields:r=>i.fromFields(n,r),fromFieldsWithTypes:r=>i.fromFieldsWithTypes(n,r),fromBcs:r=>i.fromFields(n,a.parse(r)),bcs:a,fromJSONField:r=>i.fromJSONField(n,r),fromJSON:r=>i.fromJSON(n,r),fromCoreObject:r=>i.fromCoreObject(n,r),fromSuiParsedData:r=>i.fromSuiParsedData(n,r),fromSuiObjectData:r=>i.fromSuiObjectData(n,r),fetch:async(r,o)=>i.fetch(r,n,o),new:r=>new i([M(n)],r),kind:"StructClassReified"}}static get r(){return i.reified}static phantom(n){return he(i.reified(n))}static get p(){return i.phantom}static instantiateBcs(){return B.struct("Balance",{value:B.u64()})}static cachedBcs=null;static get bcs(){return i.cachedBcs||(i.cachedBcs=i.instantiateBcs()),i.cachedBcs}static fromFields(n,a){return i.reified(n).new({value:ee("u64",a.value)})}static fromFieldsWithTypes(n,a){if(!si(a.type))throw new Error("not a Balance type");return Jt(a,[n]),i.reified(n).new({value:Q("u64",a.fields.value)})}static fromBcs(n,a){return i.fromFields(n,i.bcs.parse(a))}toJSONField(){return{value:this.value.toString()}}toJSON(){return{$typeName:this.$typeName,$typeArgs:this.$typeArgs,...this.toJSONField()}}static fromJSONField(n,a){return i.reified(n).new({value:K("u64",a.value)})}static fromJSON(n,a){if(a.$typeName!==i.$typeName)throw new Error(`not a Balance json object: expected '${i.$typeName}' but got '${a.$typeName}'`);return wt(ie(i.$typeName,M(n)),a.$typeArgs,[n]),i.fromJSONField(n,a)}static fromCoreObject(n,a){if(!si(a.type))throw new Error(`object at ${a.objectId} is not a Balance object`);let r=me(a.type).typeArgs;if(r.length!==1)throw new Error(`type argument mismatch: expected 1 type arguments but got '${r.length}'`);for(let o=0;o<1;o++){let s=X(r[o]),c=X(M([n][o]));if(s!==c)throw new Error(`type argument mismatch at position ${o}: expected '${c}' but got '${s}'`)}return i.fromBcs(n,a.content)}static fromSuiParsedData(n,a){if(a.dataType!=="moveObject")throw new Error("not an object");if(!si(a.type))throw new Error(`object at ${a.fields.id} is not a Balance object`);return i.fromFieldsWithTypes(n,a)}static fromSuiObjectData(n,a){if(a.bcs){if(a.bcs.dataType!=="moveObject"||!si(a.bcs.type))throw new Error("object at is not a Balance object");let r=me(a.bcs.type).typeArgs;if(r.length!==1)throw new Error(`type argument mismatch: expected 1 type arguments but got '${r.length}'`);for(let o=0;o<1;o++){let s=X(r[o]),c=X(M([n][o]));if(s!==c)throw new Error(`type argument mismatch at position ${o}: expected '${c}' but got '${s}'`)}return i.fromBcs(n,(0,de.fromBase64)(a.bcs.bcsBytes))}if(a.content)return i.fromSuiParsedData(n,a.content);throw new Error("Both `bcs` and `content` fields are missing from the data. Include `showBcs` or `showContent` in the request.")}static async fetch(n,a,r){let{object:o}=await n.core.getObject({objectId:r,include:{content:!0}});if(!si(o.type))throw new Error(`object at id ${r} is not a Balance object`);let s=me(o.type).typeArgs;if(s.length!==1)throw new Error(`type argument mismatch: expected 1 type arguments but got '${s.length}'`);for(let c=0;c<1;c++){let d=X(s[c]),g=X(M([a][c]));if(d!==g)throw new Error(`type argument mismatch at position ${c}: expected '${g}' but got '${d}'`)}return i.fromBcs(a,o.content)}};function ci(i){return i=X(i),i.startsWith(`${dt("bridge","pool_rewards::PoolRewards")}::pool_rewards::PoolRewards<`)}var Pn=class i{__StructClass=!0;static get $typeName(){return`${dt("bridge","pool_rewards::PoolRewards")}::pool_rewards::PoolRewards`}static $numTypeParams=1;static $isPhantom=[!0];$typeName=i.$typeName;$fullTypeName;$typeArgs;$isPhantom=i.$isPhantom;accRewardPerShareP;adminFeeShareBp;adminFee;rewards;lpSupply;constructor(n,a){this.$fullTypeName=ie(i.$typeName,...n),this.$typeArgs=n,this.accRewardPerShareP=a.accRewardPerShareP,this.adminFeeShareBp=a.adminFeeShareBp,this.adminFee=a.adminFee,this.rewards=a.rewards,this.lpSupply=a.lpSupply}static reified(n){let a=i.bcs;return{get typeName(){return i.$typeName},get fullTypeName(){return ie(i.$typeName,M(n))},get typeArgs(){return[M(n)]},isPhantom:i.$isPhantom,reifiedTypeArgs:[n],fromFields:r=>i.fromFields(n,r),fromFieldsWithTypes:r=>i.fromFieldsWithTypes(n,r),fromBcs:r=>i.fromFields(n,a.parse(r)),bcs:a,fromJSONField:r=>i.fromJSONField(n,r),fromJSON:r=>i.fromJSON(n,r),fromCoreObject:r=>i.fromCoreObject(n,r),fromSuiParsedData:r=>i.fromSuiParsedData(n,r),fromSuiObjectData:r=>i.fromSuiObjectData(n,r),fetch:async(r,o)=>i.fetch(r,n,o),new:r=>new i([M(n)],r),kind:"StructClassReified"}}static get r(){return i.reified}static phantom(n){return he(i.reified(n))}static get p(){return i.phantom}static instantiateBcs(){return B.struct("PoolRewards",{acc_reward_per_share_p:B.u128(),admin_fee_share_bp:B.u64(),admin_fee:Qe.bcs,rewards:Qe.bcs,lp_supply:B.u64()})}static cachedBcs=null;static get bcs(){return i.cachedBcs||(i.cachedBcs=i.instantiateBcs()),i.cachedBcs}static fromFields(n,a){return i.reified(n).new({accRewardPerShareP:ee("u128",a.acc_reward_per_share_p),adminFeeShareBp:ee("u64",a.admin_fee_share_bp),adminFee:ee(Qe.reified(n),a.admin_fee),rewards:ee(Qe.reified(n),a.rewards),lpSupply:ee("u64",a.lp_supply)})}static fromFieldsWithTypes(n,a){if(!ci(a.type))throw new Error("not a PoolRewards type");return Jt(a,[n]),i.reified(n).new({accRewardPerShareP:Q("u128",a.fields.acc_reward_per_share_p),adminFeeShareBp:Q("u64",a.fields.admin_fee_share_bp),adminFee:Q(Qe.reified(n),a.fields.admin_fee),rewards:Q(Qe.reified(n),a.fields.rewards),lpSupply:Q("u64",a.fields.lp_supply)})}static fromBcs(n,a){return i.fromFields(n,i.bcs.parse(a))}toJSONField(){return{accRewardPerShareP:this.accRewardPerShareP.toString(),adminFeeShareBp:this.adminFeeShareBp.toString(),adminFee:this.adminFee.toJSONField(),rewards:this.rewards.toJSONField(),lpSupply:this.lpSupply.toString()}}toJSON(){return{$typeName:this.$typeName,$typeArgs:this.$typeArgs,...this.toJSONField()}}static fromJSONField(n,a){return i.reified(n).new({accRewardPerShareP:K("u128",a.accRewardPerShareP),adminFeeShareBp:K("u64",a.adminFeeShareBp),adminFee:K(Qe.reified(n),a.adminFee),rewards:K(Qe.reified(n),a.rewards),lpSupply:K("u64",a.lpSupply)})}static fromJSON(n,a){if(a.$typeName!==i.$typeName)throw new Error(`not a PoolRewards json object: expected '${i.$typeName}' but got '${a.$typeName}'`);return wt(ie(i.$typeName,M(n)),a.$typeArgs,[n]),i.fromJSONField(n,a)}static fromCoreObject(n,a){if(!ci(a.type))throw new Error(`object at ${a.objectId} is not a PoolRewards object`);let r=me(a.type).typeArgs;if(r.length!==1)throw new Error(`type argument mismatch: expected 1 type arguments but got '${r.length}'`);for(let o=0;o<1;o++){let s=X(r[o]),c=X(M([n][o]));if(s!==c)throw new Error(`type argument mismatch at position ${o}: expected '${c}' but got '${s}'`)}return i.fromBcs(n,a.content)}static fromSuiParsedData(n,a){if(a.dataType!=="moveObject")throw new Error("not an object");if(!ci(a.type))throw new Error(`object at ${a.fields.id} is not a PoolRewards object`);return i.fromFieldsWithTypes(n,a)}static fromSuiObjectData(n,a){if(a.bcs){if(a.bcs.dataType!=="moveObject"||!ci(a.bcs.type))throw new Error("object at is not a PoolRewards object");let r=me(a.bcs.type).typeArgs;if(r.length!==1)throw new Error(`type argument mismatch: expected 1 type arguments but got '${r.length}'`);for(let o=0;o<1;o++){let s=X(r[o]),c=X(M([n][o]));if(s!==c)throw new Error(`type argument mismatch at position ${o}: expected '${c}' but got '${s}'`)}return i.fromBcs(n,(0,de.fromBase64)(a.bcs.bcsBytes))}if(a.content)return i.fromSuiParsedData(n,a.content);throw new Error("Both `bcs` and `content` fields are missing from the data. Include `showBcs` or `showContent` in the request.")}static async fetch(n,a,r){let{object:o}=await n.core.getObject({objectId:r,include:{content:!0}});if(!ci(o.type))throw new Error(`object at id ${r} is not a PoolRewards object`);let s=me(o.type).typeArgs;if(s.length!==1)throw new Error(`type argument mismatch: expected 1 type arguments but got '${s.length}'`);for(let c=0;c<1;c++){let d=X(s[c]),g=X(M([a][c]));if(d!==g)throw new Error(`type argument mismatch at position ${c}: expected '${g}' but got '${d}'`)}return i.fromBcs(a,o.content)}};function di(i){return i=X(i),i.startsWith(`${dt("bridge","pool_state::PoolState")}::pool_state::PoolState<`)}var Xn=class i{__StructClass=!0;static get $typeName(){return`${dt("bridge","pool_state::PoolState")}::pool_state::PoolState`}static $numTypeParams=1;static $isPhantom=[!0];$typeName=i.$typeName;$fullTypeName;$typeArgs;$isPhantom=i.$isPhantom;tokenBalance;vusdBalance;d;a;balanceRatioMinBp;constructor(n,a){this.$fullTypeName=ie(i.$typeName,...n),this.$typeArgs=n,this.tokenBalance=a.tokenBalance,this.vusdBalance=a.vusdBalance,this.d=a.d,this.a=a.a,this.balanceRatioMinBp=a.balanceRatioMinBp}static reified(n){let a=i.bcs;return{get typeName(){return i.$typeName},get fullTypeName(){return ie(i.$typeName,M(n))},get typeArgs(){return[M(n)]},isPhantom:i.$isPhantom,reifiedTypeArgs:[n],fromFields:r=>i.fromFields(n,r),fromFieldsWithTypes:r=>i.fromFieldsWithTypes(n,r),fromBcs:r=>i.fromFields(n,a.parse(r)),bcs:a,fromJSONField:r=>i.fromJSONField(n,r),fromJSON:r=>i.fromJSON(n,r),fromCoreObject:r=>i.fromCoreObject(n,r),fromSuiParsedData:r=>i.fromSuiParsedData(n,r),fromSuiObjectData:r=>i.fromSuiObjectData(n,r),fetch:async(r,o)=>i.fetch(r,n,o),new:r=>new i([M(n)],r),kind:"StructClassReified"}}static get r(){return i.reified}static phantom(n){return he(i.reified(n))}static get p(){return i.phantom}static instantiateBcs(){return B.struct("PoolState",{token_balance:B.u64(),vusd_balance:B.u64(),d:B.u64(),a:B.u64(),balance_ratio_min_bp:B.u64()})}static cachedBcs=null;static get bcs(){return i.cachedBcs||(i.cachedBcs=i.instantiateBcs()),i.cachedBcs}static fromFields(n,a){return i.reified(n).new({tokenBalance:ee("u64",a.token_balance),vusdBalance:ee("u64",a.vusd_balance),d:ee("u64",a.d),a:ee("u64",a.a),balanceRatioMinBp:ee("u64",a.balance_ratio_min_bp)})}static fromFieldsWithTypes(n,a){if(!di(a.type))throw new Error("not a PoolState type");return Jt(a,[n]),i.reified(n).new({tokenBalance:Q("u64",a.fields.token_balance),vusdBalance:Q("u64",a.fields.vusd_balance),d:Q("u64",a.fields.d),a:Q("u64",a.fields.a),balanceRatioMinBp:Q("u64",a.fields.balance_ratio_min_bp)})}static fromBcs(n,a){return i.fromFields(n,i.bcs.parse(a))}toJSONField(){return{tokenBalance:this.tokenBalance.toString(),vusdBalance:this.vusdBalance.toString(),d:this.d.toString(),a:this.a.toString(),balanceRatioMinBp:this.balanceRatioMinBp.toString()}}toJSON(){return{$typeName:this.$typeName,$typeArgs:this.$typeArgs,...this.toJSONField()}}static fromJSONField(n,a){return i.reified(n).new({tokenBalance:K("u64",a.tokenBalance),vusdBalance:K("u64",a.vusdBalance),d:K("u64",a.d),a:K("u64",a.a),balanceRatioMinBp:K("u64",a.balanceRatioMinBp)})}static fromJSON(n,a){if(a.$typeName!==i.$typeName)throw new Error(`not a PoolState json object: expected '${i.$typeName}' but got '${a.$typeName}'`);return wt(ie(i.$typeName,M(n)),a.$typeArgs,[n]),i.fromJSONField(n,a)}static fromCoreObject(n,a){if(!di(a.type))throw new Error(`object at ${a.objectId} is not a PoolState object`);let r=me(a.type).typeArgs;if(r.length!==1)throw new Error(`type argument mismatch: expected 1 type arguments but got '${r.length}'`);for(let o=0;o<1;o++){let s=X(r[o]),c=X(M([n][o]));if(s!==c)throw new Error(`type argument mismatch at position ${o}: expected '${c}' but got '${s}'`)}return i.fromBcs(n,a.content)}static fromSuiParsedData(n,a){if(a.dataType!=="moveObject")throw new Error("not an object");if(!di(a.type))throw new Error(`object at ${a.fields.id} is not a PoolState object`);return i.fromFieldsWithTypes(n,a)}static fromSuiObjectData(n,a){if(a.bcs){if(a.bcs.dataType!=="moveObject"||!di(a.bcs.type))throw new Error("object at is not a PoolState object");let r=me(a.bcs.type).typeArgs;if(r.length!==1)throw new Error(`type argument mismatch: expected 1 type arguments but got '${r.length}'`);for(let o=0;o<1;o++){let s=X(r[o]),c=X(M([n][o]));if(s!==c)throw new Error(`type argument mismatch at position ${o}: expected '${c}' but got '${s}'`)}return i.fromBcs(n,(0,de.fromBase64)(a.bcs.bcsBytes))}if(a.content)return i.fromSuiParsedData(n,a.content);throw new Error("Both `bcs` and `content` fields are missing from the data. Include `showBcs` or `showContent` in the request.")}static async fetch(n,a,r){let{object:o}=await n.core.getObject({objectId:r,include:{content:!0}});if(!di(o.type))throw new Error(`object at id ${r} is not a PoolState object`);let s=me(o.type).typeArgs;if(s.length!==1)throw new Error(`type argument mismatch: expected 1 type arguments but got '${s.length}'`);for(let c=0;c<1;c++){let d=X(s[c]),g=X(M([a][c]));if(d!==g)throw new Error(`type argument mismatch at position ${c}: expected '${g}' but got '${d}'`)}return i.fromBcs(a,o.content)}};function gi(i){return i=X(i),i.startsWith(`${dt("bridge","pool::Pool")}::pool::Pool<`)}var Sr=class i{__StructClass=!0;static get $typeName(){return`${dt("bridge","pool::Pool")}::pool::Pool`}static $numTypeParams=1;static $isPhantom=[!0];$typeName=i.$typeName;$fullTypeName;$typeArgs;$isPhantom=i.$isPhantom;id;state;rewards;feeShareBp;canDeposit;canWithdraw;decimals;balance;constructor(n,a){this.$fullTypeName=ie(i.$typeName,...n),this.$typeArgs=n,this.id=a.id,this.state=a.state,this.rewards=a.rewards,this.feeShareBp=a.feeShareBp,this.canDeposit=a.canDeposit,this.canWithdraw=a.canWithdraw,this.decimals=a.decimals,this.balance=a.balance}static reified(n){let a=i.bcs;return{get typeName(){return i.$typeName},get fullTypeName(){return ie(i.$typeName,M(n))},get typeArgs(){return[M(n)]},isPhantom:i.$isPhantom,reifiedTypeArgs:[n],fromFields:r=>i.fromFields(n,r),fromFieldsWithTypes:r=>i.fromFieldsWithTypes(n,r),fromBcs:r=>i.fromFields(n,a.parse(r)),bcs:a,fromJSONField:r=>i.fromJSONField(n,r),fromJSON:r=>i.fromJSON(n,r),fromCoreObject:r=>i.fromCoreObject(n,r),fromSuiParsedData:r=>i.fromSuiParsedData(n,r),fromSuiObjectData:r=>i.fromSuiObjectData(n,r),fetch:async(r,o)=>i.fetch(r,n,o),new:r=>new i([M(n)],r),kind:"StructClassReified"}}static get r(){return i.reified}static phantom(n){return he(i.reified(n))}static get p(){return i.phantom}static instantiateBcs(){return B.struct("Pool",{id:bt.bcs,state:Xn.bcs,rewards:Pn.bcs,fee_share_bp:B.u64(),can_deposit:B.bool(),can_withdraw:B.bool(),decimals:B.u8(),balance:Qe.bcs})}static cachedBcs=null;static get bcs(){return i.cachedBcs||(i.cachedBcs=i.instantiateBcs()),i.cachedBcs}static fromFields(n,a){return i.reified(n).new({id:ee(bt.reified(),a.id),state:ee(Xn.reified(n),a.state),rewards:ee(Pn.reified(n),a.rewards),feeShareBp:ee("u64",a.fee_share_bp),canDeposit:ee("bool",a.can_deposit),canWithdraw:ee("bool",a.can_withdraw),decimals:ee("u8",a.decimals),balance:ee(Qe.reified(n),a.balance)})}static fromFieldsWithTypes(n,a){if(!gi(a.type))throw new Error("not a Pool type");return Jt(a,[n]),i.reified(n).new({id:Q(bt.reified(),a.fields.id),state:Q(Xn.reified(n),a.fields.state),rewards:Q(Pn.reified(n),a.fields.rewards),feeShareBp:Q("u64",a.fields.fee_share_bp),canDeposit:Q("bool",a.fields.can_deposit),canWithdraw:Q("bool",a.fields.can_withdraw),decimals:Q("u8",a.fields.decimals),balance:Q(Qe.reified(n),a.fields.balance)})}static fromBcs(n,a){return i.fromFields(n,i.bcs.parse(a))}toJSONField(){return{id:this.id,state:this.state.toJSONField(),rewards:this.rewards.toJSONField(),feeShareBp:this.feeShareBp.toString(),canDeposit:this.canDeposit,canWithdraw:this.canWithdraw,decimals:this.decimals,balance:this.balance.toJSONField()}}toJSON(){return{$typeName:this.$typeName,$typeArgs:this.$typeArgs,...this.toJSONField()}}static fromJSONField(n,a){return i.reified(n).new({id:K(bt.reified(),a.id),state:K(Xn.reified(n),a.state),rewards:K(Pn.reified(n),a.rewards),feeShareBp:K("u64",a.feeShareBp),canDeposit:K("bool",a.canDeposit),canWithdraw:K("bool",a.canWithdraw),decimals:K("u8",a.decimals),balance:K(Qe.reified(n),a.balance)})}static fromJSON(n,a){if(a.$typeName!==i.$typeName)throw new Error(`not a Pool json object: expected '${i.$typeName}' but got '${a.$typeName}'`);return wt(ie(i.$typeName,M(n)),a.$typeArgs,[n]),i.fromJSONField(n,a)}static fromCoreObject(n,a){if(!gi(a.type))throw new Error(`object at ${a.objectId} is not a Pool object`);let r=me(a.type).typeArgs;if(r.length!==1)throw new Error(`type argument mismatch: expected 1 type arguments but got '${r.length}'`);for(let o=0;o<1;o++){let s=X(r[o]),c=X(M([n][o]));if(s!==c)throw new Error(`type argument mismatch at position ${o}: expected '${c}' but got '${s}'`)}return i.fromBcs(n,a.content)}static fromSuiParsedData(n,a){if(a.dataType!=="moveObject")throw new Error("not an object");if(!gi(a.type))throw new Error(`object at ${a.fields.id} is not a Pool object`);return i.fromFieldsWithTypes(n,a)}static fromSuiObjectData(n,a){if(a.bcs){if(a.bcs.dataType!=="moveObject"||!gi(a.bcs.type))throw new Error("object at is not a Pool object");let r=me(a.bcs.type).typeArgs;if(r.length!==1)throw new Error(`type argument mismatch: expected 1 type arguments but got '${r.length}'`);for(let o=0;o<1;o++){let s=X(r[o]),c=X(M([n][o]));if(s!==c)throw new Error(`type argument mismatch at position ${o}: expected '${c}' but got '${s}'`)}return i.fromBcs(n,(0,de.fromBase64)(a.bcs.bcsBytes))}if(a.content)return i.fromSuiParsedData(n,a.content);throw new Error("Both `bcs` and `content` fields are missing from the data. Include `showBcs` or `showContent` in the request.")}static async fetch(n,a,r){let{object:o}=await n.core.getObject({objectId:r,include:{content:!0}});if(!gi(o.type))throw new Error(`object at id ${r} is not a Pool object`);let s=me(o.type).typeArgs;if(s.length!==1)throw new Error(`type argument mismatch: expected 1 type arguments but got '${s.length}'`);for(let c=0;c<1;c++){let d=X(s[c]),g=X(M([a][c]));if(d!==g)throw new Error(`type argument mismatch at position ${c}: expected '${g}' but got '${d}'`)}return i.fromBcs(a,o.content)}};function li(i){return i=X(i),i.startsWith(`${dt("bridge","user_deposit::UserDeposit")}::user_deposit::UserDeposit<`)}var kr=class i{__StructClass=!0;static get $typeName(){return`${dt("bridge","user_deposit::UserDeposit")}::user_deposit::UserDeposit`}static $numTypeParams=1;static $isPhantom=[!0];$typeName=i.$typeName;$fullTypeName;$typeArgs;$isPhantom=i.$isPhantom;id;lpAmount;rewardDebt;constructor(n,a){this.$fullTypeName=ie(i.$typeName,...n),this.$typeArgs=n,this.id=a.id,this.lpAmount=a.lpAmount,this.rewardDebt=a.rewardDebt}static reified(n){let a=i.bcs;return{get typeName(){return i.$typeName},get fullTypeName(){return ie(i.$typeName,M(n))},get typeArgs(){return[M(n)]},isPhantom:i.$isPhantom,reifiedTypeArgs:[n],fromFields:r=>i.fromFields(n,r),fromFieldsWithTypes:r=>i.fromFieldsWithTypes(n,r),fromBcs:r=>i.fromFields(n,a.parse(r)),bcs:a,fromJSONField:r=>i.fromJSONField(n,r),fromJSON:r=>i.fromJSON(n,r),fromCoreObject:r=>i.fromCoreObject(n,r),fromSuiParsedData:r=>i.fromSuiParsedData(n,r),fromSuiObjectData:r=>i.fromSuiObjectData(n,r),fetch:async(r,o)=>i.fetch(r,n,o),new:r=>new i([M(n)],r),kind:"StructClassReified"}}static get r(){return i.reified}static phantom(n){return he(i.reified(n))}static get p(){return i.phantom}static instantiateBcs(){return B.struct("UserDeposit",{id:bt.bcs,lp_amount:B.u64(),reward_debt:B.u64()})}static cachedBcs=null;static get bcs(){return i.cachedBcs||(i.cachedBcs=i.instantiateBcs()),i.cachedBcs}static fromFields(n,a){return i.reified(n).new({id:ee(bt.reified(),a.id),lpAmount:ee("u64",a.lp_amount),rewardDebt:ee("u64",a.reward_debt)})}static fromFieldsWithTypes(n,a){if(!li(a.type))throw new Error("not a UserDeposit type");return Jt(a,[n]),i.reified(n).new({id:Q(bt.reified(),a.fields.id),lpAmount:Q("u64",a.fields.lp_amount),rewardDebt:Q("u64",a.fields.reward_debt)})}static fromBcs(n,a){return i.fromFields(n,i.bcs.parse(a))}toJSONField(){return{id:this.id,lpAmount:this.lpAmount.toString(),rewardDebt:this.rewardDebt.toString()}}toJSON(){return{$typeName:this.$typeName,$typeArgs:this.$typeArgs,...this.toJSONField()}}static fromJSONField(n,a){return i.reified(n).new({id:K(bt.reified(),a.id),lpAmount:K("u64",a.lpAmount),rewardDebt:K("u64",a.rewardDebt)})}static fromJSON(n,a){if(a.$typeName!==i.$typeName)throw new Error(`not a UserDeposit json object: expected '${i.$typeName}' but got '${a.$typeName}'`);return wt(ie(i.$typeName,M(n)),a.$typeArgs,[n]),i.fromJSONField(n,a)}static fromCoreObject(n,a){if(!li(a.type))throw new Error(`object at ${a.objectId} is not a UserDeposit object`);let r=me(a.type).typeArgs;if(r.length!==1)throw new Error(`type argument mismatch: expected 1 type arguments but got '${r.length}'`);for(let o=0;o<1;o++){let s=X(r[o]),c=X(M([n][o]));if(s!==c)throw new Error(`type argument mismatch at position ${o}: expected '${c}' but got '${s}'`)}return i.fromBcs(n,a.content)}static fromSuiParsedData(n,a){if(a.dataType!=="moveObject")throw new Error("not an object");if(!li(a.type))throw new Error(`object at ${a.fields.id} is not a UserDeposit object`);return i.fromFieldsWithTypes(n,a)}static fromSuiObjectData(n,a){if(a.bcs){if(a.bcs.dataType!=="moveObject"||!li(a.bcs.type))throw new Error("object at is not a UserDeposit object");let r=me(a.bcs.type).typeArgs;if(r.length!==1)throw new Error(`type argument mismatch: expected 1 type arguments but got '${r.length}'`);for(let o=0;o<1;o++){let s=X(r[o]),c=X(M([n][o]));if(s!==c)throw new Error(`type argument mismatch at position ${o}: expected '${c}' but got '${s}'`)}return i.fromBcs(n,(0,de.fromBase64)(a.bcs.bcsBytes))}if(a.content)return i.fromSuiParsedData(n,a.content);throw new Error("Both `bcs` and `content` fields are missing from the data. Include `showBcs` or `showContent` in the request.")}static async fetch(n,a,r){let{object:o}=await n.core.getObject({objectId:r,include:{content:!0}});if(!li(o.type))throw new Error(`object at id ${r} is not a UserDeposit object`);let s=me(o.type).typeArgs;if(s.length!==1)throw new Error(`type argument mismatch: expected 1 type arguments but got '${s.length}'`);for(let c=0;c<1;c++){let d=X(s[c]),g=X(M([a][c]));if(d!==g)throw new Error(`type argument mismatch at position ${c}: expected '${g}' but got '${d}'`)}return i.fromBcs(a,o.content)}};function vg(i,n,a){if(n.length===0||!n[0])return[];let r=n[0],o=i.reduce((d,g)=>d+BigInt(g),BigInt(0)),s=BigInt(r.balance),c=[];for(let d of n.slice(1)){if(s>o)return hg(a,r,c,i);s+=BigInt(d.balance),c.push(d)}return s>=o?hg(a,r,c,i):[]}function hg(i,n,a,r){let o=r.map(s=>i.pure.u64(s));return a.length>0&&i.mergeCoins(n.coinObjectId,a.map(s=>s.coinObjectId)),i.splitCoins(n.coinObjectId,o)}var ap="0x0000000000000000000000000000000000000000000000000000000000000000";async function fg(i,n,a){let r=await i.devInspectTransactionBlock({sender:ap,transactionBlock:n});if(r.effects.status.status!=="success")throw new Error(`inspectionResult failed. ${JSON.stringify(r,null,2)}`);let o=r.results?.pop()?.returnValues?.pop();if(!o)throw new Error(`Something with inspectionResult went wrong. ${JSON.stringify(r,null,2)}`);let[s,c]=o;return typeof a=="object"?a.fromBcs(Uint8Array.from(s)).toJSONField():$a(a).parse(Uint8Array.from(s))}var Vr=class extends xe{constructor(a,r,o){super();this.suiRpcUrl=a;this.params=r;this.api=o;this.client=new Sn({url:a,network:r.suiIsTestnet?"testnet":"mainnet"})}suiRpcUrl;params;api;chainType="SUI";client;async getUserBalanceInfo(a,r){if(!r.originTokenAddress)throw new f("SUI token must contain 'originTokenAddress'");let o=r.suiAddresses;if(!o)throw new f("SUI token must contain 'suiAddresses'");on(o.bridgeAddress,o.bridgeAddressOrigin);let c=(await this.fetchDeposits(a,r.originTokenAddress)).reduce((d,g)=>{if(g.data)return d.lpAmount+=BigInt(g.data.content.fields.lp_amount),d.rewardDebt+=BigInt(g.data.content.fields.reward_debt),d;throw new f("Deposits fetch failed")},{lpAmount:BigInt(0),rewardDebt:BigInt(0)});return new Ye({lpAmount:c.lpAmount.toString(),rewardDebt:c.rewardDebt.toString()})}async fetchDeposits(a,r){return await Ot(o=>this.client.getOwnedObjects({owner:a,filter:{StructType:kr.phantom(he(r)).phantomType},options:{showContent:!0},cursor:o}))}async getPoolInfoFromChain(a){let r=a.suiAddresses;if(!r)throw new f("SUI token must contain 'suiAddresses'");if(on(r.bridgeAddress,r.bridgeAddressOrigin),!a.originTokenAddress)throw new f("SUI token must contain 'originTokenAddress'");let o=48,s=new pt;ag(s,a.originTokenAddress,r.bridgeObjectAddress);let c=await fg(this.client,s,Sr.reified(he(a.originTokenAddress))),d=c.state.tokenBalance,g=c.state.vusdBalance,l=We({tokenBalance:d,vUsdBalance:g});return{dValue:c.state.d,aValue:c.state.a,totalLpAmount:c.rewards.lpSupply,vUsdBalance:g,tokenBalance:d,accRewardPerShareP:c.rewards.accRewardPerShareP,p:o,imbalance:l}}async buildRawTransactionDeposit(a){let r=a.token.suiAddresses;if(!r)throw new f("SUI token must contain 'suiAddresses'");if(on(r.bridgeAddress,r.bridgeAddressOrigin),!a.token.originTokenAddress)throw new f("SUI token must contain 'originTokenAddress'");let o=await Ot(u=>this.client.getCoins({owner:a.accountAddress,coinType:a.token.originTokenAddress,cursor:u}));if(o.length===0||!o[0])throw new yt("No coins to deposit");let s=o[0],c=new pt;c.setSender(a.accountAddress);let{depositObj:d,isNewDeposit:g}=await this.getDepositObject(a.accountAddress,a.token.originTokenAddress,c),[l]=vg([a.amount],o,c);if(!l)throw new yt("No coins to deposit");if(!a.token.originTokenAddress)throw new f("SUI token must contain 'originTokenAddress'");let A=eg(c,a.token.originTokenAddress,{bridge:r.bridgeObjectAddress,userDeposit:d,coin:l});return c.mergeCoins(s.coinObjectId,[A]),g&&c.transferObjects([d],a.accountAddress),await c.toJSON({client:this.client})}async getDepositObject(a,r,o){let s=await this.fetchDeposits(a,r);if(s.length===0||!s[0]){let c=he(r).phantomType;return{depositObj:ig(o,c),isNewDeposit:!0}}else{if(s[0].data?.objectId)return{depositObj:s[0].data.objectId,isNewDeposit:!1};throw new f("Something went wrong while deposit")}}async buildRawTransactionWithdraw(a){let r=a.token.suiAddresses;if(!r)throw new f("SUI token must contain 'suiAddresses'");if(on(r.bridgeAddress,r.bridgeAddressOrigin),!a.token.originTokenAddress)throw new f("SUI token must contain 'originTokenAddress'");let o=he(a.token.originTokenAddress).phantomType,s=new pt;s.setSender(a.accountAddress);let{depositObj:c,isNewDeposit:d}=await this.getDepositObject(a.accountAddress,a.token.originTokenAddress,s);if(d)throw new yt("No deposit found");let g=ng(s,o,{bridge:r.bridgeObjectAddress,userDeposit:c,amountLp:BigInt(a.amount)}),l=await Ot(A=>this.client.getCoins({owner:a.accountAddress,coinType:a.token.originTokenAddress,cursor:A}));if(!g[0]||!g[1])throw new f("No rewards found");return l[0]?s.mergeCoins(l[0].coinObjectId,[g[0],g[1]]):(s.mergeCoins(g[0],[g[1]]),s.transferObjects([g[0]],a.accountAddress)),await s.toJSON({client:this.client})}async buildRawTransactionClaimRewards(a){let r=a.token.suiAddresses;if(!r)throw new f("SUI token must contain 'suiAddresses'");if(on(r.bridgeAddress,r.bridgeAddressOrigin),!a.token.originTokenAddress)throw new f("SUI token must contain 'originTokenAddress'");let o=he(a.token.originTokenAddress).phantomType,s=new pt;s.setSender(a.accountAddress);let{depositObj:c,isNewDeposit:d}=await this.getDepositObject(a.accountAddress,a.token.originTokenAddress,s);if(d)throw new yt("No deposit found");let g=tg(s,o,{bridge:r.bridgeObjectAddress,userDeposit:c}),l=await Ot(A=>this.client.getCoins({owner:a.accountAddress,coinType:a.token.originTokenAddress,cursor:A}));return l[0]?s.mergeCoins(l[0].coinObjectId,[g]):s.transferObjects([g],a.accountAddress),await s.toJSON({client:this.client})}};var Ai=require("web3"),Rg=require("web3-eth-abi");var ui=class extends xe{constructor(a,r,o){super();this.tronWeb=a;this.api=r;this.tronJsonRpc=o}tronWeb;api;tronJsonRpc;chainType="TRX";P=52;async getUserBalanceInfo(a,r){let o;if(this.tronJsonRpc)try{o=await this.getUserBalanceInfoByBatch(this.tronJsonRpc,a,r)}catch{o=await this.getUserBalanceInfoPerProperty(a,r)}else o=await this.getUserBalanceInfoPerProperty(a,r);return o}async getUserBalanceInfoByBatch(a,r,o){let s=Va(o.poolAddress),c=Va(r),d=[{jsonrpc:"2.0",id:1,method:"eth_call",params:[{to:s,data:this.getFunctionAbi("userRewardDebt",c)},"latest"]},{jsonrpc:"2.0",id:2,method:"eth_call",params:[{to:s,data:this.getFunctionAbi("balanceOf",c)},"latest"]}],l=await(await fetch(a,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(d)})).json();if(Array.isArray(l)&&l.length===2){let A=u=>{let m=l.find(y=>y.id===u);if(!m||!m.result)throw new Error(`Missing or invalid result for id ${u}`);return Ai.Web3.utils.toBigInt(m.result).toString()};return new Ye({lpAmount:Ai.Web3.utils.toBigInt(A(2)).toString(),rewardDebt:Ai.Web3.utils.toBigInt(A(1)).toString()})}throw new Error("Batched HTTP call failed")}async getUserBalanceInfoPerProperty(a,r){this.tronWeb.defaultAddress.base58||this.tronWeb.setAddress(a);let o=this.getContract(r.poolAddress),s=(await o.methods.userRewardDebt(a).call()).toString(),c=(await o.methods.balanceOf(a).call()).toString();return new Ye({lpAmount:c,rewardDebt:s})}async getPoolInfoFromChain(a){let r;if(this.tronJsonRpc)try{r=await this.getPoolInfoByBatch(this.tronJsonRpc,a)}catch{r=await this.getPoolInfoPerProperty(a)}else r=await this.getPoolInfoPerProperty(a);return r}async getPoolInfoByBatch(a,r){let o=Va(r.poolAddress),s=[{jsonrpc:"2.0",id:1,method:"eth_call",params:[{to:o,data:this.getFunctionAbi("a")},"latest"]},{jsonrpc:"2.0",id:2,method:"eth_call",params:[{to:o,data:this.getFunctionAbi("d")},"latest"]},{jsonrpc:"2.0",id:3,method:"eth_call",params:[{to:o,data:this.getFunctionAbi("tokenBalance")},"latest"]},{jsonrpc:"2.0",id:4,method:"eth_call",params:[{to:o,data:this.getFunctionAbi("vUsdBalance")},"latest"]},{jsonrpc:"2.0",id:5,method:"eth_call",params:[{to:o,data:this.getFunctionAbi("totalSupply")},"latest"]},{jsonrpc:"2.0",id:6,method:"eth_call",params:[{to:o,data:this.getFunctionAbi("accRewardPerShareP")},"latest"]}],d=await(await fetch(a,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(s)})).json();if(Array.isArray(d)&&d.length===6){let g=m=>{let y=d.find(v=>v.id===m);if(!y||!y.result)throw new Error(`Missing or invalid result for id ${m}`);return Ai.Web3.utils.toBigInt(y.result).toString()},l=g(3),A=g(4),u=We({tokenBalance:l,vUsdBalance:A});return{aValue:g(1),dValue:g(2),tokenBalance:l,vUsdBalance:A,totalLpAmount:g(5),accRewardPerShareP:g(6),p:this.P,imbalance:u}}throw new Error("Batched pool info call failed")}async getPoolInfoPerProperty(a){this.tronWeb.defaultAddress.base58||this.tronWeb.setAddress(a.poolAddress);let r=this.getContract(a.poolAddress),[o,s,c,d,g,l]=await Promise.all([r.methods.a().call(),r.methods.d().call(),r.methods.tokenBalance().call(),r.methods.vUsdBalance().call(),r.methods.totalSupply().call(),r.methods.accRewardPerShareP().call()]),A=c.toString(),u=d.toString(),m=We({tokenBalance:A,vUsdBalance:u});return{aValue:o.toString(),dValue:s.toString(),tokenBalance:A,vUsdBalance:u,totalLpAmount:g.toString(),accRewardPerShareP:l.toString(),p:this.P,imbalance:m}}buildRawTransactionDeposit(a){let{amount:r,accountAddress:o}=a,s=[{type:"uint256",value:r}];return this.buildRawTransaction(a.token.poolAddress,"deposit(uint256)",s,"0",o)}buildRawTransactionWithdraw(a){let{amount:r,accountAddress:o}=a,s=[{type:"uint256",value:r}];return this.buildRawTransaction(a.token.poolAddress,"withdraw(uint256)",s,"0",o)}buildRawTransactionClaimRewards(a){let{accountAddress:r}=a,o=[];return this.buildRawTransaction(a.token.poolAddress,"claimRewards()",o,"0",r)}async buildRawTransaction(a,r,o,s,c){let d=await this.tronWeb.transactionBuilder.triggerSmartContract(a,r,{callValue:+s},o,c);if(!d?.result?.result)throw new f("Unknown error: "+JSON.stringify(d,null,2));return d.transaction}getContract(a){return this.tronWeb.contract(ri.abi,a)}getFunctionAbi(a,...r){let o=ri.abi.find(s=>s.type==="function"&&"name"in s&&s.name===a);if(!o)throw new Error(`${a} method not found in Pool ABI`);return(0,Rg.encodeFunctionCall)(o,r)}};var Pr=class{constructor(n,a,r,o){this.api=n;this.nodeRpcUrlsConfig=a;this.params=r;this.tokenService=o;this.rawTxBuilder=new Wr(n,a,this.params,o);let s=r.cachePoolInfoChainSec>0?r.cachePoolInfoChainSec*1e3:20*1e3;this.cache=new sn({defaultTtl:s})}api;nodeRpcUrlsConfig;params;tokenService;rawTxBuilder;cache;async getAllowance(n,a){if(a){let r=n,o=a;return await this.tokenService.getAllowance({...o,spender:o.token.poolAddress},r)}else{let r=n;return await this.tokenService.getAllowance({...r,spender:r.token.poolAddress})}}async checkAllowance(n,a){if(a){let r=n,o=a;return this.tokenService.checkAllowance({...o,spender:o.token.poolAddress},r)}else{let r=n;return this.tokenService.checkAllowance({...r,spender:r.token.poolAddress})}}async approve(n,a){return this.tokenService.approve(n,{...a,spender:a.token.poolAddress})}async getAmountToBeDeposited(n,a,r){D(n),O("amount",n,a.decimals);let o=await this.getPoolInfoFromChain(a,r),{vUsdBalance:s,tokenBalance:c,aValue:d,dValue:g}=o,l=ug(n,d,g,c,s);return P(l,3).toFixed()}async getAmountToBeWithdrawn(n,a,r,o){D(n),O("amount",n,r.decimals);let s=await this.getPoolInfoFromChain(r,o),c=pg(n),d=Ke(c,r.decimals),l=(await this.getUserBalanceInfo(a,r,o)).earned(s)||"0",A=(0,Tg.Big)(d).plus(l).toFixed();return P(A,r.decimals).toFixed()}async getUserBalanceInfo(n,a,r){return ga(a.chainSymbol,this.api,this.nodeRpcUrlsConfig,this.params,r).getUserBalanceInfo(n,a)}async getPoolInfoFromChain(n,a){let r={chainSymbol:n.chainSymbol,poolAddress:n.poolAddress},o=this.cache.get(r);if(o)return o;{let s=await ga(n.chainSymbol,this.api,this.nodeRpcUrlsConfig,this.params,a).getPoolInfoFromChain(n);return this.cache.put(r,s),this.api.cachePut({chainSymbol:n.chainSymbol,poolAddress:n.poolAddress},s),s}}};function ga(i,n,a,r,o){switch(x.getChainProperty(i).chainType){case"EVM":{if(o)return new oi(o,n);{let s=a.getNodeRpcUrl(i),c=new la.Web3(s);return c.defaultReturnFormat={number:la.FMT_NUMBER.STR,bytes:la.FMT_BYTES.HEX},new oi(c,n)}}case"TRX":{let s=a.getNodeRpcUrl(i),c=r.tronJsonRpc;if(o)return new ui(o,n,c);{let d=new Bg.TronWeb({fullHost:s});return new ui(d,n,c)}}case"SOLANA":{let s=a.getNodeRpcUrl(i);return new Nr(s,n)}case"SRB":return new Gr(a,r,n);case"SUI":return new Vr(a.getNodeRpcUrl(i),r,n);case"ALG":if(o){let s=o,c=Ns.AlgorandClient.fromClients({algod:s});return new ii(c,n)}else{let s=a.getNodeRpcUrl(i),c=Ns.AlgorandClient.fromConfig({algodConfig:{server:s}});return new ii(c,n)}case"STX":{let s=a.getNodeRpcUrl(i);return new Zr(s,r,n)}}}var wg=require("tronweb"),ua=require("web3");var ip={abi:[{inputs:[{internalType:"string",name:"tokenName_",type:"string"},{internalType:"string",name:"tokenSymbol_",type:"string"}],stateMutability:"nonpayable",type:"constructor"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"owner",type:"address"},{indexed:!0,internalType:"address",name:"spender",type:"address"},{indexed:!1,internalType:"uint256",name:"value",type:"uint256"}],name:"Approval",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"user",type:"address"},{indexed:!1,internalType:"address",name:"token",type:"address"},{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"},{indexed:!1,internalType:"uint256",name:"lpAmount",type:"uint256"}],name:"Deposited",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"},{indexed:!1,internalType:"address",name:"token",type:"address"}],name:"DepositedRewards",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"from",type:"address"},{indexed:!0,internalType:"address",name:"to",type:"address"},{indexed:!1,internalType:"uint256[4]",name:"values",type:"uint256[4]"}],name:"MultiTransfer",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"previousOwner",type:"address"},{indexed:!0,internalType:"address",name:"newOwner",type:"address"}],name:"OwnershipTransferred",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"from",type:"address"},{indexed:!0,internalType:"address",name:"to",type:"address"},{indexed:!1,internalType:"uint256",name:"value",type:"uint256"}],name:"Transfer",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"user",type:"address"},{indexed:!1,internalType:"address",name:"token",type:"address"},{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"}],name:"Withdrawn",type:"event"},{stateMutability:"payable",type:"fallback"},{inputs:[],name:"NUM_TOKENS",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"owner",type:"address"},{internalType:"address",name:"spender",type:"address"}],name:"allowance",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"approve",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"account",type:"address"}],name:"balanceOf",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"decimals",outputs:[{internalType:"uint8",name:"",type:"uint8"}],stateMutability:"pure",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"subtractedValue",type:"uint256"}],name:"decreaseAllowance",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"uint256",name:"index",type:"uint256"},{internalType:"uint256",name:"minVirtualAmount",type:"uint256"}],name:"deposit",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"depositRewards",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"uint256",name:"index",type:"uint256"}],name:"getEstimatedAmountOnDeposit",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"index",type:"uint256"}],name:"getRewardsAmount",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"user",type:"address"},{internalType:"uint256",name:"virtualAmount",type:"uint256"}],name:"getWithdrawProportionAmount",outputs:[{internalType:"uint256[4]",name:"",type:"uint256[4]"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"addedValue",type:"uint256"}],name:"increaseAllowance",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"name",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"},{inputs:[],name:"owner",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"",type:"uint256"}],name:"pools",outputs:[{internalType:"contract IPool",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"renounceOwnership",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"index",type:"uint256"},{internalType:"contract IPool",name:"pool",type:"address"}],name:"setPool",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"account",type:"address"},{internalType:"uint256",name:"index",type:"uint256"}],name:"subBalanceOf",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"index",type:"uint256"}],name:"subDepositRewards",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"index",type:"uint256"}],name:"subTotalSupply",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"to",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"uint256",name:"index",type:"uint256"}],name:"subTransfer",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"from",type:"address"},{internalType:"address",name:"to",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"uint256",name:"index",type:"uint256"}],name:"subTransferFrom",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"virtualAmount",type:"uint256"},{internalType:"uint256",name:"index",type:"uint256"}],name:"subWithdraw",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"symbol",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"",type:"uint256"}],name:"tokens",outputs:[{internalType:"contract IERC20",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"totalSupply",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"to",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"transfer",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"from",type:"address"},{internalType:"address",name:"to",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"transferFrom",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"newOwner",type:"address"}],name:"transferOwnership",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"virtualAmount",type:"uint256"}],name:"withdraw",outputs:[],stateMutability:"nonpayable",type:"function"},{stateMutability:"payable",type:"receive"}]},Xr=ip;var jn=class{};var pi=class extends jn{constructor(a,r){super();this.web3=a;this.api=r}web3;api;chainType="EVM";async balanceOf(a){let r=(await this.getYieldContract(a.token.yieldAddress).methods.balanceOf(a.owner).call()).toString();return P(r,3).toFixed()}async getEstimatedAmountOnDeposit(a){let r=j(a.amount,a.token.decimals).toFixed(),o=(await this.getYieldContract(a.token.yieldAddress).methods.getEstimatedAmountOnDeposit(r,a.token.yieldId).call()).toString();return P(o,3).toFixed()}async getWithdrawProportionAmount(a){let r=j(a.amount,3).toFixed();return await this.getYieldContract(a.cydToken.yieldAddress).methods.getWithdrawProportionAmount(a.owner,r).call()}async buildRawTransactionDeposit(a){return Promise.resolve({...this.buildTxParams({owner:a.owner,yieldAddress:a.token.yieldAddress}),data:this.getYieldContract(a.token.yieldAddress).methods.deposit(a.amount,a.token.yieldId,a.minVirtualAmount).encodeABI()})}async buildRawTransactionWithdraw(a){return Promise.resolve({...this.buildTxParams({owner:a.owner,yieldAddress:a.token.yieldAddress}),data:this.getYieldContract(a.token.yieldAddress).methods.withdraw(a.amount).encodeABI()})}buildTxParams(a){return{from:a.owner,to:a.yieldAddress,value:"0"}}getYieldContract(a){return new this.web3.eth.Contract(Xr.abi,a)}};var jr=class{constructor(n,a,r,o){this.api=n;this.nodeRpcUrlsConfig=a;this.params=r;this.tokenService=o}api;nodeRpcUrlsConfig;params;tokenService;async approve(n,a){return this.tokenService.buildRawTransactionApprove({...n,spender:n.token.yieldAddress},a)}async deposit(n,a){return D(n.amount),O("amount",n.amount,n.token.decimals),D(n.minVirtualAmount),O("minVirtualAmount",n.minVirtualAmount,3),n.amount=j(n.amount,n.token.decimals).toFixed(),n.minVirtualAmount=j(n.minVirtualAmount,3).toFixed(),Aa(n.token.chainSymbol,this.api,this.nodeRpcUrlsConfig,n.owner,a).buildRawTransactionDeposit(n)}async withdraw(n,a){return D(n.amount),O("amount",n.amount,3),n.amount=j(n.amount,3).toFixed(),Aa(n.token.chainSymbol,this.api,this.nodeRpcUrlsConfig,n.owner,a).buildRawTransactionWithdraw(n)}};var mi=class extends jn{constructor(a,r){super();this.tronWeb=a;this.api=r}tronWeb;api;chainType="TRX";async balanceOf(a){let r=(await(await this.getContract(a.token.yieldAddress)).methods.balanceOf(a.owner).call()).toString();return P(r,3).toFixed()}async getEstimatedAmountOnDeposit(a){let r=j(a.amount,a.token.decimals).toFixed(),o=(await(await this.getContract(a.token.yieldAddress)).methods.getEstimatedAmountOnDeposit(r,a.token.yieldId).call()).toString();return P(o,3).toFixed()}async getWithdrawProportionAmount(a){let r=j(a.amount,3).toFixed();return(await(await this.getContract(a.cydToken.yieldAddress)).methods.getWithdrawProportionAmount(a.owner,r).call()).toString().split(",")}async buildRawTransactionDeposit(a){let{amount:r,owner:o,token:s,minVirtualAmount:c}=a,d=[{type:"uint256",value:r},{type:"uint256",value:s.yieldId},{type:"uint256",value:c}];return this.buildRawTransaction(a.token.yieldAddress,"deposit(uint256,uint256,uint256)",d,"0",o)}async buildRawTransactionWithdraw(a){let{amount:r,owner:o}=a,s=[{type:"uint256",value:r}];return this.buildRawTransaction(a.token.yieldAddress,"withdraw(uint256)",s,"0",o)}async buildRawTransaction(a,r,o,s,c){let d=await this.tronWeb.transactionBuilder.triggerSmartContract(a,r,{callValue:+s},o,c);if(!d?.result?.result)throw new f("Unknown error: "+JSON.stringify(d,null,2));return d.transaction}getContract(a){return this.tronWeb.contract(Xr.abi,a)}};function Yg(i){if(!bi(i))throw new Wa("Token does not support Yield")}function bi(i){return!!i.yieldAddress&&i.yieldId!==void 0}var Mr=class{constructor(n,a,r,o){this.api=n;this.nodeRpcUrlsConfig=a;this.params=r;this.tokenService=o;this.rawTxBuilder=new jr(n,a,r,o)}api;nodeRpcUrlsConfig;params;tokenService;rawTxBuilder;async getCYDTokens(){let n=[],a=await this.api.getChainDetailsMap("pool");return Object.values(a).forEach(r=>{if(r.yieldAddress){let o=r.tokens.find(c=>c.tokenAddress===r.yieldAddress),s=r.tokens.filter(bi);if(s.length>0){let c=o??{allbridgeChainId:r.allbridgeChainId,apr:"",apr30d:"",apr7d:"",bridgeId:r.bridgeId,paddingUtilId:r.paddingUtilId,bridgeAddress:r.bridgeAddress,chainId:r.chainId,chainName:r.name,chainSymbol:r.chainSymbol,chainType:r.chainType,confirmations:r.confirmations,decimals:3,feeShare:"",lpRate:"",name:"Core Yield",poolAddress:"",symbol:"CYD",tokenAddress:r.yieldAddress,transferTime:{},txCostAmount:{maxAmount:"0",swap:"0",transfer:"0"},yieldAddress:r.yieldAddress};n.push({...c,yieldAddress:r.yieldAddress,tokens:s})}}}),n}async getAllowance(n,a){return await this.tokenService.getAllowance({...n,spender:n.token.yieldAddress},a)}async checkAllowance(n,a){return this.tokenService.checkAllowance({...n,spender:n.token.yieldAddress},a)}async balanceOf(n,a){return Aa(n.token.chainSymbol,this.api,this.nodeRpcUrlsConfig,n.owner,a).balanceOf(n)}async getEstimatedAmountOnDeposit(n,a){return D(n.amount),O("amount",n.amount,n.token.decimals),Aa(n.token.chainSymbol,this.api,this.nodeRpcUrlsConfig,n.token.yieldAddress,a).getEstimatedAmountOnDeposit(n)}async getWithdrawAmounts(n,a){D(n.amount),O("amount",n.amount,3);let r=await Aa(n.cydToken.chainSymbol,this.api,this.nodeRpcUrlsConfig,n.owner,a).getWithdrawProportionAmount(n);return n.cydToken.tokens.filter(o=>r[o.yieldId]!==void 0).map(o=>({amount:P(r[o.yieldId],o.decimals).toFixed(),token:o}))}};function Aa(i,n,a,r,o){switch(x.getChainProperty(i).chainType){case"EVM":{if(o)return new pi(o,n);{let s=a.getNodeRpcUrl(i),c=new ua.Web3(s);return c.defaultReturnFormat={number:ua.FMT_NUMBER.STR,bytes:ua.FMT_BYTES.HEX},new pi(c,n)}}case"TRX":{if(o)return new mi(o,n);{let s=a.getNodeRpcUrl(i),c=new wg.TronWeb({fullHost:s});return c.setAddress(r),new mi(c,n)}}case"SOLANA":throw new J;case"SRB":throw new J;case"SUI":throw new J;case"ALG":throw new J;case"STX":throw new J}}var ve=require("big.js");function Fg(i,n,a){let r=rp(i,{decimals:n.decimals,feeShare:n.feeShare},n.poolInfo),o=op(r.amountIncludingCommissionInSystemPrecision,{decimals:a.decimals,feeShare:a.feeShare},a.poolInfo);return{swapToVUsdCalcResult:r,swapFromVUsdCalcResult:o}}function Gg(i,n,a){let r=sp(i,{decimals:a.decimals,feeShare:a.feeShare},a.poolInfo),o=cp(r.amountIncludingCommissionInSystemPrecision,{decimals:n.decimals,feeShare:n.feeShare},n.poolInfo);return{swapToVUsdCalcResult:r,swapFromVUsdCalcResult:o}}function rp(i,{feeShare:n,decimals:a},r){let o=(0,ve.Big)(i),s=o.times(n),c=o.minus(s);return{bridgeFeeInTokenPrecision:s.round().toFixed(),amountIncludingCommissionInSystemPrecision:Wg(Dt(c,a),r),amountExcludingCommissionInSystemPrecision:Wg(Dt(o,a),r)}}function Wg(i,n){if(i.eq(0))return"0";let a=(0,ve.Big)(n.tokenBalance).plus(i),r=kt(a.toFixed(),n.aValue,n.dValue);return(0,ve.Big)(n.vUsdBalance).minus(r).round().toFixed()}function op(i,{feeShare:n,decimals:a},r){if((0,ve.Big)(i).eq(0))return{bridgeFeeInTokenPrecision:"0",amountIncludingCommissionInTokenPrecision:"0",amountExcludingCommissionInTokenPrecision:"0"};let s=(0,ve.Big)(i).plus(r.vUsdBalance),c=kt(s,r.aValue,r.dValue),d=Ke((0,ve.Big)(r.tokenBalance).minus(c),a),g=(0,ve.Big)(d).times(n),l=(0,ve.Big)(d).minus(g).round();return{bridgeFeeInTokenPrecision:g.round().toFixed(),amountIncludingCommissionInTokenPrecision:l.toFixed(),amountExcludingCommissionInTokenPrecision:d.toFixed()}}function sp(i,{feeShare:n,decimals:a},r){let o=(0,ve.Big)(n).div((0,ve.Big)(1).minus(n)),s=(0,ve.Big)(i).times(o),c=(0,ve.Big)(i).plus(s);return{bridgeFeeInTokenPrecision:s.round().toFixed(),amountIncludingCommissionInSystemPrecision:Ng(Dt(c,a),r),amountExcludingCommissionInSystemPrecision:Ng(Dt(i,a),r)}}function Ng(i,n){let a=(0,ve.Big)(n.tokenBalance).minus(i),r=kt(a.toFixed(),n.aValue,n.dValue);return(0,ve.Big)(r).minus(n.vUsdBalance).round().toFixed()}function cp(i,{feeShare:n,decimals:a},r){if((0,ve.Big)(i).eq(0))return{bridgeFeeInTokenPrecision:"0",amountIncludingCommissionInTokenPrecision:"0",amountExcludingCommissionInTokenPrecision:"0"};let o=(0,ve.Big)(r.vUsdBalance).minus(i),s=kt(o.toFixed(),r.aValue,r.dValue),c=(0,ve.Big)(s).minus(r.tokenBalance),d=Ke(c.toFixed(),a),g=(0,ve.Big)(n).div((0,ve.Big)(1).minus(n)),l=(0,ve.Big)(d).times(g),A=(0,ve.Big)(d).plus(l);return{bridgeFeeInTokenPrecision:l.round().toFixed(),amountIncludingCommissionInTokenPrecision:A.round().toFixed(),amountExcludingCommissionInTokenPrecision:d.toFixed()}}var ln=require("big.js");function Zg(i,n,a,r,o){let s=St(i,n,a),c=Ke(s,n.decimals),d=Sa(s,r,o),g=(0,ln.Big)(i).times(n.feeShare),l=(0,ln.Big)(d).div((0,ln.Big)(1).minus(r.feeShare)).minus(d);return{sourceLPSwap:{fee:P(g,n.decimals).neg().round(n.decimals,ln.Big.roundUp).toFixed(),swap:P((0,ln.Big)(i).minus(c).minus(g),n.decimals).neg().round(n.decimals,ln.Big.roundUp).toFixed()},destLPSwap:{fee:P(l,r.decimals).neg().round(r.decimals,ln.Big.roundUp).toFixed(),swap:P(Ke(s,r.decimals).minus(d).minus(l),r.decimals).neg().round(r.decimals,ln.Big.roundUp).toFixed()}}}var Fs=require("@algorandfoundation/algokit-utils"),xr=require("algosdk");var Lr=class{constructor(n){this.nodeRpcUrlsConfig=n}nodeRpcUrlsConfig;async checkAssetOptIn(n,a,r){let o=this.getAlgorand(r);return Fi(n,a,o)}async buildRawTransactionAssetOptIn(n,a,r){let o=this.getAlgorand(r);typeof n=="string"&&(n=BigInt(n));let s=await o.createTransaction.assetOptIn({assetId:n,sender:a});return un(s)}async checkAppOptIn(n,a,r){let o=this.getAlgorand(r);return Gi(n,a,o)}async buildRawTransactionAppOptIn(n,a,r){let o=this.getAlgorand(r);typeof n=="string"&&(n=BigInt(n));let s=o.newGroup(),c=o.account.random();s.addAppCallMethodCall({appId:n,method:new xr.ABIMethod({name:"optInToApplication",desc:void 0,args:[],returns:{type:"void",desc:void 0},events:[],readonly:!1}),args:[],sender:a,signer:c,onComplete:xr.OnApplicationComplete.OptInOC});let{transactions:d}=await s.buildTransactions();return un(...d)}getAlgorand(n){if(n){let a=Fs.AlgorandClient.fromClients({algod:n});return a.setDefaultValidityWindow(100),a}else{let a=this.nodeRpcUrlsConfig.getNodeRpcUrl("ALG"),r=Fs.AlgorandClient.fromConfig({algodConfig:{server:a}});return r.setDefaultValidityWindow(100),r}}};var Hr=require("axios");var Sg="3.32.1";function kg(i){return Object.entries(i).reduce((n,a)=>{let r=a[0],o=a[1],s=up(r,o);return s&&(n[r]=s),n},{})}function Vg(i){let n={};for(let[a,r]of Object.entries(i)){let o=a;for(let s of r.tokens){let c=pa({chainSymbol:o,poolAddress:s.poolAddress}),d=We(s.poolInfo);n[c]={...s.poolInfo,imbalance:d}}}return n}function dp(i,n){let{name:a,...r}=i,{poolInfo:o,...s}=n;return{...s,...r,chainName:a}}function gp(i){switch(i){case"allbridge":return 1;case"wormhole":return 2;case"cctp":return 3;case"cctpV2":return 4;case"oft":return 5;case"xReserve":return 6}}function lp(i){return Object.entries(i).reduce((n,[a,r])=>(n[a]=Ap(r),n),{})}function Ap(i){return Object.entries(i).reduce((n,[a,r])=>{let o=gp(a);return o&&r!=null&&(n[o]=r),n},{})}function up(i,n){let a=x.getChainsProperties()[i];if(!a)return null;let r={...a,allbridgeChainId:n.chainId,bridgeId:n.bridgeId,paddingUtilId:n.paddingUtilId,bridgeAddress:n.bridgeAddress,oftBridgeAddress:n.oftBridgeAddress,yieldAddress:n.yieldAddress,abrPayer:n.abrPayer?{payerAddress:n.abrPayer.payerAddress,abrToken:{chainSymbol:i,tokenAddress:n.abrPayer.tokenAddress,decimals:n.abrPayer.tokenDecimals},payerAvailability:pp(n.abrPayer.payerAvailability)}:void 0,transferTime:lp(n.transferTime),txCostAmount:n.txCostAmount,confirmations:n.confirmations,suiAddresses:n.suiAddresses};return{...r,tokens:n.tokens.map(o=>dp(r,o))}}function pp(i){if(!i)return{};let n={};for(let[a,r]of Object.entries(i)){if(!r)continue;let o=mp[a];o&&(n[o]=!0)}return n}var mp=Object.fromEntries(Object.entries(to).map(([i,n])=>[n,Je[i]]));function pa(i){return i.chainSymbol+"_"+i.poolAddress}function Pg(i){let n=[];for(let[a,r]of Object.entries(i)){let o=a;for(let s of r.tokens)n.push({chainSymbol:o,poolAddress:s.poolAddress})}return n}function Xg(i){let n={};for(let[a,r]of Object.entries(i)){let o=a;for(let[s,c]of Object.entries(r))c.imbalance=We(c),n[pa({chainSymbol:o,poolAddress:s})]=c}return n}var ma=class{api;constructor(n){this.api=(0,Hr.create)({baseURL:n.coreApiUrl,headers:{Accept:"application/json",...n.coreApiHeaders,"x-Sdk-Agent":"AllbridgeCoreSDK/"+Sg},params:n.coreApiQueryParams}),n.coreApiHeadersProvider&&this.api.interceptors.request.use(async a=>{let r=await n.coreApiHeadersProvider?.();if(!r||Object.keys(r).length===0)return a;let o=Hr.AxiosHeaders.from(a.headers);for(let[s,c]of Object.entries(r))!c||o.has(s)||o.set(s,c);return a.headers=o,a})}async getTokenInfo(){let{data:n}=await this.api.get("/token-info",{params:{filter:"all"}});return{chainDetailsMap:kg(n),poolInfoMap:Vg(n)}}async getPendingInfo(){let{data:n}=await this.api.get("/pending-info");return n}async getGasBalance(n,a){let{data:r}=await this.api.get(`/check/${n}/${a}`);return r}async getTransferStatus(n,a){let{data:r}=await this.api.get(`/chain/${n}/${a}`);return r}async getReceiveTransactionCost(n){if(n.messenger===5&&!n.sourceToken)throw new Ta("For OFT sourceToken required");let{data:a}=await this.api.post("/receive-fee",n,{headers:{"Content-Type":"application/json"}});return{exchangeRate:a.exchangeRate,fee:a.fee,sourceNativeTokenPrice:a.sourceNativeTokenPrice,abrExchangeRate:a.abrExchangeRate,adminFeeShareWithExtras:a.adminFeeShareWithExtras}}async getPoolInfoMap(n){let a=n instanceof Array?n:[n],{data:r}=await this.api.post("/pool-info",{pools:a},{headers:{"Content-Type":"application/json"}});return Xg(r)}};var Gs=20*1e3,bp=55*1e3,ba=class{constructor(n){this.apiClient=n;this.tokenInfoCache=new sn({defaultTtl:bp}),this.receivedTransactionCache=new sn({defaultTtl:Gs}),this.pendingInfoCache=new sn({defaultTtl:Gs}),this.gasBalanceCache=new sn({defaultTtl:Gs})}apiClient;tokenInfoCache;pendingInfoCache;gasBalanceCache;receivedTransactionCache;getTokenInfo(){let n="TOKEN_INFO_CACHE_KEY",a=this.tokenInfoCache.get(n);if(a)return a;let r=this.apiClient.getTokenInfo();return this.tokenInfoCache.put(n,r),r}async getGasBalance(n,a){let r=`GAS_BALANCE_${n}_${a}`,o=this.gasBalanceCache.get(r);if(o)return o;let s=this.apiClient.getGasBalance(n,a);return this.gasBalanceCache.put(r,s),s}async getPendingInfo(){let n="PENDING_INFO_CACHE_KEY",a=this.pendingInfoCache.get(n);if(a)return a;let r=this.apiClient.getPendingInfo();return this.pendingInfoCache.put(n,r),r}async getReceiveTransactionCost(n){let a=`RECEIVE_TX_COST_${n.sourceChainId}_${n.destinationChainId}_${n.messenger}${n.sourceToken?"_"+n.sourceToken:""}`,r=this.receivedTransactionCache.get(a);if(r)return r;let o=await this.apiClient.getReceiveTransactionCost(n);return this.receivedTransactionCache.put(a,o),o}async getTransferStatus(n,a){return this.apiClient.getTransferStatus(n,a)}async getPoolInfoMap(n){return this.apiClient.getPoolInfoMap(n)}};var ya=class{constructor(n){this.apiClient=n}apiClient;async getChainDetailsMap(){return(await this.apiClient.getTokenInfo()).chainDetailsMap}async tokens(){let n=await this.getChainDetailsMap();return Object.values(n).flatMap(a=>a.tokens)}async getPendingInfo(){return this.apiClient.getPendingInfo()}async getGasBalance(n,a){return this.apiClient.getGasBalance(n,a)}async getChainDetailsMapAndPoolInfoMap(){return await this.apiClient.getTokenInfo()}async getTransferStatus(n,a){return await this.apiClient.getTransferStatus(n,a)}async getReceiveTransactionCost(n){return await this.apiClient.getReceiveTransactionCost(n)}async getPoolInfoMap(n){return await this.apiClient.getPoolInfoMap(n)}};var Ca=class{constructor(n,a){this.client=n;this.isStaging=a.coreApiQueryParams?.staging==="true"}client;isStaging;async getChainDetailsMap(n){let a=await this.client.getChainDetailsMap(),r={};for(let o in a){let s=a[o];s&&(r[o]={...s,tokens:jg(s.tokens,n,this.isStaging)})}return r}async tokens(n){return jg(await this.client.tokens(),n,this.isStaging)}async getPendingInfo(){return this.client.getPendingInfo()}async getGasBalance(n,a){return this.client.getGasBalance(n,a)}async getTransferStatus(n,a){return await this.client.getTransferStatus(n,a)}async getReceiveTransactionCost(n){return await this.client.getReceiveTransactionCost(n)}cachePut(n,a){return this.client.cachePut(n,a)}getPoolInfoByKey(n){return this.client.getPoolInfoByKey(n)}refreshPoolInfo(n){return this.client.refreshPoolInfo(n)}};function jg(i,n,a){return i.filter(r=>a?!0:r.flags[n]).map(yp)}function yp(i){let{flags:n,...a}=i;return a}var Cp=55*1e3,Ia=class{constructor(n){this.client=n;this.poolInfoCache=new Zs}client;poolInfoCache;async getChainDetailsMap(){return(await this.client.getChainDetailsMapAndPoolInfoMap()).chainDetailsMap}async tokens(){return await this.client.tokens()}getTransferStatus(n,a){return this.client.getTransferStatus(n,a)}getReceiveTransactionCost(n){return this.client.getReceiveTransactionCost(n)}getPendingInfo(){return this.client.getPendingInfo()}getGasBalance(n,a){return this.client.getGasBalance(n,a)}async getPoolInfoByKey(n){this.poolInfoCache.putAllIfNotExists((await this.client.getChainDetailsMapAndPoolInfoMap()).poolInfoMap);let a=this.poolInfoCache.get(n);if(a)return a;{let r=await this.client.getPoolInfoMap(n);this.poolInfoCache.putAll(r);let o=r[pa(n)];if(o)return o;throw new f("Cannot find pool info for "+n.poolAddress+" on chain "+n.chainSymbol)}}async refreshPoolInfo(n){let a;if(n)this.poolInfoCache.putAllIfNotExists((await this.client.getChainDetailsMapAndPoolInfoMap()).poolInfoMap),a=await this.client.getPoolInfoMap(n);else{let r=await this.client.getChainDetailsMapAndPoolInfoMap();a=await this.client.getPoolInfoMap(Pg(r.chainDetailsMap))}this.poolInfoCache.putAll(a)}cachePut(n,a){this.poolInfoCache.put(pa(n),a)}},Zs=class{cache;constructor(){this.cache=new sn({defaultTtl:Cp})}putAll(n){for(let[a,r]of Object.entries(n))this.cache.put(a,r)}putAllIfNotExists(n){for(let[a,r]of Object.entries(n))this.cache.get(a)||this.cache.put(a,r)}put(n,a){this.cache.put(n,a)}get(n){let a=pa(n);return this.cache.get(a)}};var Vs=require("@algorandfoundation/algokit-utils"),xg=require("big.js"),Hg=require("tronweb"),Jg=require("web3");var Ss=require("big.js"),He=class{async checkAllowance(n){let a=await this.getAllowance(n);return(0,Ss.Big)(a).gte((0,Ss.Big)(n.amount))}};var yi=class extends He{constructor(a,r){super();this.algorand=a;this.api=r;a.setDefaultValidityWindow(100)}algorand;api;chainType="ALG";approve(a){throw new J}buildRawTransactionApprove(a){throw new J}getAllowance(a){throw new J}async getNativeTokenBalance(a){let{account:r}=a;return(await this.algorand.account.getInformation(r)).balance.microAlgo.toString()}async getTokenBalance(a){let{account:r,token:o}=a;try{return(await this.algorand.asset.getAccountInformation(r,BigInt(o.tokenAddress))).balance.toString()}catch(s){if(s instanceof Error)return s.message.includes("account asset info not found"),"0";throw s}}};var Ip={abi:[{inputs:[{internalType:"string",name:"name_",type:"string"},{internalType:"string",name:"symbol_",type:"string"}],stateMutability:"nonpayable",type:"constructor"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"owner",type:"address"},{indexed:!0,internalType:"address",name:"spender",type:"address"},{indexed:!1,internalType:"uint256",name:"value",type:"uint256"}],name:"Approval",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"from",type:"address"},{indexed:!0,internalType:"address",name:"to",type:"address"},{indexed:!1,internalType:"uint256",name:"value",type:"uint256"}],name:"Transfer",type:"event"},{inputs:[{internalType:"address",name:"owner",type:"address"},{internalType:"address",name:"spender",type:"address"}],name:"allowance",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"approve",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"account",type:"address"}],name:"balanceOf",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"decimals",outputs:[{internalType:"uint8",name:"",type:"uint8"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"subtractedValue",type:"uint256"}],name:"decreaseAllowance",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"addedValue",type:"uint256"}],name:"increaseAllowance",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"name",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"},{inputs:[],name:"symbol",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"},{inputs:[],name:"totalSupply",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"to",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"transfer",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"from",type:"address"},{internalType:"address",name:"to",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"transferFrom",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"}]},Jr=Ip;var hp="0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",vp="0xdac17f958d2ee523a2206206994597c13d831ec7",fp=1e5,Ci=class extends He{constructor(a,r){super();this.web3=a;this.api=r}web3;api;chainType="EVM";getAllowance(a){let r=a.token.tokenAddress,o=a.owner,s=a.spender;return this.getAllowanceByTokenAddress(r,o,s)}getAllowanceByTokenAddress(a,r,o){return this.getERC20Contract(a).methods.allowance(r,o).call()}async getTokenBalance(a){return await this.getERC20Contract(a.token.tokenAddress).methods.balanceOf(a.account).call()}async getNativeTokenBalance(a){return(await this.web3.eth.getBalance(a.account)).toString()}async approve(a){if(this.isUsdt(a.tokenAddress)&&await this.getAllowanceByTokenAddress(a.tokenAddress,a.owner,a.spender)!=="0"){let s=await this.buildRawTransactionApprove({...a,amount:"0"});await this.sendRawTransaction(s,a.chainSymbol)}let r=await this.buildRawTransactionApprove(a);return await this.sendRawTransaction(r,a.chainSymbol)}isUsdt(a){return a.toLowerCase()===vp}buildRawTransactionApprove(a){let{tokenAddress:r,spender:o,owner:s,amount:c}=a,g=this.getERC20Contract(r).methods.approve(o,c==null?hp:fr(c));return Promise.resolve({from:s,to:r,value:"0",data:g.encodeABI()})}async sendRawTransaction(a,r){let o=a,s={maxPriorityFeePerGas:void 0,maxFeePerGas:void 0};r==="POL"?o.gas=fp:o.gas=await this.web3.eth.estimateGas(a);let{transactionHash:c}=await this.web3.eth.sendTransaction({...o,...s});return{txId:c.toString()}}getERC20Contract(a){return new this.web3.eth.Contract(Jr.abi,a)}};var Mg=require("@coral-xyz/anchor"),Mn=require("@solana/web3.js");var Or=class extends He{constructor(a,r){super();this.solanaRpcUrl=a;this.api=r}solanaRpcUrl;api;chainType="SOLANA";approve(a){throw new J}buildRawTransactionApprove(a){throw new J}buildAnchorProvider(a){let r=new Mn.Connection(this.solanaRpcUrl,"confirmed"),o=new Mn.PublicKey(a);return new Mg.AnchorProvider(r,{publicKey:o},{preflightCommitment:"confirmed",commitment:"confirmed"})}getAllowance(a){throw new J}async getTokenBalance(a){let{account:r,token:o}=a;try{let s=_e(new Mn.PublicKey(r),new Mn.PublicKey(o.tokenAddress));return(await zn(s,this.buildAnchorProvider(r))).amount.toString()}catch(s){if(s instanceof Error)return s.message.startsWith("Account does not exist"),"0";throw s}}async getNativeTokenBalance(a){return(await this.buildAnchorProvider(a.account).connection.getBalance(new Mn.PublicKey(a.account))).toString()}};var ks=require("@stellar/stellar-sdk");var zr=class extends He{constructor(a,r,o){super();this.nodeRpcUrlsConfig=a;this.params=r;this.api=o}nodeRpcUrlsConfig;params;api;chainType="SRB";getAllowance(){throw new J}async getTokenBalance(a){if(!a.token.originTokenAddress)throw new f("OriginTokenAddress missing");let[r,o]=a.token.originTokenAddress.split(":"),s=new ks.Horizon.Server(this.nodeRpcUrlsConfig.getNodeRpcUrl("STLR")),c;try{c=await s.loadAccount(a.account)}catch(l){if(l instanceof ks.NotFoundError)return"0";throw l}let g=c.balances.find(l=>(l.asset_type==="credit_alphanum4"||l.asset_type==="credit_alphanum12")&&l.asset_code==r&&l.asset_issuer==o);return g?.balance?j(g.balance,x.getChainDecimalsByType(x.getChainProperty(a.token.chainSymbol).chainType)).toFixed():"0"}async getNativeTokenBalance(a){let c=(await new ks.Horizon.Server(this.nodeRpcUrlsConfig.getNodeRpcUrl("STLR")).loadAccount(a.account)).balances.find(d=>d.asset_type==="native");return c?.balance?j(c.balance,x.getChainDecimalsByType(x.getChainProperty(a.chainSymbol).chainType)).toFixed():"0"}approve(){throw new J}buildRawTransactionApprove(){throw new J}};var Dr=require("@clarigen/core"),Lg=require("@stacks/network");var Ur=class extends He{constructor(a,r,o){super();this.nodeRpcUrl=a;this.params=r;this.api=o;let s=(0,Lg.createNetwork)({network:this.params.stxIsTestnet?"testnet":"mainnet",client:{baseUrl:this.nodeRpcUrl},apiKey:this.params.stxHeroApiKey});this.client=new Dr.ClarigenClient(s,this.params.stxHeroApiKey)}nodeRpcUrl;params;api;chainType="STX";client;async getTokenBalance(a){let r=(0,Dr.contractFactory)(At.ftToken,a.token.tokenAddress);return(await this.client.roOk(r.getBalance({owner:a.account}))).toString()}async getNativeTokenBalance(a){let r=`${this.nodeRpcUrl}/extended/v1/address/${a.account}/stx`,o=await fetch(r,{headers:this.params.stxHeroApiKey?{"x-api-key":this.params.stxHeroApiKey}:void 0});if(!o.ok)throw new Error(`Failed to fetch account: ${o.status}`);let c=(await o.json()).balance;return BigInt(c).toString()}getAllowance(a){throw new J}checkAllowance(a){throw new J}approve(a){throw new J}buildRawTransactionApprove(a){throw new J}};var Qr=class extends He{constructor(a,r,o){super();this.suiRpcUrl=a;this.params=r;this.api=o;this.suiClient=new Sn({url:this.suiRpcUrl,network:r.suiIsTestnet?"testnet":"mainnet"})}suiRpcUrl;params;api;chainType="SUI";suiClient;approve(a){throw new J}buildRawTransactionApprove(a){throw new J}getAllowance(a){throw new J}async getTokenBalance(a){if(!a.token.originTokenAddress)throw new f("SUI token must contain 'originTokenAddress'");return(await this.suiClient.getBalance({owner:a.account,coinType:a.token.originTokenAddress})).totalBalance}async getNativeTokenBalance(a){let r=await Ot(o=>this.suiClient.getCoins({owner:a.account,cursor:o}));return r.length===0?"0":r.reduce((o,s)=>o+BigInt(s.balance),BigInt(0)).toString()}};var Rp="0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",Ii=class extends He{constructor(a,r){super();this.tronWeb=a;this.api=r}tronWeb;api;chainType="TRX";async getAllowance(a){let{token:{tokenAddress:r},owner:o}=a;return(await(await this.getContract(r)).methods.allowance(o,a.spender).call()).toString()}async getTokenBalance(a){return(await(await this.getContract(a.token.tokenAddress)).balanceOf(a.account).call()).toString()}async getNativeTokenBalance(a){return(await this.tronWeb.trx.getBalance(a.account)).toString()}async approve(a){let r=await this.buildRawTransactionApprove(a);return await Rr(this.tronWeb,r)}async buildRawTransactionApprove(a){let{tokenAddress:r,spender:o,owner:s,amount:c}=a,d=c==null?Rp:fr(c),g=[{type:"address",value:o},{type:"uint256",value:d}];return this.buildRawTransaction(r,"approve(address,uint256)",g,"0",s)}getContract(a){return this.tronWeb.contract(Jr.abi,a)}async buildRawTransaction(a,r,o,s,c){let d=await this.tronWeb.transactionBuilder.triggerSmartContract(a,r,{callValue:+s},o,c);if(!d?.result?.result)throw new f("Unknown error: "+JSON.stringify(d,null,2));return d.transaction}};var ha=class{constructor(n,a,r){this.api=n;this.nodeRpcUrlsConfig=a;this.params=r}api;nodeRpcUrlsConfig;params;async getAllowance(n,a){let r=await this.getChainTokenService(n.token.chainSymbol,n.owner,a).getAllowance(n);return P(r,n.token.decimals).toFixed()}async checkAllowance(n,a){return D(n.amount),O("amount",n.amount,n.token.decimals),this.getChainTokenService(n.token.chainSymbol,n.owner,a).checkAllowance(this.prepareCheckAllowanceParams(n))}async approve(n,a){return a.amount&&(no(a.amount),O("amount",a.amount,a.token.decimals)),this.getChainTokenService(a.token.chainSymbol,a.owner,n).approve(this.prepareApproveParams(a))}async buildRawTransactionApprove(n,a){return n.amount&&(no(n.amount),O("amount",n.amount,n.token.decimals)),this.getChainTokenService(n.token.chainSymbol,n.owner,a).buildRawTransactionApprove(this.prepareApproveParams(n))}async getTokenBalance(n,a){let r=await this.getChainTokenService(n.token.chainSymbol,n.account,a).getTokenBalance(n);return n.token.decimals?P(r,n.token.decimals).toFixed():r}async getNativeTokenBalance(n,a){let r=await this.getChainTokenService(n.chainSymbol,n.account,a).getNativeTokenBalance(n);return{int:r,float:P(r,x.getChainDecimalsByType(x.getChainProperty(n.chainSymbol).chainType)).toFixed()}}getChainTokenService(n,a,r){switch(x.getChainProperty(n).chainType){case"EVM":{if(r)return new Ci(r,this.api);{let o=this.nodeRpcUrlsConfig.getNodeRpcUrl(n);return new Ci(new Jg.Web3(o),this.api)}}case"TRX":{if(r)return new Ii(r,this.api);{let o=this.nodeRpcUrlsConfig.getNodeRpcUrl(n),s=new Hg.TronWeb({fullHost:o});return s.setAddress(a),new Ii(s,this.api)}}case"SOLANA":{let o=this.nodeRpcUrlsConfig.getNodeRpcUrl(n);return new Or(o,this.api)}case"SRB":return new zr(this.nodeRpcUrlsConfig,this.params,this.api);case"SUI":return new Qr(this.nodeRpcUrlsConfig.getNodeRpcUrl(n),this.params,this.api);case"ALG":if(r){let o=r,s=Vs.AlgorandClient.fromClients({algod:o});return new yi(s,this.api)}else{let o=this.nodeRpcUrlsConfig.getNodeRpcUrl(n),s=Vs.AlgorandClient.fromConfig({algodConfig:{server:o}});return new yi(s,this.api)}case"STX":{let o=this.nodeRpcUrlsConfig.getNodeRpcUrl(n);return new Ur(o,this.params,this.api)}}}prepareCheckAllowanceParams(n){return{...n,amount:j(n.amount,n.token.decimals)}}prepareApproveParams(n){return{tokenAddress:n.token.tokenAddress,owner:n.owner,spender:n.spender,chainSymbol:n.token.chainSymbol,amount:n.amount==null?void 0:(0,xg.Big)(n.amount).toFixed()}}};var Kr=class{constructor(n,a){this.nodeRpcUrlsConfig=n;this.params=a;let r=new ma(a),o=new ba(r),s=new ya(o),c=new Ia(s);this.api=new Ca(c,a),this.tokenService=new ha(this.api,n,a)}nodeRpcUrlsConfig;params;api;tokenService;buildRawTransactionApprove(n,a){return this.tokenService.buildRawTransactionApprove(n,a)}checkAllowance(n,a){return this.tokenService.checkAllowance(n,a)}getAllowance(n,a){return this.tokenService.getAllowance(n,a)}};var va=require("@solana/web3.js");var Er=class{constructor(n,a){this.nodeRpcUrlsConfig=n;this.params=a}nodeRpcUrlsConfig;params;async addMemoToTx(n,a){if(a.length>28)throw new f("InvalidArgumentException memo cannot be more than 28 characters");let r=new va.Connection(this.nodeRpcUrlsConfig.getNodeRpcUrl("SOL"),"confirmed"),o=await Yn(n,r),s=va.TransactionMessage.decompile(n.message,{addressLookupTableAccounts:o}),c=s.instructions[s.instructions.length-1];if(!c?.keys)throw new f("Last instruction or its keys are invalid.");c.keys.push({pubkey:new va.PublicKey(Buffer.from(a)),isSigner:!1,isWritable:!1}),n.message=s.compileToV0Message(o)}};var ye=require("@stellar/stellar-sdk");var MZ=require("@stellar/stellar-sdk"),Tp=MZ.contract.Spec,Bp=MZ.contract.Client;var hi=class extends Bp{constructor(a){super(new Tp(["AAAAAAAAAYlSZXR1cm5zIHRoZSBhbGxvd2FuY2UgZm9yIGBzcGVuZGVyYCB0byB0cmFuc2ZlciBmcm9tIGBmcm9tYC4KClRoZSBhbW91bnQgcmV0dXJuZWQgaXMgdGhlIGFtb3VudCB0aGF0IHNwZW5kZXIgaXMgYWxsb3dlZCB0byB0cmFuc2ZlcgpvdXQgb2YgZnJvbSdzIGJhbGFuY2UuIFdoZW4gdGhlIHNwZW5kZXIgdHJhbnNmZXJzIGFtb3VudHMsIHRoZSBhbGxvd2FuY2UKd2lsbCBiZSByZWR1Y2VkIGJ5IHRoZSBhbW91bnQgdHJhbnNmZXJlZC4KCiMgQXJndW1lbnRzCgoqIGBmcm9tYCAtIFRoZSBhZGRyZXNzIGhvbGRpbmcgdGhlIGJhbGFuY2Ugb2YgdG9rZW5zIHRvIGJlIGRyYXduIGZyb20uCiogYHNwZW5kZXJgIC0gVGhlIGFkZHJlc3Mgc3BlbmRpbmcgdGhlIHRva2VucyBoZWxkIGJ5IGBmcm9tYC4AAAAAAAAJYWxsb3dhbmNlAAAAAAAAAgAAAAAAAAAEZnJvbQAAABMAAAAAAAAAB3NwZW5kZXIAAAAAEwAAAAEAAAAL","AAAAAAAAAIlSZXR1cm5zIHRydWUgaWYgYGlkYCBpcyBhdXRob3JpemVkIHRvIHVzZSBpdHMgYmFsYW5jZS4KCiMgQXJndW1lbnRzCgoqIGBpZGAgLSBUaGUgYWRkcmVzcyBmb3Igd2hpY2ggdG9rZW4gYXV0aG9yaXphdGlvbiBpcyBiZWluZyBjaGVja2VkLgAAAAAAAAphdXRob3JpemVkAAAAAAABAAAAAAAAAAJpZAAAAAAAEwAAAAEAAAAB","AAAAAAAAA55TZXQgdGhlIGFsbG93YW5jZSBieSBgYW1vdW50YCBmb3IgYHNwZW5kZXJgIHRvIHRyYW5zZmVyL2J1cm4gZnJvbQpgZnJvbWAuCgpUaGUgYW1vdW50IHNldCBpcyB0aGUgYW1vdW50IHRoYXQgc3BlbmRlciBpcyBhcHByb3ZlZCB0byB0cmFuc2ZlciBvdXQgb2YKZnJvbSdzIGJhbGFuY2UuIFRoZSBzcGVuZGVyIHdpbGwgYmUgYWxsb3dlZCB0byB0cmFuc2ZlciBhbW91bnRzLCBhbmQKd2hlbiBhbiBhbW91bnQgaXMgdHJhbnNmZXJyZWQgdGhlIGFsbG93YW5jZSB3aWxsIGJlIHJlZHVjZWQgYnkgdGhlCmFtb3VudCB0cmFuc2ZlcmVkLgoKIyBBcmd1bWVudHMKCiogYGZyb21gIC0gVGhlIGFkZHJlc3MgaG9sZGluZyB0aGUgYmFsYW5jZSBvZiB0b2tlbnMgdG8gYmUgZHJhd24gZnJvbS4KKiBgc3BlbmRlcmAgLSBUaGUgYWRkcmVzcyBiZWluZyBhdXRob3JpemVkIHRvIHNwZW5kIHRoZSB0b2tlbnMgaGVsZCBieQpgZnJvbWAuCiogYGFtb3VudGAgLSBUaGUgdG9rZW5zIHRvIGJlIG1hZGUgYXZhaWxhYmxlIHRvIGBzcGVuZGVyYC4KKiBgZXhwaXJhdGlvbl9sZWRnZXJgIC0gVGhlIGxlZGdlciBudW1iZXIgd2hlcmUgdGhpcyBhbGxvd2FuY2UgZXhwaXJlcy4gQ2Fubm90CmJlIGxlc3MgdGhhbiB0aGUgY3VycmVudCBsZWRnZXIgbnVtYmVyIHVubGVzcyB0aGUgYW1vdW50IGlzIGJlaW5nIHNldCB0byAwLgpBbiBleHBpcmVkIGVudHJ5ICh3aGVyZSBleHBpcmF0aW9uX2xlZGdlciA8IHRoZSBjdXJyZW50IGxlZGdlciBudW1iZXIpCnNob3VsZCBiZSB0cmVhdGVkIGFzIGEgMCBhbW91bnQgYWxsb3dhbmNlLgoKIyBFdmVudHMKCkVtaXRzIGFuIGV2ZW50IHdpdGggdG9waWNzIGBbImFwcHJvdmUiLCBmcm9tOiBBZGRyZXNzLApzcGVuZGVyOiBBZGRyZXNzXSwgZGF0YSA9IFthbW91bnQ6IGkxMjgsIGV4cGlyYXRpb25fbGVkZ2VyOiB1MzJdYAAAAAAAB2FwcHJvdmUAAAAABAAAAAAAAAAEZnJvbQAAABMAAAAAAAAAB3NwZW5kZXIAAAAAEwAAAAAAAAAGYW1vdW50AAAAAAALAAAAAAAAABFleHBpcmF0aW9uX2xlZGdlcgAAAAAAAAQAAAAA","AAAAAAAAAJhSZXR1cm5zIHRoZSBiYWxhbmNlIG9mIGBpZGAuCgojIEFyZ3VtZW50cwoKKiBgaWRgIC0gVGhlIGFkZHJlc3MgZm9yIHdoaWNoIGEgYmFsYW5jZSBpcyBiZWluZyBxdWVyaWVkLiBJZiB0aGUKYWRkcmVzcyBoYXMgbm8gZXhpc3RpbmcgYmFsYW5jZSwgcmV0dXJucyAwLgAAAAdiYWxhbmNlAAAAAAEAAAAAAAAAAmlkAAAAAAATAAAAAQAAAAs=","AAAAAAAAAWRCdXJuIGBhbW91bnRgIGZyb20gYGZyb21gLgoKUmVkdWNlcyBmcm9tJ3MgYmFsYW5jZSBieSB0aGUgYW1vdW50LCB3aXRob3V0IHRyYW5zZmVycmluZyB0aGUgYmFsYW5jZQp0byBhbm90aGVyIGhvbGRlcidzIGJhbGFuY2UuCgojIEFyZ3VtZW50cwoKKiBgZnJvbWAgLSBUaGUgYWRkcmVzcyBob2xkaW5nIHRoZSBiYWxhbmNlIG9mIHRva2VucyB3aGljaCB3aWxsIGJlCmJ1cm5lZCBmcm9tLgoqIGBhbW91bnRgIC0gVGhlIGFtb3VudCBvZiB0b2tlbnMgdG8gYmUgYnVybmVkLgoKIyBFdmVudHMKCkVtaXRzIGFuIGV2ZW50IHdpdGggdG9waWNzIGBbImJ1cm4iLCBmcm9tOiBBZGRyZXNzXSwgZGF0YSA9IFthbW91bnQ6CmkxMjhdYAAAAARidXJuAAAAAgAAAAAAAAAEZnJvbQAAABMAAAAAAAAABmFtb3VudAAAAAAACwAAAAA=","AAAAAAAAAtxCdXJuIGBhbW91bnRgIGZyb20gYGZyb21gLCBjb25zdW1pbmcgdGhlIGFsbG93YW5jZSBvZiBgc3BlbmRlcmAuCgpSZWR1Y2VzIGZyb20ncyBiYWxhbmNlIGJ5IHRoZSBhbW91bnQsIHdpdGhvdXQgdHJhbnNmZXJyaW5nIHRoZSBiYWxhbmNlCnRvIGFub3RoZXIgaG9sZGVyJ3MgYmFsYW5jZS4KClRoZSBzcGVuZGVyIHdpbGwgYmUgYWxsb3dlZCB0byBidXJuIHRoZSBhbW91bnQgZnJvbSBmcm9tJ3MgYmFsYW5jZSwgaWYKdGhlIGFtb3VudCBpcyBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gdGhlIGFsbG93YW5jZSB0aGF0IHRoZSBzcGVuZGVyIGhhcwpvbiB0aGUgZnJvbSdzIGJhbGFuY2UuIFRoZSBzcGVuZGVyJ3MgYWxsb3dhbmNlIG9uIGZyb20ncyBiYWxhbmNlIHdpbGwgYmUKcmVkdWNlZCBieSB0aGUgYW1vdW50LgoKIyBBcmd1bWVudHMKCiogYHNwZW5kZXJgIC0gVGhlIGFkZHJlc3MgYXV0aG9yaXppbmcgdGhlIGJ1cm4sIGFuZCBoYXZpbmcgaXRzIGFsbG93YW5jZQpjb25zdW1lZCBkdXJpbmcgdGhlIGJ1cm4uCiogYGZyb21gIC0gVGhlIGFkZHJlc3MgaG9sZGluZyB0aGUgYmFsYW5jZSBvZiB0b2tlbnMgd2hpY2ggd2lsbCBiZQpidXJuZWQgZnJvbS4KKiBgYW1vdW50YCAtIFRoZSBhbW91bnQgb2YgdG9rZW5zIHRvIGJlIGJ1cm5lZC4KCiMgRXZlbnRzCgpFbWl0cyBhbiBldmVudCB3aXRoIHRvcGljcyBgWyJidXJuIiwgZnJvbTogQWRkcmVzc10sIGRhdGEgPSBbYW1vdW50OgppMTI4XWAAAAAJYnVybl9mcm9tAAAAAAAAAwAAAAAAAAAHc3BlbmRlcgAAAAATAAAAAAAAAARmcm9tAAAAEwAAAAAAAAAGYW1vdW50AAAAAAALAAAAAA==","AAAAAAAAAVNDbGF3YmFjayBgYW1vdW50YCBmcm9tIGBmcm9tYCBhY2NvdW50LiBgYW1vdW50YCBpcyBidXJuZWQgaW4gdGhlCmNsYXdiYWNrIHByb2Nlc3MuCgojIEFyZ3VtZW50cwoKKiBgZnJvbWAgLSBUaGUgYWRkcmVzcyBob2xkaW5nIHRoZSBiYWxhbmNlIGZyb20gd2hpY2ggdGhlIGNsYXdiYWNrIHdpbGwKdGFrZSB0b2tlbnMuCiogYGFtb3VudGAgLSBUaGUgYW1vdW50IG9mIHRva2VucyB0byBiZSBjbGF3ZWQgYmFjay4KCiMgRXZlbnRzCgpFbWl0cyBhbiBldmVudCB3aXRoIHRvcGljcyBgWyJjbGF3YmFjayIsIGFkbWluOiBBZGRyZXNzLCB0bzogQWRkcmVzc10sCmRhdGEgPSBbYW1vdW50OiBpMTI4XWAAAAAACGNsYXdiYWNrAAAAAgAAAAAAAAAEZnJvbQAAABMAAAAAAAAABmFtb3VudAAAAAAACwAAAAA=","AAAAAAAAAIBSZXR1cm5zIHRoZSBudW1iZXIgb2YgZGVjaW1hbHMgdXNlZCB0byByZXByZXNlbnQgYW1vdW50cyBvZiB0aGlzIHRva2VuLgoKIyBQYW5pY3MKCklmIHRoZSBjb250cmFjdCBoYXMgbm90IHlldCBiZWVuIGluaXRpYWxpemVkLgAAAAhkZWNpbWFscwAAAAAAAAABAAAABA==","AAAAAAAAAPVNaW50cyBgYW1vdW50YCB0byBgdG9gLgoKIyBBcmd1bWVudHMKCiogYHRvYCAtIFRoZSBhZGRyZXNzIHdoaWNoIHdpbGwgcmVjZWl2ZSB0aGUgbWludGVkIHRva2Vucy4KKiBgYW1vdW50YCAtIFRoZSBhbW91bnQgb2YgdG9rZW5zIHRvIGJlIG1pbnRlZC4KCiMgRXZlbnRzCgpFbWl0cyBhbiBldmVudCB3aXRoIHRvcGljcyBgWyJtaW50IiwgYWRtaW46IEFkZHJlc3MsIHRvOiBBZGRyZXNzXSwgZGF0YQo9IFthbW91bnQ6IGkxMjhdYAAAAAAAAARtaW50AAAAAgAAAAAAAAACdG8AAAAAABMAAAAAAAAABmFtb3VudAAAAAAACwAAAAA=","AAAAAAAAAFlSZXR1cm5zIHRoZSBuYW1lIGZvciB0aGlzIHRva2VuLgoKIyBQYW5pY3MKCklmIHRoZSBjb250cmFjdCBoYXMgbm90IHlldCBiZWVuIGluaXRpYWxpemVkLgAAAAAAAARuYW1lAAAAAAAAAAEAAAAQ","AAAAAAAAAQxTZXRzIHRoZSBhZG1pbmlzdHJhdG9yIHRvIHRoZSBzcGVjaWZpZWQgYWRkcmVzcyBgbmV3X2FkbWluYC4KCiMgQXJndW1lbnRzCgoqIGBuZXdfYWRtaW5gIC0gVGhlIGFkZHJlc3Mgd2hpY2ggd2lsbCBoZW5jZWZvcnRoIGJlIHRoZSBhZG1pbmlzdHJhdG9yCm9mIHRoaXMgdG9rZW4gY29udHJhY3QuCgojIEV2ZW50cwoKRW1pdHMgYW4gZXZlbnQgd2l0aCB0b3BpY3MgYFsic2V0X2FkbWluIiwgYWRtaW46IEFkZHJlc3NdLCBkYXRhID0KW25ld19hZG1pbjogQWRkcmVzc11gAAAACXNldF9hZG1pbgAAAAAAAAEAAAAAAAAACW5ld19hZG1pbgAAAAAAABMAAAAA","AAAAAAAAAEZSZXR1cm5zIHRoZSBhZG1pbiBvZiB0aGUgY29udHJhY3QuCgojIFBhbmljcwoKSWYgdGhlIGFkbWluIGlzIG5vdCBzZXQuAAAAAAAFYWRtaW4AAAAAAAAAAAAAAQAAABM=","AAAAAAAAAVBTZXRzIHdoZXRoZXIgdGhlIGFjY291bnQgaXMgYXV0aG9yaXplZCB0byB1c2UgaXRzIGJhbGFuY2UuIElmCmBhdXRob3JpemVkYCBpcyB0cnVlLCBgaWRgIHNob3VsZCBiZSBhYmxlIHRvIHVzZSBpdHMgYmFsYW5jZS4KCiMgQXJndW1lbnRzCgoqIGBpZGAgLSBUaGUgYWRkcmVzcyBiZWluZyAoZGUtKWF1dGhvcml6ZWQuCiogYGF1dGhvcml6ZWAgLSBXaGV0aGVyIG9yIG5vdCBgaWRgIGNhbiB1c2UgaXRzIGJhbGFuY2UuCgojIEV2ZW50cwoKRW1pdHMgYW4gZXZlbnQgd2l0aCB0b3BpY3MgYFsic2V0X2F1dGhvcml6ZWQiLCBpZDogQWRkcmVzc10sIGRhdGEgPQpbYXV0aG9yaXplOiBib29sXWAAAAAOc2V0X2F1dGhvcml6ZWQAAAAAAAIAAAAAAAAAAmlkAAAAAAATAAAAAAAAAAlhdXRob3JpemUAAAAAAAABAAAAAA==","AAAAAAAAAFtSZXR1cm5zIHRoZSBzeW1ib2wgZm9yIHRoaXMgdG9rZW4uCgojIFBhbmljcwoKSWYgdGhlIGNvbnRyYWN0IGhhcyBub3QgeWV0IGJlZW4gaW5pdGlhbGl6ZWQuAAAAAAZzeW1ib2wAAAAAAAAAAAABAAAAEA==","AAAAAAAAAWRUcmFuc2ZlciBgYW1vdW50YCBmcm9tIGBmcm9tYCB0byBgdG9gLgoKIyBBcmd1bWVudHMKCiogYGZyb21gIC0gVGhlIGFkZHJlc3MgaG9sZGluZyB0aGUgYmFsYW5jZSBvZiB0b2tlbnMgd2hpY2ggd2lsbCBiZQp3aXRoZHJhd24gZnJvbS4KKiBgdG9gIC0gVGhlIGFkZHJlc3Mgd2hpY2ggd2lsbCByZWNlaXZlIHRoZSB0cmFuc2ZlcnJlZCB0b2tlbnMuCiogYGFtb3VudGAgLSBUaGUgYW1vdW50IG9mIHRva2VucyB0byBiZSB0cmFuc2ZlcnJlZC4KCiMgRXZlbnRzCgpFbWl0cyBhbiBldmVudCB3aXRoIHRvcGljcyBgWyJ0cmFuc2ZlciIsIGZyb206IEFkZHJlc3MsIHRvOiBBZGRyZXNzXSwKZGF0YSA9IFthbW91bnQ6IGkxMjhdYAAAAAh0cmFuc2ZlcgAAAAMAAAAAAAAABGZyb20AAAATAAAAAAAAAAJ0bwAAAAAAEwAAAAAAAAAGYW1vdW50AAAAAAALAAAAAA==","AAAAAAAAAzNUcmFuc2ZlciBgYW1vdW50YCBmcm9tIGBmcm9tYCB0byBgdG9gLCBjb25zdW1pbmcgdGhlIGFsbG93YW5jZSB0aGF0CmBzcGVuZGVyYCBoYXMgb24gYGZyb21gJ3MgYmFsYW5jZS4gQXV0aG9yaXplZCBieSBzcGVuZGVyCihgc3BlbmRlci5yZXF1aXJlX2F1dGgoKWApLgoKVGhlIHNwZW5kZXIgd2lsbCBiZSBhbGxvd2VkIHRvIHRyYW5zZmVyIHRoZSBhbW91bnQgZnJvbSBmcm9tJ3MgYmFsYW5jZQppZiB0aGUgYW1vdW50IGlzIGxlc3MgdGhhbiBvciBlcXVhbCB0byB0aGUgYWxsb3dhbmNlIHRoYXQgdGhlIHNwZW5kZXIKaGFzIG9uIHRoZSBmcm9tJ3MgYmFsYW5jZS4gVGhlIHNwZW5kZXIncyBhbGxvd2FuY2Ugb24gZnJvbSdzIGJhbGFuY2UKd2lsbCBiZSByZWR1Y2VkIGJ5IHRoZSBhbW91bnQuCgojIEFyZ3VtZW50cwoKKiBgc3BlbmRlcmAgLSBUaGUgYWRkcmVzcyBhdXRob3JpemluZyB0aGUgdHJhbnNmZXIsIGFuZCBoYXZpbmcgaXRzCmFsbG93YW5jZSBjb25zdW1lZCBkdXJpbmcgdGhlIHRyYW5zZmVyLgoqIGBmcm9tYCAtIFRoZSBhZGRyZXNzIGhvbGRpbmcgdGhlIGJhbGFuY2Ugb2YgdG9rZW5zIHdoaWNoIHdpbGwgYmUKd2l0aGRyYXduIGZyb20uCiogYHRvYCAtIFRoZSBhZGRyZXNzIHdoaWNoIHdpbGwgcmVjZWl2ZSB0aGUgdHJhbnNmZXJyZWQgdG9rZW5zLgoqIGBhbW91bnRgIC0gVGhlIGFtb3VudCBvZiB0b2tlbnMgdG8gYmUgdHJhbnNmZXJyZWQuCgojIEV2ZW50cwoKRW1pdHMgYW4gZXZlbnQgd2l0aCB0b3BpY3MgYFsidHJhbnNmZXIiLCBmcm9tOiBBZGRyZXNzLCB0bzogQWRkcmVzc10sCmRhdGEgPSBbYW1vdW50OiBpMTI4XWAAAAAADXRyYW5zZmVyX2Zyb20AAAAAAAAEAAAAAAAAAAdzcGVuZGVyAAAAABMAAAAAAAAABGZyb20AAAATAAAAAAAAAAJ0bwAAAAAAEwAAAAAAAAAGYW1vdW50AAAAAAALAAAAAA=="]),a);this.options=a}options;fromJSON={allowance:this.txFromJSON,authorized:this.txFromJSON,approve:this.txFromJSON,balance:this.txFromJSON,burn:this.txFromJSON,burn_from:this.txFromJSON,clawback:this.txFromJSON,decimals:this.txFromJSON,mint:this.txFromJSON,name:this.txFromJSON,set_admin:this.txFromJSON,admin:this.txFromJSON,set_authorized:this.txFromJSON,symbol:this.txFromJSON,transfer:this.txFromJSON,transfer_from:this.txFromJSON}};var Yp=180,_r=class{constructor(n,a){this.nodeRpcUrlsConfig=n;this.params=a}nodeRpcUrlsConfig;params;async buildChangeTrustLineXdrTx(n){let r=await new ye.Horizon.Server(this.nodeRpcUrlsConfig.getNodeRpcUrl("STLR")).loadAccount(n.sender),s=await this.getContract(hi,n.tokenAddress).name();if(Qn(s))throw new f;let c=Dn(s);if(!c)throw new f;let[d,g]=c.split(":");if(d===void 0||g===void 0)throw new f("Invalid token name format. Expected format 'symbol:srbTokenAddress'");let l=new ye.Asset(d,g),A=ye.Operation.changeTrust({asset:l,limit:n.limit}),u=await Tc(this.nodeRpcUrlsConfig.getNodeRpcUrl("SRB"));return new ye.TransactionBuilder(r,{fee:u.toString(10),networkPassphrase:this.params.sorobanNetworkPassphrase}).addOperation(A).setTimeout(Yp).build().toXDR()}async getBalanceLine(n,a){let o=await this.getContract(hi,a).name();if(Qn(o))throw new f;let s=Dn(o);if(!s)throw new f;let[c,d]=s.split(":"),g=this.nodeRpcUrlsConfig.getNodeRpcUrl("STLR");return(await new ye.Horizon.Server(g).loadAccount(n)).balances.find(m=>(m.asset_type==="credit_alphanum4"||m.asset_type==="credit_alphanum12")&&m.asset_code==c&&m.asset_issuer==d)}async submitTransactionStellar(n){let a=new ye.Horizon.Server(this.nodeRpcUrlsConfig.getNodeRpcUrl("STLR")),r=ye.TransactionBuilder.fromXDR(n,this.nodeRpcUrlsConfig.getNodeRpcUrl("STLR"));return await a.submitTransaction(r)}async simulateAndCheckRestoreTxRequiredSoroban(n,a){let r=this.nodeRpcUrlsConfig.getNodeRpcUrl("SRB"),o=new ye.rpc.Server(r),s=await o.getAccount(a),c=ye.TransactionBuilder.fromXDR(n,this.params.sorobanNetworkPassphrase),d=await o.simulateTransaction(c);if(ye.rpc.Api.isSimulationRestore(d)){let g=await Et(r);return new ye.TransactionBuilder(s,{fee:(g+ +d.restorePreamble.minResourceFee).toString(),networkPassphrase:this.params.sorobanNetworkPassphrase}).setSorobanData(d.restorePreamble.transactionData.build()).addOperation(ye.Operation.restoreFootprint({})).setTimeout(ye.TimeoutInfinite).build().toXDR()}}async sendTransactionSoroban(n){let a=new ye.rpc.Server(this.nodeRpcUrlsConfig.getNodeRpcUrl("SRB")),r=ye.TransactionBuilder.fromXDR(n,this.params.sorobanNetworkPassphrase);return a.sendTransaction(r)}async confirmTx(n,a=15){let r=new ye.rpc.Server(this.nodeRpcUrlsConfig.getNodeRpcUrl("SRB")),o=await Ms(()=>r.getTransaction(n),c=>c.status===ye.rpc.Api.GetTransactionStatus.NOT_FOUND,a);if(o.length===0)throw new f("No transaction responses found.");let s=o[o.length-1];if(!s)throw new f("Unexpected error: last response is undefined.");return s}getContract(n,a){let r={contractId:a,networkPassphrase:this.params.sorobanNetworkPassphrase,rpcUrl:this.nodeRpcUrlsConfig.getNodeRpcUrl("SRB")};return new n(r)}};var $r=class{constructor(n,a,r){this.nodeRpcUrlsConfig=n;this.params=a;this.api=r}nodeRpcUrlsConfig;params;api;_suiBridgeService;async buildSendTxFromCustomTx(n,a,r){return this.suiBridgeService.buildRawTransactionSendFromCustomTx(n,a,r)}get suiBridgeService(){return this._suiBridgeService||(this._suiBridgeService=new da(this.nodeRpcUrlsConfig,this.params,this.api)),this._suiBridgeService}};var qr=class{constructor(n){this.service=n;this.srb=new _r(n.nodeRpcUrlsConfig,n.params),this.sol=new Er(n.nodeRpcUrlsConfig,n.params),this.sui=new $r(n.nodeRpcUrlsConfig,n.params,n.api),this.evm=new Kr(n.nodeRpcUrlsConfig,n.params),this.alg=new Lr(n.nodeRpcUrlsConfig)}service;srb;sol;sui;evm;alg};var gt=(r=>(r.WITH_NATIVE_CURRENCY="native",r.WITH_STABLECOIN="stablecoin",r.WITH_ABR="abr",r))(gt||{}),Pa=(a=>(a.INT="int",a.FLOAT="float",a))(Pa||{});var Ae=require("big.js");var vi=class{constructor(n){this.nodeRpcUrls=n}nodeRpcUrls;getNodeRpcUrl(n){let a=this.nodeRpcUrls[n];if(a!==void 0)return a;throw new wa(n)}},eo=class{constructor(n,a=Ra){this.nodeRpcUrlsConfig=n;x.addChainsProperties(a.additionalChainsProperties);let r=new ma(a),o=new ba(r),s=new ya(o),c=new Ia(s);this.api=new Ca(c,a),this.tokenService=new ha(this.api,n,a),this.bridge=new Tr(this.api,n,a,this.tokenService),this.pool=new Pr(this.api,n,a,this.tokenService),this.yield=new Mr(this.api,n,a,this.tokenService),this.params=a}nodeRpcUrlsConfig;api;tokenService;params;bridge;pool;yield;async chainDetailsMap(n){return this.api.getChainDetailsMap(n)}async tokens(n){return this.api.tokens(n)}async tokensByChain(n,a){let o=(await this.api.getChainDetailsMap(a))[n];return o?o.tokens:[]}async getTransferStatus(n,a){return this.api.getTransferStatus(n,a)}async getGasBalance(n,a){return this.api.getGasBalance(n,a)}async checkAddress(){return new Promise(n=>{n({status:"OK",gasBalance:null})})}async getPendingStatusInfo(n,a,r,o){D(n);let s;a=="float"?(O("amount",n,r.decimals),s=j(n,r.decimals).toFixed()):s=n;let c=St(s,r,await Se(this.api,r)),d=await Se(this.api,o),g=this.getAmountFromVUsdFormatted(c,o,d),l,A=await this.api.getPendingInfo();for(let u in A[o.chainSymbol]){let m=A[o.chainSymbol];if(!m)throw new f("Cannot find pending info for "+o.chainSymbol);l=m[u]}if(l){let u=Js(l.totalSentAmount,d),m=this.getAmountFromVUsdFormatted(c,o,u),y;return(0,Ae.Big)(m.int).gt(g.int)?y={min:g,max:m}:y={min:m,max:g},{pendingTxs:l.pendingTxs,pendingAmount:{int:Ve(l.totalSentAmount,3,o.decimals).toFixed(0),float:P(l.totalSentAmount,3).toFixed()},estimatedAmount:y}}return{pendingTxs:0,pendingAmount:{int:"0",float:"0"},estimatedAmount:{min:g,max:g}}}async getTokenBalance(n,a){return this.tokenService.getTokenBalance(n,a)}async getNativeTokenBalance(n,a){return this.tokenService.getNativeTokenBalance(n,a)}async calculateFeePercentOnSourceChain(n,a){D(n),O("amountFloat",n,a.decimals);let r=j(n,a.decimals);if(r.eq(0))return 0;let o=St(r,a,await Se(this.api,a)),s=Ke(o,a.decimals);return ro(r,s)}async calculateFeePercentOnDestinationChain(n,a,r){D(n),O("amountFloat",n,a.decimals);let o=j(n,a.decimals);if(o.eq(0))return 0;let s=St(o,a,await Se(this.api,a)),c=Sa(s,r,await Se(this.api,r)),d=Ke(s,r.decimals);return ro(d,c)}async getAmountToBeReceivedAndGasFeeOptions(n,a,r,o){return D(n),O("amountToSendFloat",n,a.decimals),{amountToSendFloat:(0,Ae.Big)(n).toFixed(),amountToBeReceivedFloat:await this.getAmountToBeReceived(n,a,r,o),gasFeeOptions:await this.getGasFeeOptions(a,r,o)}}async getAmountToSendAndGasFeeOptions(n,a,r,o){return D(n),O("amountToBeReceivedFloat",n,r.decimals),{amountToSendFloat:await this.getAmountToSend(n,a,r,o),amountToBeReceivedFloat:(0,Ae.Big)(n).toFixed(),gasFeeOptions:await this.getGasFeeOptions(a,r,o)}}async getAmountToBeReceived(n,a,r,o){return this.getAmountToBeReceivedCompute(n,a,r,o,async()=>await Se(this.api,a),async()=>await Se(this.api,r))}async getAmountToBeReceivedFromChain(n,a,r,o,s,c){return this.getAmountToBeReceivedCompute(n,a,r,o,async()=>await this.pool.getPoolInfoFromChain(a,s),async()=>await this.pool.getPoolInfoFromChain(r,c))}async getAmountToBeReceivedCompute(n,a,r,o=1,s,c){switch(o){case 1:case 2:return this.getAmountToBeReceivedComputeWithPools(n,a,r,await s(),await c());case 3:case 4:return this.getAmountToBeReceivedComputeCctp(n,a,r,o);case 6:return this.getAmountToBeReceivedComputeXReserve(n,a,r);case 5:return this.getAmountToBeReceivedComputeOft(n,a,r)}}getAmountToBeReceivedComputeWithPools(n,a,r,o,s){D(n),O("amountToSendFloat",n,a.decimals);let c=j(n,a.decimals),d=St(c,a,o);return this.getAmountFromVUsdFormatted(d,r,s).float}getAmountToBeReceivedComputeCctp(n,a,r,o){D(n),O("amountToSendFloat",n,a.decimals);let s=j(n,a.decimals);switch(o){case 3:{if(!a.cctpAddress||!r.cctpAddress||!a.cctpFeeShare)throw new we("Such route does not support CCTP protocol");let c=s.mul((0,Ae.Big)(1).minus(a.cctpFeeShare)).round(0,Ae.Big.roundUp),d=Ve(c,a.decimals,r.decimals).round(0);return P(d,r.decimals).toFixed()}case 4:{if(!a.cctpV2Address||!r.cctpV2Address||!a.cctpV2FeeShare)throw new we("Such route does not support CCTP V2 protocol");let c=s.mul((0,Ae.Big)(1).minus(a.cctpV2FeeShare)).round(0,Ae.Big.roundUp),d=Ve(c,a.decimals,r.decimals).round(0);return P(d,r.decimals).toFixed()}}}getAmountToBeReceivedComputeXReserve(n,a,r){D(n),O("amountToSendFloat",n,a.decimals);let o=this.getXReserveConfig(a,r),c=j(n,a.decimals).mul((0,Ae.Big)(1).minus(o.feeShare)).minus(o.feeConst).round(0,Ae.Big.roundDown);if(c.lte(0)){let g=(0,Ae.Big)(o.feeConst).div((0,Ae.Big)(1).minus(o.feeShare)),l=P(g,a.decimals);throw new f(`Amount is too low for xReserve route: amount must be greater than ${l.toFixed(2,Ae.Big.roundUp)} ${a.symbol??""}`.trim())}let d=Ve(c,a.decimals,r.decimals).round(0);return P(d,r.decimals).toFixed()}async getAmountToBeReceivedComputeOft(n,a,r){D(n),O("amountToSendFloat",n,a.decimals);let o=j(n,a.decimals);if(!a.oftBridgeAddress||!r.oftBridgeAddress||a.oftId!==r.oftId)throw new Ze("Such route does not support OFT protocol");let{adminFeeShareWithExtras:s}=await this.api.getReceiveTransactionCost({sourceChainId:a.allbridgeChainId,destinationChainId:r.allbridgeChainId,messenger:5,sourceToken:a.tokenAddress});if(!s)throw new Ze("Such route does not support OFT protocol");let c=o.mul((0,Ae.Big)(1).minus(s)).round(0,Ae.Big.roundUp),d=Ve(c,a.decimals,r.decimals).round(0);return P(d,r.decimals).toFixed()}async getAmountToSend(n,a,r,o){return this.getAmountToSendCompute(n,a,r,o,()=>Se(this.api,a),()=>Se(this.api,r))}async getAmountToSendFromChain(n,a,r,o,s,c){return this.getAmountToSendCompute(n,a,r,o,()=>this.pool.getPoolInfoFromChain(a,s),()=>this.pool.getPoolInfoFromChain(r,c))}async getAmountToSendCompute(n,a,r,o=1,s,c){switch(o){case 1:case 2:return this.getAmountToSendComputeWithPools(n,a,r,await s(),await c());case 3:case 4:return this.getAmountToSendComputeCctp(n,a,r,o);case 6:return this.getAmountToSendComputeXReserve(n,a,r);case 5:return this.getAmountToSendComputeOft(n,a,r)}}getAmountToSendComputeWithPools(n,a,r,o,s){D(n),O("amountToBeReceivedFloat",n,r.decimals);let c=j(n,r.decimals),d=zs(c,r,s),g=Os(d,a,o);if((0,Ae.Big)(g).lte(0))throw new Zt;return P(g,a.decimals).toFixed()}getAmountToSendComputeCctp(n,a,r,o){D(n),O("amountToBeReceivedFloat",n,r.decimals);let s=j(n,r.decimals);switch(o){case 3:{if(!a.cctpAddress||!r.cctpAddress||!a.cctpFeeShare)throw new we("Such route does not support CCTP protocol");let c=s.div((0,Ae.Big)(1).minus(a.cctpFeeShare)).round(0,Ae.Big.roundDown),d=Ve(c,r.decimals,a.decimals).round(0);return P(d,a.decimals).toFixed()}case 4:{if(!a.cctpV2Address||!r.cctpV2Address||!a.cctpV2FeeShare)throw new we("Such route does not support CCTP V2 protocol");let c=s.div((0,Ae.Big)(1).minus(a.cctpV2FeeShare)).round(0,Ae.Big.roundDown),d=Ve(c,r.decimals,a.decimals).round(0);return P(d,a.decimals).toFixed()}}}getAmountToSendComputeXReserve(n,a,r){D(n),O("amountToBeReceivedFloat",n,r.decimals);let o=this.getXReserveConfig(a,r),s=j(n,r.decimals),d=Ve(s,r.decimals,a.decimals).round(0).plus(o.feeConst).div((0,Ae.Big)(1).minus(o.feeShare)).round(0,Ae.Big.roundUp);if(d.lte(0))throw new f("Amount is too low for xReserve route");return P(d,a.decimals).toFixed()}getXReserveConfig(n,a){if(!n.xReserve||!a.xReserve)throw new f("Such route does not support xReserve protocol");if((0,Ae.Big)(n.xReserve.feeShare).gte(1))throw new f("xReserve feeShare must be less than 1");return n.xReserve}async getAmountToSendComputeOft(n,a,r){D(n),O("amountToBeReceivedFloat",n,r.decimals);let o=j(n,r.decimals);if(!a.oftId||!r.oftId||!a.oftBridgeAddress||a.oftId!==r.oftId)throw new Ze("Such route does not support OFT protocol");let{adminFeeShareWithExtras:s}=await this.api.getReceiveTransactionCost({sourceChainId:a.allbridgeChainId,destinationChainId:r.allbridgeChainId,messenger:5,sourceToken:a.tokenAddress});if(!s)throw new Ze("Such route does not support OFT protocol");let c=o.div((0,Ae.Big)(1).minus(s)).round(0,Ae.Big.roundDown),d=Ve(c,r.decimals,a.decimals).round(0);return P(d,a.decimals).toFixed()}async getGasFeeOptions(n,a,r){return go(n,a.allbridgeChainId,r,this.api)}getAverageTransferTime(n,a,r){return n.transferTime?.[a.chainSymbol]?.[r]??null}async getPoolInfoByToken(n){return await this.api.getPoolInfoByKey({chainSymbol:n.chainSymbol,poolAddress:n.poolAddress})}async refreshPoolInfo(n){if(n){let r=(n instanceof Array?n:[n]).map(o=>({chainSymbol:o.chainSymbol,poolAddress:o.poolAddress}));return this.api.refreshPoolInfo(r)}return this.api.refreshPoolInfo()}aprInPercents(n){return Ds(n)}async getExtraGasMaxLimits(n,a,r){return await lo(n,a,r,this.api)}async getVUsdFromAmount(n,a,r){D(n);let o;a=="float"?(O("amount",n,r.decimals),o=j(n,r.decimals).toFixed()):o=n;let s=St(o,r,await Se(this.api,r));return{int:s,float:P(s,3).toFixed()}}async getAmountFromVUsd(n,a){return this.getAmountFromVUsdFormatted(n,a,await Se(this.api,a))}getAmountFromVUsdFormatted(n,a,r){D(n);let o=Sa(n,a,r);if((0,Ae.Big)(o).lt(0))throw new Zt;return{int:o,float:P(o,a.decimals).toFixed()}}async swapAndBridgeFeeCalculation(n,a,r){return Fg(n,{decimals:a.decimals,feeShare:a.feeShare,poolInfo:await Se(this.api,a)},{decimals:r.decimals,feeShare:r.feeShare,poolInfo:await Se(this.api,r)})}async swapAndBridgeFeeCalculationReverse(n,a,r){let o=Gg(n,{decimals:a.decimals,feeShare:a.feeShare,poolInfo:await Se(this.api,a)},{decimals:r.decimals,feeShare:r.feeShare,poolInfo:await Se(this.api,r)}),s=o.swapFromVUsdCalcResult.amountIncludingCommissionInTokenPrecision;if((0,Ae.Big)(s).lt(0))throw new Zt;return o}async getSendAmountDetails(n,a,r,o){D(n);let s;return a=="float"?(O("amount",n,r.decimals),s=j(n,r.decimals).toFixed()):s=n,Zg(s,r,await Se(this.api,r),o,await Se(this.api,o))}};function wp(i){return"solanaRpcUrl"in i}var Ps=class{params;bridge;pool;yield;utils;service;constructor(n,a=Ra){let r;wp(n)?r=new vi({SOL:n.solanaRpcUrl,TRX:n.tronRpcUrl}):r=new vi(n),this.service=new eo(r,a),this.bridge=this.service.bridge,this.pool=this.service.pool,this.yield=this.service.yield,this.utils=new qr(this.service),this.params=a}async chainDetailsMap(n="swap"){return this.service.chainDetailsMap(n)}async tokens(n="swap"){return this.service.tokens(n)}async tokensByChain(n,a="swap"){return this.service.tokensByChain(n,a)}async getTransferStatus(n,a){return this.service.getTransferStatus(n,a)}async getGasBalance(n,a){return this.service.getGasBalance(n,a)}async checkAddress(n,a,r){return await this.service.checkAddress()}async getPendingStatusInfo(n,a,r,o){return this.service.getPendingStatusInfo(n,a,r,o)}async getTokenBalance(n,a){return this.service.getTokenBalance(n,a)}async getNativeTokenBalance(n,a){return this.service.getNativeTokenBalance(n,a)}async calculateFeePercentOnSourceChain(n,a){return this.service.calculateFeePercentOnSourceChain(n,a)}async calculateFeePercentOnDestinationChain(n,a,r){return this.service.calculateFeePercentOnDestinationChain(n,a,r)}async getAmountToBeReceivedAndGasFeeOptions(n,a,r,o){return this.service.getAmountToBeReceivedAndGasFeeOptions(n,a,r,o)}async getAmountToSendAndGasFeeOptions(n,a,r,o){return this.service.getAmountToSendAndGasFeeOptions(n,a,r,o)}async getAmountToBeReceived(n,a,r,o=1){return this.service.getAmountToBeReceived(n,a,r,o)}async getAmountToBeReceivedFromChain(n,a,r,o=1,s,c){return this.service.getAmountToBeReceivedFromChain(n,a,r,o,s,c)}getAmountToBeReceivedFromPools(n,a,r,o,s,c=1){switch(c){case 1:case 2:return this.service.getAmountToBeReceivedComputeWithPools(n,a,r,o,s);case 3:case 4:return this.service.getAmountToBeReceivedComputeCctp(n,a,r,c);case 6:return this.service.getAmountToBeReceivedComputeXReserve(n,a,r)}}async getAmountToSend(n,a,r,o=1){return this.service.getAmountToSend(n,a,r,o)}async getAmountToSendFromChain(n,a,r,o=1,s,c){return this.service.getAmountToSendFromChain(n,a,r,o,s,c)}getAmountToSendFromPools(n,a,r,o,s,c=1){switch(c){case 1:case 2:return this.service.getAmountToSendComputeWithPools(n,a,r,o,s);case 3:case 4:return this.service.getAmountToSendComputeCctp(n,a,r,c);case 6:return this.service.getAmountToSendComputeXReserve(n,a,r)}}async getGasFeeOptions(n,a,r){return this.service.getGasFeeOptions(n,a,r)}getAverageTransferTime(n,a,r){return this.service.getAverageTransferTime(n,a,r)}async getPoolInfoByToken(n){return this.service.getPoolInfoByToken(n)}async refreshPoolInfo(n){return this.service.refreshPoolInfo(n)}aprInPercents(n){return this.service.aprInPercents(n)}async getExtraGasMaxLimits(n,a,r=1){return this.service.getExtraGasMaxLimits(n,a,r)}async getVUsdFromAmount(n,a,r){return this.service.getVUsdFromAmount(n,a,r)}async getAmountFromVUsd(n,a){return this.service.getAmountFromVUsd(n,a)}async swapAndBridgeFeeCalculation(n,a,r){return this.service.swapAndBridgeFeeCalculation(n,a,r)}async swapAndBridgeFeeCalculationReverse(n,a,r){return this.service.swapAndBridgeFeeCalculationReverse(n,a,r)}async getSendAmountDetails(n,a,r,o){return this.service.getSendAmountDetails(n,a,r,o)}};0&&(module.exports={AddressStatus,AllbridgeCoreSdk,AmountFormat,AmountNotEnoughError,ArgumentInvalidDecimalsError,CCTPDoesNotSupportedError,ChainSymbol,ChainType,ErrorCode,ExtraGasMaxLimitExceededError,FeePaymentMethod,InsufficientPoolLiquidityError,InvalidAmountError,InvalidGasFeePaymentOptionError,InvalidMessengerOptionError,InvalidTxError,JupiterError,Messenger,MethodNotSupportedError,NodeRpcUrlNotInitializedError,OFTDoesNotSupportedError,SdkError,SdkRootError,SolanaAutoTxFee,TimeoutError,TxTooLargeError,VerifyTxError,YieldDoesNotSupportedError,assertYieldIsSupported,isYieldSupported,mainnet,nodeRpcUrlsDefault,nodeUrlsDefault});
7
7
  //# sourceMappingURL=index.js.map