21 txs
53 calls
constructor
constructor(address gcc, address gca, address vetoCouncil, address grantsTreasury, address glw) payable
functions
costForNewProposal
viewfunction costForNewProposal() view returns (uint256)
currentWeek
viewfunction currentWeek() view returns (uint256)
eip712Domain
viewfunction eip712Domain() view returns (bytes1 fields, string name, string version, uint256 chainId, address verifyingContract, bytes32 salt, uint256[] extensions)
GCA
viewfunction GCA() view returns (address)
GCC
viewfunction GCC() view returns (address)
GENESIS_TIMESTAMP
viewfunction GENESIS_TIMESTAMP() view returns (uint256)
getProposalStatus
viewfunction getProposalStatus(uint256 proposalId) view returns (uint8)
GLOW
viewfunction GLOW() view returns (address)
GRANTS_TREASURY
viewfunction GRANTS_TREASURY() view returns (address)
hasEndorsedProposal
viewfunction hasEndorsedProposal(address gca, uint256 weekId) view returns (bool)
longStakerVotesForProposal
viewfunction longStakerVotesForProposal(address, uint256) view returns (uint256)
mostPopularProposalOfWeek
viewfunction mostPopularProposalOfWeek(uint256) view returns (uint256)
nominationsOf
viewfunction nominationsOf(address account) view returns (uint256)
numEndorsementsOnWeek
viewfunction numEndorsementsOnWeek(uint256) view returns (uint256)
proposalCount
viewfunction proposalCount() view returns (uint256)
proposalLongStakerVotes
viewfunction proposalLongStakerVotes(uint256 proposalId) view returns (tuple)
proposals
viewfunction proposals(uint256 proposalId) view returns (tuple)
SPEND_NOMINATIONS_ON_PROPOSAL_TYPEHASH
viewfunction SPEND_NOMINATIONS_ON_PROPOSAL_TYPEHASH() view returns (bytes32)
spendNominationsOnProposalNonce
viewfunction spendNominationsOnProposalNonce(address) view returns (uint256)
VETO_COUNCIL
viewfunction VETO_COUNCIL() view returns (address)
createChangeGCARequirementsProposal
nonpayablefunction createChangeGCARequirementsProposal(bytes32 newRequirementsHash, uint256 maxNominations)
createChangeGCARequirementsProposalSigs
nonpayablefunction createChangeGCARequirementsProposalSigs(bytes32 newRequirementsHash, uint256[] deadlines, uint256[] nominationsToSpend, address[] signers, bytes[] sigs)
createGCACouncilElectionOrSlashProposal
nonpayablefunction createGCACouncilElectionOrSlashProposal(address[] agentsToSlash, address[] newGCAs, uint256 maxNominations)
createGCACouncilElectionOrSlashProposalSigs
nonpayablefunction createGCACouncilElectionOrSlashProposalSigs(address[] agentsToSlash, address[] newGCAs, uint256[] deadlines, uint256[] nominationsToSpend, address[] signers, bytes[] sigs)
createGrantsProposal
nonpayablefunction createGrantsProposal(address grantsRecipient, uint256 amount, bytes32 hash, uint256 maxNominations)
createGrantsProposalSigs
nonpayablefunction createGrantsProposalSigs(address grantsRecipient, uint256 amount, bytes32 hash, uint256[] deadlines, uint256[] nominationsToSpend, address[] signers, bytes[] sigs)
createRFCProposal
nonpayablefunction createRFCProposal(bytes32 hash, uint256 maxNominations)
createRFCProposalSigs
nonpayablefunction createRFCProposalSigs(bytes32 hash, uint256[] deadlines, uint256[] nominationsToSpend, address[] signers, bytes[] sigs)
createVetoCouncilElectionOrSlash
nonpayablefunction createVetoCouncilElectionOrSlash(address oldMember, address newMember, bool slashOldMember, uint256 maxNominations)
createVetoCouncilElectionOrSlashSigs
nonpayablefunction createVetoCouncilElectionOrSlashSigs(address oldMember, address newMember, bool slashOldMember, uint256[] deadlines, uint256[] nominationsToSpend, address[] signers, bytes[] sigs)
endorseGCAProposal
nonpayablefunction endorseGCAProposal(uint256 weekId)
executeProposalAtWeek
nonpayablefunction executeProposalAtWeek(uint256 week)
grantNominations
nonpayablefunction grantNominations(address to, uint256 amount)
ratifyOrReject
nonpayablefunction ratifyOrReject(uint256 weekOfMostPopularProposal, bool trueForRatify, uint256 numVotes)
selfIncrementNonce
nonpayablefunction selfIncrementNonce()
setMostPopularProposalForCurrentWeek
nonpayablefunction setMostPopularProposalForCurrentWeek(uint256 proposalId)
syncProposals
nonpayablefunction syncProposals()
updateLastExpiredProposalId
nonpayablefunction updateLastExpiredProposalId()
useNominationsOnProposal
nonpayablefunction useNominationsOnProposal(uint256 proposalId, uint256 amount)
vetoProposal
nonpayablefunction vetoProposal(uint256 weekId, uint256 proposalId)
events
ChangeGCARequirementsProposalCreation
event ChangeGCARequirementsProposalCreation(uint256 indexed proposalId, address indexed proposer, bytes32 requirementsHash, uint256 nominationsUsed)
EIP712DomainChanged
event EIP712DomainChanged()
GCACouncilElectionOrSlashCreation
event GCACouncilElectionOrSlashCreation(uint256 indexed proposalId, address indexed proposer, address[] agentsToSlash, address[] newGCAs, uint256 proposalCreationTimestamp, uint256 nominationsUsed)
GrantsProposalCreation
event GrantsProposalCreation(uint256 indexed proposalId, address indexed proposer, address recipient, uint256 amount, bytes32 hash, uint256 nominationsUsed)
MostPopularProposalSet
event MostPopularProposalSet(uint256 indexed weekId, uint256 indexed proposalId)
NominationsUsedOnProposal
event NominationsUsedOnProposal(uint256 indexed proposalId, address indexed spender, uint256 amount)
ProposalExecution
event ProposalExecution(uint256 indexed week, uint256 proposalId, uint8 proposalType, bool success)
ProposalVetoed
event ProposalVetoed(uint256 indexed weekId, address indexed vetoer, uint256 proposalId)
RatifyCast
event RatifyCast(uint256 indexed proposalId, address indexed voter, uint256 numVotes)
RejectCast
event RejectCast(uint256 indexed proposalId, address indexed voter, uint256 numVotes)
RFCProposalCreation
event RFCProposalCreation(uint256 indexed proposalId, address indexed proposer, bytes32 rfcHash, uint256 nominationsUsed)
RFCProposalExecuted
event RFCProposalExecuted(uint256 indexed proposalId, bytes32 requirementsHash)
VetoCouncilElectionOrSlash
event VetoCouncilElectionOrSlash(uint256 indexed proposalId, address indexed proposer, address oldAgent, address newAgent, bool slashOldAgent, uint256 nominationsUsed)
errors
AlreadyEndorsedWeek
error AlreadyEndorsedWeek()
CallerNotGCA
error CallerNotGCA()
CallerNotGCC
error CallerNotGCC()
CallerNotVetoCouncilMember
error CallerNotVetoCouncilMember()
ContractsAlreadySet
error ContractsAlreadySet()
GCAContractAlreadySet
error GCAContractAlreadySet()
GCACouncilElectionsCannotBeVetoed
error GCACouncilElectionsCannotBeVetoed()
InsufficientNominations
error InsufficientNominations()
InsufficientRatifyOrRejectVotes
error InsufficientRatifyOrRejectVotes()
InvalidShortString
error InvalidShortString()
InvalidSpendNominationsOnProposalSignature
error InvalidSpendNominationsOnProposalSignature()
MaxGCAEndorsementsReached
error MaxGCAEndorsementsReached()
MaximumNumberOfGCAS
error MaximumNumberOfGCAS()
MaxSlashesInGCAElection
error MaxSlashesInGCAElection()
MostPopularProposalNotSelected
error MostPopularProposalNotSelected()
NominationCostGreaterThanAllowance
error NominationCostGreaterThanAllowance()
OnlyGCAElectionsCanBeEndorsed
error OnlyGCAElectionsCanBeEndorsed()
ProposalAlreadyExecuted
error ProposalAlreadyExecuted()
ProposalAlreadyVetoed
error ProposalAlreadyVetoed()
ProposalDoesNotExist
error ProposalDoesNotExist()
ProposalExpired
error ProposalExpired()
ProposalHasNotExpired
error ProposalHasNotExpired(uint256 proposalId)
ProposalIdDoesNotMatchMostPopularProposal
error ProposalIdDoesNotMatchMostPopularProposal()
ProposalIsVetoed
error ProposalIsVetoed()
ProposalNotInitialized
error ProposalNotInitialized()
ProposalNotMostPopular
error ProposalNotMostPopular()
ProposalsMustBeExecutedSynchonously
error ProposalsMustBeExecutedSynchonously()
RatifyOrRejectPeriodEnded
error RatifyOrRejectPeriodEnded()
RatifyOrRejectPeriodNotEnded
error RatifyOrRejectPeriodNotEnded()
RFCPeriodNotEnded
error RFCPeriodNotEnded()
SafeCastOverflowedUintDowncast
error SafeCastOverflowedUintDowncast(uint8 bits, uint256 value)
SpendNominationsOnProposalSignatureExpired
error SpendNominationsOnProposalSignatureExpired()
StringTooLong
error StringTooLong(string str)
VetoCouncilElectionsCannotBeVetoed
error VetoCouncilElectionsCannotBeVetoed()
VetoCouncilProposalCreationOldMemberCannotEqualNewMember
error VetoCouncilProposalCreationOldMemberCannotEqualNewMember()
VetoMemberCannotBeNullAddress
error VetoMemberCannotBeNullAddress()
WeekMustHaveEndedToAcceptRatifyOrRejectVotes
error WeekMustHaveEndedToAcceptRatifyOrRejectVotes()
WeekNotFinalized
error WeekNotFinalized()
WeekNotStarted
error WeekNotStarted()
ZeroAddressNotAllowed
error ZeroAddressNotAllowed()
creation bytecode
0x6102206040526001600255600019600455604051620065923803806200659283398101604081905262000032916200026c565b604080518082018252600f81526e476c6f7720476f7665726e616e636560881b602080830191909152825180840190935260018352603160f81b90830152906200007e826000620001ca565b610120526200008f816001620001ca565b61014052815160208084019190912060e052815190820120610100524660a0526200011d60e05161010051604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201529081019290925260608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b60805250503060c0526001600160a01b03858116610160528481166101805260408051630308135160e21b8152905191831691630c204d44916004808201926020929091908290030181865afa1580156200017c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001a29190620002dc565b6101a0526001600160a01b039283166101c0529082166101e052166102005250620004dc9050565b6000602083511015620001ea57620001e28362000203565b9050620001fd565b81620001f784826200039b565b5060ff90505b92915050565b600080829050601f815111156200023a578260405163305a27a960e01b815260040162000231919062000467565b60405180910390fd5b80516200024782620004b7565b179392505050565b80516001600160a01b03811681146200026757600080fd5b919050565b600080600080600060a086880312156200028557600080fd5b62000290866200024f565b9450620002a0602087016200024f565b9350620002b0604087016200024f565b9250620002c0606087016200024f565b9150620002d0608087016200024f565b90509295509295909350565b600060208284031215620002ef57600080fd5b5051919050565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200032157607f821691505b6020821081036200034257634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200039657600081815260208120601f850160051c81016020861015620003715750805b601f850160051c820191505b8181101562000392578281556001016200037d565b5050505b505050565b81516001600160401b03811115620003b757620003b7620002f6565b620003cf81620003c884546200030c565b8462000348565b602080601f831160018114620004075760008415620003ee5750858301515b600019600386901b1c1916600185901b17855562000392565b600085815260208120601f198616915b82811015620004385788860151825594840194600190910190840162000417565b5085821015620004575787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600060208083528351808285015260005b81811015620004965785810183015185820160400152820162000478565b506000604082860101526040601f19601f8301168501019250505092915050565b80516020808301519190811015620003425760001960209190910360031b1b16919050565b60805160a05160c05160e05161010051610120516101405161016051610180516101a0516101c0516101e05161020051615fd3620005bf60003960008181610339015261262c0152600081816103850152613f530152600081816105660152818161094d01528181610fc60152613d770152600081816103ac01528181610bd801526139a801526000818161063e01528181613e5801526140280152600081816106f10152612eae0152600061420f015260006141e201526000614be201526000614bba01526000614b1501526000614b3f01526000614b690152615fd36000f3fe608060405234801561001057600080fd5b50600436106102c85760003560e01c806381818b3e1161017b578063b9f2431a116100d8578063da35c6641161008c578063dcd84d2411610071578063dcd84d2414610713578063e61679fb14610726578063f9dd03cb1461073957600080fd5b8063da35c664146106e4578063dc847fbb146106ec57600080fd5b8063c64c27d5116100bd578063c64c27d51461069e578063ca6416d5146106b1578063d98a525a146106d157600080fd5b8063b9f2431a14610660578063c5b2933c1461067357600080fd5b806396a6f5941161012f5780639dc46a30116101145780639dc46a301461061e578063aafa18bd14610631578063b71ce6591461063957600080fd5b806396a6f594146105e45780639ad191f2146105f757600080fd5b806387ad5df31161016057806387ad5df3146105b65780638d73ae6b146105c95780638f1e1abe146105d157600080fd5b806381818b3e1461058857806384b0196e1461059b57600080fd5b8063401853b7116102295780635446e644116101dd57806374a6c665116101c257806374a6c6651461053b578063791fe63c1461054e5780637a6471891461056157600080fd5b80635446e644146105135780635e73ab041461053357600080fd5b8063417b06771161020e578063417b0677146104bd57806344cfc311146104dd5780634bd69db9146104f057600080fd5b8063401853b71461048a57806340918fd9146104aa57600080fd5b80630bd9cadb11610280578063123751d411610265578063123751d4146103ce57806318bc45db146103d657806318d98a4b146103e957600080fd5b80630bd9cadb146103805780630c204d44146103a757600080fd5b806305a8a644116102b157806305a8a6441461030b57806306575c891461031e578063097514231461033457600080fd5b8063013cf08b146102cd5780630577ef4b146102f6575b600080fd5b6102e06102db366004614f08565b61074c565b6040516102ed9190614fd2565b60405180910390f35b6103096103043660046152dd565b610899565b005b610309610319366004614f08565b61091f565b610326610bcd565b6040519081526020016102ed565b61035b7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016102ed565b61035b7f000000000000000000000000000000000000000000000000000000000000000081565b6103267f000000000000000000000000000000000000000000000000000000000000000081565b610309610c0c565b6103096103e4366004615394565b610c2f565b61045a6103f7366004614f08565b6040805180820190915260008082526020820152506000908152600660209081526040918290208251808401909352546fffffffffffffffffffffffffffffffff8082168452700100000000000000000000000000000000909104169082015290565b6040805182516fffffffffffffffffffffffffffffffff90811682526020938401511692810192909252016102ed565b61049d610498366004614f08565b610d31565b6040516102ed9190615489565b6103096104b83660046154a3565b610d90565b6103266104cb3660046154c5565b60056020526000908152604090205481565b6103096104eb3660046154a3565b610f98565b6105036104fe3660046154e2565b61120f565b60405190151581526020016102ed565b610326610521366004614f08565b600c6020526000908152604090205481565b610309611275565b6103266105493660046154c5565b611636565b61030961055c36600461550e565b611778565b61035b7f000000000000000000000000000000000000000000000000000000000000000081565b610309610596366004615549565b611a42565b6105a3611b0c565b6040516102ed979695949392919061561a565b6103096105c43660046156f2565b611b6e565b610309611f69565b6103096105df366004615743565b611f7b565b6103096105f23660046154a3565b61209b565b6103267f03f41c6366d1b8eee338b5696f0b3ce825e8b8eaf9a99b2665c8fb1f68b82aa181565b61030961062c366004614f08565b61231a565b610326612474565b61035b7f000000000000000000000000000000000000000000000000000000000000000081565b61030961066e3660046157a0565b612494565b6103266106813660046154e2565b600760209081526000928352604080842090915290825290205481565b6103096106ac366004615824565b6128c8565b6103266106bf366004614f08565b600a6020526000908152604090205481565b6103096106df3660046154a3565b612c06565b610326612e85565b61035b7f000000000000000000000000000000000000000000000000000000000000000081565b6103096107213660046154e2565b612e96565b6103096107343660046152dd565b613102565b610309610747366004614f08565b61317a565b61077660408051608081019091528060008152600060208201819052604082015260609081015290565b600082815260096020526040908190208151608081019092528054829060ff1660058111156107a7576107a7614f21565b60058111156107b8576107b8614f21565b81528154610100810467ffffffffffffffff1660208301526901000000000000000000900476ffffffffffffffffffffffffffffffffffffffffffffff16604082015260018201805460609092019161081090615898565b80601f016020809104026020016040519081016040528092919081815260200182805461083c90615898565b80156108895780601f1061085e57610100808354040283529160200191610889565b820191906000526020600020905b81548152906001019060200180831161086c57829003601f168201915b5050505050815250509050919050565b6000856040516020016108ae91815260200190565b60405160208183030381529060405290506000806108d187878787876004613532565b604080518b815260208101839052929450909250339184917f940f82c67bc94b7c8d3cd1b2880ec0118cb36e350461977bea1330d0cdd8079a91015b60405180910390a35050505050505050565b6040517febd7dc520000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063ebd7dc5290602401602060405180830381865afa1580156109a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109cd91906158eb565b6109fa576109fa7f0622c3290000000000000000000000000000000000000000000000000000000061397d565b6000610a04610bcd565b9050808210610a3657610a367fdb6754140000000000000000000000000000000000000000000000000000000061397d565b6000610a4b610a46600485615937565b613987565b905080421115610a7e57610a7e7f30a8b0dc0000000000000000000000000000000000000000000000000000000061397d565b6000610a8c61010085615979565b90506000610a9c6101008661598d565b336000908152600d602090815260408083208684529091529020549091506001821b80821615610aef57610aef7f74175e970000000000000000000000000000000000000000000000000000000061397d565b336000908152600d6020908152604080832087845282528083208585179055898352600c825280832054600a835281842054808552600990935292205460ff166002816005811115610b4357610b43614f21565b14610b7157610b717feffa48790000000000000000000000000000000000000000000000000000000061397d565b610b7c600184615937565b92506005831115610bb057610bb07f41d075010000000000000000000000000000000000000000000000000000000061397d565b50506000978852600c602052604090972096909655505050505050565b600062093a80610bfd7f0000000000000000000000000000000000000000000000000000000000000000426159a1565b610c079190615979565b905090565b3360009081526005602052604081208054909190610c29906159b4565b90915550565b600585511115610c6257610c627f1e6a29350000000000000000000000000000000000000000000000000000000061397d565b600a86511115610c9557610c957f7a8ed5d80000000000000000000000000000000000000000000000000000000061397d565b60008686604051602001610caa929190615a3d565b6040516020818303038152906040529050600080610ccd87878787876002613532565b915091503373ffffffffffffffffffffffffffffffffffffffff16827f7d4b61e999c91b6fae43058c3e02c29f8048bba71d9198a4e60e3730420be9d68b8b4286604051610d1e9493929190615a6b565b60405180910390a3505050505050505050565b600080610d3f602084615979565b90506000610d4e60208561598d565b610d59906008615aa4565b6000838152600b602052604090205490915060ff821b908116821c806003811115610d8657610d86614f21565b9695505050505050565b610d98611275565b610da1826139cc565b600082815260096020526040812054610100900467ffffffffffffffff1690819003610df057610df07fd9c78e020000000000000000000000000000000000000000000000000000000061397d565b80421115610e2157610e217f28a723790000000000000000000000000000000000000000000000000000000061397d565b610e2b3383613a9f565b600083815260096020526040812054610e7490610e6f9085906901000000000000000000900476ffffffffffffffffffffffffffffffffffffffffffffff16615937565b613ba0565b6000858152600960205260408120805468ffffffffffffffffff16690100000000000000000076ffffffffffffffffffffffffffffffffffffffffffffff851602179055909150610ec3610bcd565b6000818152600a6020526040902054909150858114610f585760008181526009602052604090205476ffffffffffffffffffffffffffffffffffffffffffffff690100000000000000000090910481169084161115610f58576000828152600a602052604080822088905551879184917f663e0daedbefabe1bdf9f46ee7e1df6d9c9010b148223f95206ff16cb8215d049190a35b604051858152339087907fc44b98809ee80ebce271d1746069982ebd2dcca69e7a7040fbab30a796664d4c906020015b60405180910390a3505050505050565b6040517febd7dc520000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063ebd7dc5290602401602060405180830381865afa158015611022573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061104691906158eb565b611073576110737f0622c3290000000000000000000000000000000000000000000000000000000061397d565b6000828152600a602052604090205481146110b1576110b17fcb4331500000000000000000000000000000000000000000000000000000000061397d565b60006110bb610bcd565b90508083106110ed576110ed7fdb6754140000000000000000000000000000000000000000000000000000000061397d565b60006110fd610a46600486615937565b905080421115611130576111307f30a8b0dc0000000000000000000000000000000000000000000000000000000061397d565b60008381526009602052604090205460ff16600181600581111561115657611156614f21565b03611184576111847ff3ac1b520000000000000000000000000000000000000000000000000000000061397d565b600281600581111561119857611198614f21565b036111c6576111c67f562ece0a0000000000000000000000000000000000000000000000000000000061397d565b6111d1846003613c06565b604051848152339086907f7ab1a7c147acfa67a40c50647a306a7b98ad5beebb756da4df2841171ffc5aca9060200160405180910390a35050505050565b60008061121e61010084615979565b9050600061122e6101008561598d565b73ffffffffffffffffffffffffffffffffffffffff86166000908152600d602090815260408083209583529490529290922054600190921b90911615159150505b92915050565b600061127f610bcd565b90508060000361128c5750565b600454600191820191015b81811015611632576000818152600a60205260409020546112b781613c6e565b6112c15750611622565b6000818152600960205260408082208151608081019092528054829060ff1660058111156112f1576112f1614f21565b600581111561130257611302614f21565b81528154610100810467ffffffffffffffff1660208301526901000000000000000000900476ffffffffffffffffffffffffffffffffffffffffffffff16604082015260018201805460609092019161135a90615898565b80601f016020809104026020016040519081016040528092919081815260200182805461138690615898565b80156113d35780601f106113a8576101008083540402835291602001916113d3565b820191906000526020600020905b8154815290600101906020018083116113b657829003601f168201915b50505091909252505081516000858152600660209081526040918290208251808401909352546fffffffffffffffffffffffffffffffff8082168452700100000000000000000000000000000000909104169082015292935091905061143d610a46600487615937565b42101561148757841561145a576114556001866159a1565b61147c565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5b600455505050505050565b600282600581111561149b5761149b614f21565b03611554576000858152600c6020526040812054906114bb600583615aa4565b6114c690603c6159a1565b90506000836020015184600001516114de9190615abb565b6fffffffffffffffffffffffffffffffff169050806000036115065750505050505050611622565b83516000908290611518906064615aeb565b6fffffffffffffffffffffffffffffffff166115349190615979565b90508281101561154b575050505050505050611622565b5050505061160d565b600582600581111561156857611568614f21565b141580156115885750600382600581111561158557611585614f21565b14155b1561160d57602081015181516000916115a091615abb565b6fffffffffffffffffffffffffffffffff169050806000036115c6575050505050611622565b815160009082906115d8906064615aeb565b6fffffffffffffffffffffffffffffffff166115f49190615979565b9050603c81101561160a57505050505050611622565b50505b61161d8585848660600151613ce6565b505050505b61162b816159b4565b9050611297565b5050565b73ffffffffffffffffffffffffffffffffffffffff8116600090815260086020908152604080832081518083019092525477ffffffffffffffffffffffffffffffffffffffffffffffff811682527801000000000000000000000000000000000000000000000000900467ffffffffffffffff169181018290529082906116bd90426159a1565b82516040517fab45f3aa00000000000000000000000000000000000000000000000000000000815277ffffffffffffffffffffffffffffffffffffffffffffffff90911660048201526024810182905290915073cf4d7552ca9f07c474d69e89a88943fabb60b1999063ab45f3aa90604401602060405180830381865af415801561174c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117709190615b1f565b949350505050565b6002546000611785614174565b9050808310156117b8576117b87fd1c628250000000000000000000000000000000000000000000000000000000061397d565b6117c23382613a9f565b604080516080810190915280600381526020016117ea6117e56293a80042615937565b61418b565b67ffffffffffffffff16815260200161180283613ba0565b76ffffffffffffffffffffffffffffffffffffffffffffff1681526040805173ffffffffffffffffffffffffffffffffffffffff8a1660208281019190915291810189905260608101889052910190608001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152915260008481526009602052208151815482907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660018360058111156118cb576118cb614f21565b021790555060208201518154604084015176ffffffffffffffffffffffffffffffffffffffffffffff1669010000000000000000000268ffffffffffffffffff67ffffffffffffffff909316610100029290921660ff909116171781556060820151600182019061193c9082615b87565b50905050600061194a610bcd565b6000818152600a6020908152604080832054808452600990925290912054919250906901000000000000000000900476ffffffffffffffffffffffffffffffffffffffffffffff168311156119d5576000828152600a602052604080822086905551859184917f663e0daedbefabe1bdf9f46ee7e1df6d9c9010b148223f95206ff16cb8215d049190a35b6119e0846001615937565b6002556040805173ffffffffffffffffffffffffffffffffffffffff8a1681526020810189905290810187905260608101849052339085907fe12dc78051e06dc7c1212d6dbafcf85f4a97c5dfa2268e206aaa3c22ebbabfd29060800161090d565b6040805173ffffffffffffffffffffffffffffffffffffffff89166020820152908101879052606081018690526000906080016040516020818303038152906040529050600080611a9887878787876003613532565b6040805173ffffffffffffffffffffffffffffffffffffffff8e168152602081018d90529081018b9052606081018290529193509150339083907fe12dc78051e06dc7c1212d6dbafcf85f4a97c5dfa2268e206aaa3c22ebbabfd2906080015b60405180910390a350505050505050505050565b600060608060008060006060611b206141db565b611b28614208565b604080516000808252602082019092527f0f000000000000000000000000000000000000000000000000000000000000009b939a50919850469750309650945092509050565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603611bca57611bca7f1b05f4bd0000000000000000000000000000000000000000000000000000000061397d565b7fffffffffffffffffffffffff000000000000000000000000000000000000000173ffffffffffffffffffffffffffffffffffffffff851601611c3057611c307fc27cd7710000000000000000000000000000000000000000000000000000000061397d565b7fffffffffffffffffffffffff000000000000000000000000000000000000000173ffffffffffffffffffffffffffffffffffffffff841601611c9657611c967fc27cd7710000000000000000000000000000000000000000000000000000000061397d565b6002546000611ca3614174565b905080831015611cd657611cd67fd1c628250000000000000000000000000000000000000000000000000000000061397d565b611ce03382613a9f565b60408051608081019091528060018152602001611d006293a80042615937565b67ffffffffffffffff168152602001611d1883613ba0565b76ffffffffffffffffffffffffffffffffffffffffffffff1681526040805173ffffffffffffffffffffffffffffffffffffffff808b16602083810191909152908a1692820192909252871515606082015242608082015291019060a001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152915260008481526009602052208151815482907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001836005811115611ded57611ded614f21565b021790555060208201518154604084015176ffffffffffffffffffffffffffffffffffffffffffffff1669010000000000000000000268ffffffffffffffffff67ffffffffffffffff909316610100029290921660ff9091161717815560608201516001820190611e5e9082615b87565b509050506000611e6c610bcd565b6000818152600a6020908152604080832054808452600990925290912054919250906901000000000000000000900476ffffffffffffffffffffffffffffffffffffffffffffff16831115611ef7576000828152600a602052604080822086905551859184917f663e0daedbefabe1bdf9f46ee7e1df6d9c9010b148223f95206ff16cb8215d049190a35b611f02846001615937565b6002556040805173ffffffffffffffffffffffffffffffffffffffff808b168252891660208201528715159181019190915260608101849052339085907f90ba2ce71a1bfada21ece0a0a16d173169337ac350d41671831d4475336efb419060800161090d565b6000611f73614235565b506003555050565b8573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff1603611fd757611fd77f1b05f4bd0000000000000000000000000000000000000000000000000000000061397d565b6040805173ffffffffffffffffffffffffffffffffffffffff808a1660208301528816918101919091528515156060820152600090608001604051602081830303815290604052905060008061203287878787876001613532565b6040805173ffffffffffffffffffffffffffffffffffffffff8e811682528d1660208201528b151591810191909152606081018290529193509150339083907f90ba2ce71a1bfada21ece0a0a16d173169337ac350d41671831d4475336efb4190608001611af8565b60025460006120a8614174565b9050808310156120db576120db7fd1c628250000000000000000000000000000000000000000000000000000000061397d565b6120e53382613a9f565b604080516080810190915280600581526020016121086117e56293a80042615937565b67ffffffffffffffff16815260200161212083613ba0565b76ffffffffffffffffffffffffffffffffffffffffffffff1681526020018560405160200161215191815260200190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152915260008481526009602052208151815482907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660018360058111156121c8576121c8614f21565b021790555060208201518154604084015176ffffffffffffffffffffffffffffffffffffffffffffff1669010000000000000000000268ffffffffffffffffff67ffffffffffffffff909316610100029290921660ff90911617178155606082015160018201906122399082615b87565b509050506000612247610bcd565b6000818152600a6020908152604080832054808452600990925290912054919250906901000000000000000000900476ffffffffffffffffffffffffffffffffffffffffffffff168311156122d2576000828152600a602052604080822086905551859184917f663e0daedbefabe1bdf9f46ee7e1df6d9c9010b148223f95206ff16cb8215d049190a35b6122dd846001615937565b6002556040805187815260208101859052339186917f1c2379a7c23a1b01b01df87517e84e0794326effc88ac06031734520651174e09101610f88565b612322611275565b61232b816139cc565b6000612335610bcd565b6000818152600a602090815260408083205486845260099092529091205491925090610100810467ffffffffffffffff16906901000000000000000000900476ffffffffffffffffffffffffffffffffffffffffffffff16428210156123be576123be7f28a723790000000000000000000000000000000000000000000000000000000061397d565b828514612440576000838152600960205260409020546901000000000000000000900476ffffffffffffffffffffffffffffffffffffffffffffff16811115612417576000848152600a60205260409020859055612440565b6124407f9472ad340000000000000000000000000000000000000000000000000000000061397d565b604051859085907f663e0daedbefabe1bdf9f46ee7e1df6d9c9010b148223f95206ff16cb8215d0490600090a35050505050565b60008061247f614235565b5090915061248e9050816142af565b91505090565b600061249e610bcd565b6000858152600a60205260408120549192506124b982610d31565b905060038160038111156124cf576124cf614f21565b036124fd576124fd7f205513150000000000000000000000000000000000000000000000000000000061397d565b600281600381111561251157612511614f21565b148061252e5750600181600381111561252c5761252c614f21565b145b1561255c5761255c7f51618d530000000000000000000000000000000000000000000000000000000061397d565b82861061258c5761258c7fb7d0ea710000000000000000000000000000000000000000000000000000000061397d565b61259a610a46600488615937565b4211156125ca576125ca7f30a8b0dc0000000000000000000000000000000000000000000000000000000061397d565b816000036125fb576125fb7fdb391df90000000000000000000000000000000000000000000000000000000061397d565b6040517f08ee0c740000000000000000000000000000000000000000000000000000000081523360048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906308ee0c7490602401602060405180830381865afa158015612688573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126ac9190615b1f565b336000908152600760209081526040808320878452909152902054909150816126d58783615937565b1115612704576127047fa00141bd0000000000000000000000000000000000000000000000000000000061397d565b86156127c6576000848152600660205260408120805488929061273a9084906fffffffffffffffffffffffffffffffff16615abb565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055503373ffffffffffffffffffffffffffffffffffffffff16847f93274e0943f2ec27ac6dc1c6971d739e99ef1895382f76a3818b159328e3766d886040516127b991815260200190565b60405180910390a3612895565b6000848152600660205260409020805487919060109061280d90849070010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff16615abb565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055503373ffffffffffffffffffffffffffffffffffffffff16847f9698f272413c440f69fc0a22e53a7db613af3c038d9f342385253e62de361fb98860405161288c91815260200190565b60405180910390a35b61289f8682615937565b336000908152600760209081526040808320978352969052949094209390935550505050505050565b60058211156128fa576128fa7f1e6a29350000000000000000000000000000000000000000000000000000000061397d565b600a84111561292c5761292c7f7a8ed5d80000000000000000000000000000000000000000000000000000000061397d565b60008585858542604051602001612947959493929190615cec565b604051602081830303815290604052805190602001209050600060025490506000612970614174565b9050808410156129a3576129a37fd1c628250000000000000000000000000000000000000000000000000000000061397d565b8615156129b03383613a9f565b604080516080810190915280600281526020016129d06293a80042615937565b67ffffffffffffffff1681526020016129e884613ba0565b76ffffffffffffffffffffffffffffffffffffffffffffff1681526020018583604051602001612a249291909182521515602082015260400190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152915260008581526009602052208151815482907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001836005811115612a9b57612a9b614f21565b021790555060208201518154604084015176ffffffffffffffffffffffffffffffffffffffffffffff1669010000000000000000000268ffffffffffffffffff67ffffffffffffffff909316610100029290921660ff9091161717815560608201516001820190612b0c9082615b87565b509050506000612b1a610bcd565b6000818152600a6020908152604080832054808452600990925290912054919250906901000000000000000000900476ffffffffffffffffffffffffffffffffffffffffffffff16841115612ba5576000828152600a602052604080822087905551869184917f663e0daedbefabe1bdf9f46ee7e1df6d9c9010b148223f95206ff16cb8215d049190a35b612bb0856001615937565b600255604051339086907f7d4b61e999c91b6fae43058c3e02c29f8048bba71d9198a4e60e3730420be9d690612bf1908f908f908f908f9042908d90615d26565b60405180910390a35050505050505050505050565b6002546000612c13614174565b905080831015612c4657612c467fd1c628250000000000000000000000000000000000000000000000000000000061397d565b612c503382613a9f565b60408051608081019091528060048152602001612c736117e56293a80042615937565b67ffffffffffffffff168152602001612c8b83613ba0565b76ffffffffffffffffffffffffffffffffffffffffffffff16815260200185604051602001612cbc91815260200190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152915260008481526009602052208151815482907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001836005811115612d3357612d33614f21565b021790555060208201518154604084015176ffffffffffffffffffffffffffffffffffffffffffffff1669010000000000000000000268ffffffffffffffffff67ffffffffffffffff909316610100029290921660ff9091161717815560608201516001820190612da49082615b87565b509050506000612db2610bcd565b6000818152600a6020908152604080832054808452600990925290912054919250906901000000000000000000900476ffffffffffffffffffffffffffffffffffffffffffffff16831115612e3d576000828152600a602052604080822086905551859184917f663e0daedbefabe1bdf9f46ee7e1df6d9c9010b148223f95206ff16cb8215d049190a35b612e48846001615937565b6002556040805187815260208101859052339186917f940f82c67bc94b7c8d3cd1b2880ec0118cb36e350461977bea1330d0cdd8079a9101610f88565b60006001600254610c0791906159a1565b3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614612efc57612efc7fceaef8650000000000000000000000000000000000000000000000000000000061397d565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260086020908152604080832081518083019092525477ffffffffffffffffffffffffffffffffffffffffffffffff8116808352780100000000000000000000000000000000000000000000000090910467ffffffffffffffff1692820183905290929173cf4d7552ca9f07c474d69e89a88943fabb60b1999163ab45f3aa91612fa190426159a1565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815277ffffffffffffffffffffffffffffffffffffffffffffffff90921660048301526024820152604401602060405180830381865af4158015613013573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130379190615b1f565b9050604051806040016040528061305885846130539190615937565b6142fe565b77ffffffffffffffffffffffffffffffffffffffffffffffff1681526020016130804261418b565b67ffffffffffffffff90811690915273ffffffffffffffffffffffffffffffffffffffff90951660009081526008602090815260409091208251929091015190951678010000000000000000000000000000000000000000000000000277ffffffffffffffffffffffffffffffffffffffffffffffff90911617909355505050565b60008560405160200161311791815260200190565b604051602081830303815290604052905060008061313a87878787876005613532565b604080518b815260208101839052929450909250339184917f1c2379a7c23a1b01b01df87517e84e0794326effc88ac06031734520651174e0910161090d565b6004546001018181146131b0576131b07f6032dc5a0000000000000000000000000000000000000000000000000000000061397d565b6000828152600a60205260409020546131c881613c6e565b6131d3575050600455565b6000818152600960205260408082208151608081019092528054829060ff16600581111561320357613203614f21565b600581111561321457613214614f21565b81528154610100810467ffffffffffffffff1660208301526901000000000000000000900476ffffffffffffffffffffffffffffffffffffffffffffff16604082015260018201805460609092019161326c90615898565b80601f016020809104026020016040519081016040528092919081815260200182805461329890615898565b80156132e55780601f106132ba576101008083540402835291602001916132e5565b820191906000526020600020905b8154815290600101906020018083116132c857829003601f168201915b50505091909252505081516000858152600660209081526040918290208251808401909352546fffffffffffffffffffffffffffffffff8082168452700100000000000000000000000000000000909104169082015292935091905061334f610a46600488615937565b42101561337f5761337f7f3646d7820000000000000000000000000000000000000000000000000000000061397d565b600282600581111561339357613393614f21565b03613454576000868152600c6020526040812054906133b3600583615aa4565b6133be90603c6159a1565b90506000836020015184600001516133d69190615abb565b6fffffffffffffffffffffffffffffffff16905080600003613402575050506004959095555050505050565b83516000908290613414906064615aeb565b6fffffffffffffffffffffffffffffffff166134309190615979565b90508281101561344b57505050600496909655505050505050565b50505050613515565b600582600581111561346857613468614f21565b141580156134885750600382600581111561348557613485614f21565b14155b1561351557602081015181516000916134a091615abb565b6fffffffffffffffffffffffffffffffff169050806000036134ca57505050600493909355505050565b815160009082906134dc906064615aeb565b6fffffffffffffffffffffffffffffffff166134f89190615979565b9050603c8110156135125750505060049490945550505050565b50505b6135258685848660600151613ce6565b5050506004929092555050565b600254600090819081805b8851811015613623576135b8868b838151811061355c5761355c615d63565b60200260200101518d848151811061357657613576615d63565b60200260200101518c858151811061359057613590615d63565b60200260200101518c86815181106135aa576135aa615d63565b60200260200101518c61435c565b6135f48982815181106135cd576135cd615d63565b60200260200101518b83815181106135e7576135e7615d63565b6020026020010151613a9f565b89818151811061360657613606615d63565b6020026020010151826136199190615937565b915060010161353d565b50600061362e614174565b905080821015613661576136617f620bc4960000000000000000000000000000000000000000000000000000000061397d565b600061366b610bcd565b6000818152600a6020908152604080832054808452600990925290912054919250906901000000000000000000900476ffffffffffffffffffffffffffffffffffffffffffffff168311156136f6576000828152600a602052604080822087905551869184917f663e0daedbefabe1bdf9f46ee7e1df6d9c9010b148223f95206ff16cb8215d049190a35b600288600581111561370a5761370a614f21565b0361379e576000808a8060200190518101906137269190615df6565b91509150600082824260405160200161374193929190615e5a565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152828252805160209182012095519083019590955293151581850152835180820385018152606090910190935250909950505b60018860058111156137b2576137b2614f21565b036138225760008060008b8060200190518101906137d09190615e90565b6040805173ffffffffffffffffffffffffffffffffffffffff9485166020820152929093168284015215156060820152426080808301919091528251808303909101815260a09091019091529b505050505b604051806080016040528089600581111561383f5761383f614f21565b81526020016138546117e56293a80042615937565b67ffffffffffffffff16815260200161386c86613ba0565b76ffffffffffffffffffffffffffffffffffffffffffffff16815260209081018b905260008781526009909152604090208151815482907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660018360058111156138d9576138d9614f21565b021790555060208201518154604084015176ffffffffffffffffffffffffffffffffffffffffffffff1669010000000000000000000268ffffffffffffffffff67ffffffffffffffff909316610100029290921660ff909116171781556060820151600182019061394a9082615b87565b5090505084613958906159b4565b6002819055945061396a6001866159a1565b9d939c50929a5050505050505050505050565b8060005260046000fd5b600062093a80613998836001615937565b6139a29190615aa4565b61126f907f0000000000000000000000000000000000000000000000000000000000000000615937565b60006139d782610d31565b905060028160038111156139ed576139ed614f21565b03613a1b57613a1b7f51618d530000000000000000000000000000000000000000000000000000000061397d565b6001816003811115613a2f57613a2f614f21565b03613a5d57613a5d7f51618d530000000000000000000000000000000000000000000000000000000061397d565b6003816003811115613a7157613a71614f21565b03611632576116327f6d3e62930000000000000000000000000000000000000000000000000000000061397d565b6000613aaa83611636565b905081811015613add57613add7f620bc4960000000000000000000000000000000000000000000000000000000061397d565b6040518060400160405280613af7848461305391906159a1565b77ffffffffffffffffffffffffffffffffffffffffffffffff168152602001613b1f4261418b565b67ffffffffffffffff90811690915273ffffffffffffffffffffffffffffffffffffffff90941660009081526008602090815260409091208251929091015190941678010000000000000000000000000000000000000000000000000277ffffffffffffffffffffffffffffffffffffffffffffffff909116179092555050565b600076ffffffffffffffffffffffffffffffffffffffffffffff821115613c02576040517f6dfcc65000000000000000000000000000000000000000000000000000000000815260b86004820152602481018390526044015b60405180910390fd5b5090565b6000613c13602084615979565b90506000613c2260208561598d565b613c2d906008615aa4565b905060ff811b600082856003811115613c4857613c48614f21565b6000958652600b6020526040909520805493199390931694901b93909317905550505050565b600080613c7a83610d31565b90506003816003811115613c9057613c90614f21565b03613c9e5750600092915050565b6002816003811115613cb257613cb2614f21565b1480613ccf57506001816003811115613ccd57613ccd614f21565b145b15613cdd5750600092915050565b50600192915050565b60006001836005811115613cfc57613cfc614f21565b03613dec57600080600084806020019051810190613d1a9190615e90565b6040517f20bac31d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301528381166024830152821515604483015293965091945092507f0000000000000000000000000000000000000000000000000000000000000000909116906320bac31d906064016020604051808303816000875af1158015613dc2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613de691906158eb565b93505050505b6002836005811115613e0057613e00614f21565b03613ed05760008083806020019051810190613e1c9190615edd565b6040517f296e540700000000000000000000000000000000000000000000000000000000815260048101839052811515602482015291935091507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063296e540790604401600060405180830381600087803b158015613eb157600080fd5b505af1158015613ec5573d6000803e3d6000fd5b505050506001925050505b6003836005811115613ee457613ee4614f21565b03613fc75760008083806020019051810190613f009190615f0d565b506040517fcd12099000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8084166004830152602482018390529294509092507f00000000000000000000000000000000000000000000000000000000000000009091169063cd120990906044016020604051808303816000875af1158015613f9e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613fc291906158eb565b925050505b6004836005811115613fdb57613fdb614f21565b0361409f57600082806020019051810190613ff69190615b1f565b6040517fb744aaa5000000000000000000000000000000000000000000000000000000008152600481018290529091507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063b744aaa590602401600060405180830381600087803b15801561408157600080fd5b505af1158015614095573d6000803e3d6000fd5b5050505060019150505b60058360058111156140b3576140b3614f21565b03614110576000828060200190518101906140ce9190615b1f565b9050847fe25a4d93d90a403cb2ee36abec0c7dbf52b064220b5cb47d26b670b987325d558260405161410291815260200190565b60405180910390a260019150505b801561412657614121846002613c06565b614131565b614131846001613c06565b847fdcb90c5cbc98ab88833cf2ddca2514638b8f7f96c83c1826bdf8f503b21e1e6385858460405161416593929190615f44565b60405180910390a25050505050565b60008061417f61443a565b50905061248e816142af565b600067ffffffffffffffff821115613c0257604080517f6dfcc650000000000000000000000000000000000000000000000000000000008152600481019190915260248101839052604401613bf9565b6060610c077f0000000000000000000000000000000000000000000000000000000000000000600061445f565b6060610c077f0000000000000000000000000000000000000000000000000000000000000000600161445f565b60035460009081818015614249578261424c565b60015b600254909350835b81811015614297576000818152600960205260409020544261010090910467ffffffffffffffff16101561428a5780945061428f565b614297565b600101614254565b506142a284826159a1565b9593945050831415919050565b6000806142e76127106142de6142ce68011999999999999a008761450a565b6801000000000000000090614871565b600f0b906148c9565b90506142f7816305f5e100615aa4565b9392505050565b600077ffffffffffffffffffffffffffffffffffffffffffffffff821115613c02576040517f6dfcc65000000000000000000000000000000000000000000000000000000000815260c0600482015260248101839052604401613bf9565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260056020526040902054428510156143b3576143b37faab28a450000000000000000000000000000000000000000000000000000000061397d565b60006143c2888884898761494e565b90506143cf858286614a4a565b6143fc576143fc7f7caf5a700000000000000000000000000000000000000000000000000000000061397d565b614407826001615937565b73ffffffffffffffffffffffffffffffffffffffff90951660009081526005602052604090209490945550505050505050565b6000806000614447614235565b91945092509050801561445a5760038290555b509091565b606060ff83146144795761447283614abc565b905061126f565b81805461448590615898565b80601f01602080910402602001604051908101604052809291908181526020018280546144b190615898565b80156144fe5780601f106144d3576101008083540402835291602001916144fe565b820191906000526020600020905b8154815290600101906020018083116144e157829003601f168201915b5050505050905061126f565b600080600084600f0b1280156145235750826001166001145b905060008085600f0b12614537578461453c565b846000035b6fffffffffffffffffffffffffffffffff1690507001000000000000000000000000000000006801000000000000000082116145ec57603f82901b91505b84156145e457600185161561458f578102607f1c5b908002607f1c9060028516156145a5578102607f1c5b908002607f1c9060048516156145bb578102607f1c5b908002607f1c9060088516156145d1578102607f1c5b60049490941c93908002607f1c9061457a565b60401c614814565b603f6c0100000000000000000000000083101561462d5760209290921b917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015b6e01000000000000000000000000000083101561466e5760109290921b917ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0015b6f010000000000000000000000000000008310156146b05760089290921b917ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8015b6f100000000000000000000000000000008310156146f25760049290921b917ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc015b6f400000000000000000000000000000008310156147345760029290921b917ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe015b6f800000000000000000000000000000008310156147765760019290921b917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff015b60005b86156147fd576040821061478c57600080fd5b60018716156147bf57918302607f1c9181017001000000000000000000000000000000008311156147bf57600192831c92015b928002607f1c9260019190911b9070010000000000000000000000000000000084106147f157600193841c9391909101905b600187901c9650614779565b6040811061480a57600080fd5b6040039190911c90505b6000836148215781614826565b816000035b90507fffffffffffffffffffffffffffffffff80000000000000000000000000000000811280159061486857506f7fffffffffffffffffffffffffffffff8113155b610d8657600080fd5b6000600f83810b9083900b0260401d7fffffffffffffffffffffffffffffffff8000000000000000000000000000000081128015906148c057506f7fffffffffffffffffffffffffffffff8113155b6142f757600080fd5b6000816000036148db5750600061126f565b600083600f0b12156148ec57600080fd5b600f83900b6fffffffffffffffffffffffffffffffff8316810260401c90608084901c0277ffffffffffffffffffffffffffffffffffffffffffffffff81111561493557600080fd5b60401b811981111561494657600080fd5b019392505050565b6000614958614afb565b7f03f41c6366d1b8eee338b5696f0b3ce825e8b8eaf9a99b2665c8fb1f68b82aa187600581111561498b5761498b614f21565b87878787805190602001206040516020016149d19695949392919095865260ff94909416602086015260408501929092526060840152608083015260a082015260c00190565b60405160208183030381529060405280519060200120604051602001614a299291907f190100000000000000000000000000000000000000000000000000000000000081526002810192909252602282015260420190565b60405160208183030381529060405280519060200120905095945050505050565b6000806000614a598585614c33565b5090925090506000816003811115614a7357614a73614f21565b148015614aab57508573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b80610d865750610d86868686614c80565b60606000614ac983614dcd565b604080516020808252818301909252919250600091906020820181803683375050509182525060208101929092525090565b60003073ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016148015614b6157507f000000000000000000000000000000000000000000000000000000000000000046145b15614b8b57507f000000000000000000000000000000000000000000000000000000000000000090565b610c07604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201527f0000000000000000000000000000000000000000000000000000000000000000918101919091527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b60008060008351604103614c6d5760208401516040850151606086015160001a614c5f88828585614e0e565b955095509550505050614c79565b50508151600091506002905b9250925092565b60008060008573ffffffffffffffffffffffffffffffffffffffff168585604051602401614caf929190615f68565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1626ba7e0000000000000000000000000000000000000000000000000000000017905251614d309190615f81565b600060405180830381855afa9150503d8060008114614d6b576040519150601f19603f3d011682016040523d82523d6000602084013e614d70565b606091505b5091509150818015614d8457506020815110155b8015610d86575080517f1626ba7e0000000000000000000000000000000000000000000000000000000090614dc29083016020908101908401615b1f565b149695505050505050565b600060ff8216601f81111561126f576040517fb3512b0c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0841115614e495750600091506003905082614efe565b604080516000808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa158015614e9d573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff8116614ef457506000925060019150829050614efe565b9250600091508190505b9450945094915050565b600060208284031215614f1a57600080fd5b5035919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60068110614f6057614f60614f21565b9052565b60005b83811015614f7f578181015183820152602001614f67565b50506000910152565b60008151808452614fa0816020860160208601614f64565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152614fe4602082018351614f50565b67ffffffffffffffff602083015116604082015276ffffffffffffffffffffffffffffffffffffffffffffff60408301511660608201526000606083015160808084015261177060a0840182614f88565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156150ab576150ab615035565b604052919050565b600067ffffffffffffffff8211156150cd576150cd615035565b5060051b60200190565b600082601f8301126150e857600080fd5b813560206150fd6150f8836150b3565b615064565b82815260059290921b8401810191818101908684111561511c57600080fd5b8286015b848110156151375780358352918301918301615120565b509695505050505050565b73ffffffffffffffffffffffffffffffffffffffff8116811461516457600080fd5b50565b803561517281615142565b919050565b600082601f83011261518857600080fd5b813560206151986150f8836150b3565b82815260059290921b840181019181810190868411156151b757600080fd5b8286015b848110156151375780356151ce81615142565b83529183019183016151bb565b6000601f83818401126151ed57600080fd5b823560206151fd6150f8836150b3565b82815260059290921b8501810191818101908784111561521c57600080fd5b8287015b848110156152d157803567ffffffffffffffff808211156152415760008081fd5b818a0191508a603f8301126152565760008081fd5b8582013560408282111561526c5761526c615035565b61529b887fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08c85011601615064565b92508183528c818386010111156152b25760008081fd5b8181850189850137506000908201870152845250918301918301615220565b50979650505050505050565b600080600080600060a086880312156152f557600080fd5b85359450602086013567ffffffffffffffff8082111561531457600080fd5b61532089838a016150d7565b9550604088013591508082111561533657600080fd5b61534289838a016150d7565b9450606088013591508082111561535857600080fd5b61536489838a01615177565b9350608088013591508082111561537a57600080fd5b50615387888289016151db565b9150509295509295909350565b60008060008060008060c087890312156153ad57600080fd5b863567ffffffffffffffff808211156153c557600080fd5b6153d18a838b01615177565b975060208901359150808211156153e757600080fd5b6153f38a838b01615177565b9650604089013591508082111561540957600080fd5b6154158a838b016150d7565b9550606089013591508082111561542b57600080fd5b6154378a838b016150d7565b9450608089013591508082111561544d57600080fd5b6154598a838b01615177565b935060a089013591508082111561546f57600080fd5b5061547c89828a016151db565b9150509295509295509295565b602081016004831061549d5761549d614f21565b91905290565b600080604083850312156154b657600080fd5b50508035926020909101359150565b6000602082840312156154d757600080fd5b81356142f781615142565b600080604083850312156154f557600080fd5b823561550081615142565b946020939093013593505050565b6000806000806080858703121561552457600080fd5b843561552f81615142565b966020860135965060408601359560600135945092505050565b600080600080600080600060e0888a03121561556457600080fd5b61556d88615167565b96506020880135955060408801359450606088013567ffffffffffffffff8082111561559857600080fd5b6155a48b838c016150d7565b955060808a01359150808211156155ba57600080fd5b6155c68b838c016150d7565b945060a08a01359150808211156155dc57600080fd5b6155e88b838c01615177565b935060c08a01359150808211156155fe57600080fd5b5061560b8a828b016151db565b91505092959891949750929550565b7fff00000000000000000000000000000000000000000000000000000000000000881681526000602060e08184015261565660e084018a614f88565b8381036040850152615668818a614f88565b6060850189905273ffffffffffffffffffffffffffffffffffffffff8816608086015260a0850187905284810360c0860152855180825283870192509083019060005b818110156156c7578351835292840192918401916001016156ab565b50909c9b505050505050505050505050565b801515811461516457600080fd5b8035615172816156d9565b6000806000806080858703121561570857600080fd5b843561571381615142565b9350602085013561572381615142565b92506040850135615733816156d9565b9396929550929360600135925050565b600080600080600080600060e0888a03121561575e57600080fd5b61576788615167565b965061577560208901615167565b9550615783604089016156e7565b9450606088013567ffffffffffffffff8082111561559857600080fd5b6000806000606084860312156157b557600080fd5b8335925060208401356157c7816156d9565b929592945050506040919091013590565b60008083601f8401126157ea57600080fd5b50813567ffffffffffffffff81111561580257600080fd5b6020830191508360208260051b850101111561581d57600080fd5b9250929050565b60008060008060006060868803121561583c57600080fd5b853567ffffffffffffffff8082111561585457600080fd5b61586089838a016157d8565b9097509550602088013591508082111561587957600080fd5b50615886888289016157d8565b96999598509660400135949350505050565b600181811c908216806158ac57607f821691505b6020821081036158e5577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b6000602082840312156158fd57600080fd5b81516142f7816156d9565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8082018082111561126f5761126f615908565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000826159885761598861594a565b500490565b60008261599c5761599c61594a565b500690565b8181038181111561126f5761126f615908565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036159e5576159e5615908565b5060010190565b600081518084526020808501945080840160005b83811015615a3257815173ffffffffffffffffffffffffffffffffffffffff1687529582019590820190600101615a00565b509495945050505050565b604081526000615a5060408301856159ec565b8281036020840152615a6281856159ec565b95945050505050565b608081526000615a7e60808301876159ec565b8281036020840152615a9081876159ec565b604084019590955250506060015292915050565b808202811582820484141761126f5761126f615908565b6fffffffffffffffffffffffffffffffff818116838216019080821115615ae457615ae4615908565b5092915050565b6fffffffffffffffffffffffffffffffff818116838216028082169190828114615b1757615b17615908565b505092915050565b600060208284031215615b3157600080fd5b5051919050565b601f821115615b8257600081815260208120601f850160051c81016020861015615b5f5750805b601f850160051c820191505b81811015615b7e57828155600101615b6b565b5050505b505050565b815167ffffffffffffffff811115615ba157615ba1615035565b615bb581615baf8454615898565b84615b38565b602080601f831160018114615c085760008415615bd25750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555615b7e565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b82811015615c5557888601518255948401946001909101908401615c36565b5085821015615c9157878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b8183526000602080850194508260005b85811015615a32578135615cc481615142565b73ffffffffffffffffffffffffffffffffffffffff1687529582019590820190600101615cb1565b606081526000615d00606083018789615ca1565b8281036020840152615d13818688615ca1565b9150508260408301529695505050505050565b608081526000615d3a60808301888a615ca1565b8281036020840152615d4d818789615ca1565b6040840195909552505060600152949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082601f830112615da357600080fd5b81516020615db36150f8836150b3565b82815260059290921b84018101918181019086841115615dd257600080fd5b8286015b84811015615137578051615de981615142565b8352918301918301615dd6565b60008060408385031215615e0957600080fd5b825167ffffffffffffffff80821115615e2157600080fd5b615e2d86838701615d92565b93506020850151915080821115615e4357600080fd5b50615e5085828601615d92565b9150509250929050565b606081526000615e6d60608301866159ec565b8281036020840152615e7f81866159ec565b915050826040830152949350505050565b600080600060608486031215615ea557600080fd5b8351615eb081615142565b6020850151909350615ec181615142565b6040850151909250615ed2816156d9565b809150509250925092565b60008060408385031215615ef057600080fd5b825191506020830151615f02816156d9565b809150509250929050565b600080600060608486031215615f2257600080fd5b8351615f2d81615142565b602085015160409095015190969495509392505050565b83815260608101615f586020830185614f50565b8215156040830152949350505050565b8281526040602082015260006117706040830184614f88565b60008251615f93818460208701614f64565b919091019291505056fea2646970667358221220a4a0ea6d9f5a360187cd380013d49245c410ee614a03c675337a55fa46401dfe64736f6c6343000815003300000000000000000000000021c46173591f39afc1d2b634b74c98f0576a272b0000000000000000000000006fa8c7a89b22bf3212392b778905b12f3dbaf5c4000000000000000000000000a3a32d3c9a5a593bc35d69bacbe2df5ea2c3cf5c0000000000000000000000000116da066517f010e59b32274bf18083af34e108000000000000000000000000f4fbc617a5733eaaf9af08e1ab816b103388d8b6