ETH Price: $3,104.14 (+0.71%)

Transaction Decoder

Block:
13078502 at Aug-23-2021 12:50:58 AM +UTC
Transaction Fee:
0.0885878 ETH $274.99
Gas Used:
3,543,512 Gas / 25 Gwei

Emitted Events:

Account State Difference:

  Address   Before After State Difference Code
0x20c7d351...9D2500a77
(Wojak Kingdom: Deployer)
0.131510640439542 Eth
Nonce: 2
0.042922840439542 Eth
Nonce: 3
0.0885878
0x5e198aF2...A9B55098A
0 Eth
Nonce: 0
0 Eth
Nonce: 1
From: 0 To: 153882776202258599717951424995664611889710390445362109899027316479535201395122279694815258170655661933003473743659748176131431188141202412832621155183649460782721456653111069033263126955513062115229917735921802735777803589809345868656566461897854287962475634104868922885534552101319315935476087824353811760842899789401613629870053992339972691410165467485649933773841663196376645249458548482101422662047263614981031629758874320121715429202194569994060996414009121344541616466727374659598067280354808558689262519398987851995270296664622825952547864605687499625580825724040269175355232004233583887371297750890945592942015296106847339167660315421788548302455439018253476794804959842539940511189292123340473170957893644148073804634654180430211299269808149574531080048303497503572463390305057159059938996022526295344491181984767191854865075564549168117572306527580176267741717824751186537667112971264928734426316506297178782901610674699828796125839327329171706195728913459501232791086882681797865533045478330167254288525825907268395820397148846287533019790104600502164554316098339516352075382746764776288065495392132109466273441348275298750842896284074811369274900527010431742042719908347944666447283485720652496621553162234206049169229377764312271399810114955792138318267024200565031319782464365059760585532019168347181597409718839223288805233573029248560127647226631116302286759030426011300225400633601748105903815705506501467151520046873270882388466792677665015867111904061494777770039466654262310827587040324546410207695130532300748248651123520687603002597797528837410641978699689712585109580480945894562112956381814015756857953220836513270699676055750935229286172375116161897610332431540470292909890361155187381684325261013816226660317503897704687509430225148816031561843079297759462906322030420421312467617176918077364020140257980003403089671311744812018493579422885382313113532855198956317420000548187390731057430785090527013167012253333572180516488897130092211565188673124868161792004136032406690628946066950451906824693957184670756045473033974470431574651687245298612749641643710431704511565084344396473995069531639846259808819828548234163668238040163804896368851210722335462185231401022823870190529622390588437524197433622318098715809450599501828753748397110481637366458254486401624296503285091599862319455816524764820704132674560535196077511072219302123936038125419626142891260003227303280175692624448208755092759759858869225230131046152644147651484641210467631102942424250527406132368729707279767533415578586603040792101867513222649595318354600853755742111575172670344385846370132095273830905636673070855092675969118456215885047237024352424056069553527632155709927034976078558178761636418737833548180311871102176937180291077628096955516657343588490323055692615115084804966587492674021611411253811773607128219324193139519847308790834734695874731834528827074345390148188937136877434763448331894974363453716325837364931395849266174515366737172395568701580934427668012187456059870157446598790226868979547313398693585951920862580894786062920913169693022847686166709846016860388026817175946054740456816253733064767649841339606720466221748094856914870043800302826454600629816816196712469404101208096294988363268326430253531592755831570950855086120929215154151467780089103933297489079541313129280312173219857735680437093755007423150808498241494728165147364761635581428034414562942458671450717371287495866730271227143223250150425372973695636098205270517603838884359145152278032794327341814105947113103953305682052737309060336587520011303639957029011237988128563058230926248891538266629462769252122346059606149280557583414780422439081303414947032633954890717678081209036555731534695899785346580867372438178800557561597367901230134949344323781735540634253835784501211547265315483799316784566666393036272262570669073090262362500057320316246178221778788460792559673686709846773667649248475429705146276231224995409718389933309068020261582132704048767284793636799814517924912617220161077387642675778036131385856390009028310387418192171203464384123665994302136015303359491670134588181360607100092701729149082130181708249691041807753819324427816596208880418639241246453453176634111035896020052691647130991918637442027001110319819604665218357026289136992258771313295049738603634014482425892638860567625533002529806189468746544758601534923247989005408781296200069117033600540876437921206018955669183222529214059838529934243596622556590454175818300948987397205682596418165561302500807531070119024595962275471802959100703905318875689563603558527816257476777930608569070540061300548762078911535164498852378618771396695843935868226133810894731189658077694766985494008193336562865747851170577731193204750769000710589224568174490400510751661485706099904190547917235841014690374852591990533867650316976802444920422023736733748656226038124500692965885970654007474200581920740620295613446429673508117686304014351840237352777804083781823545087080337733016272369010936543974166690001401227995056059259853974910672963611400221314522780088599595226177690438929552273887742342495067995147556049079355589196868220784796944474479429100944352729878183732003174282038444930205289105000827241807255697661331417539516044569239743674994509683156743701913933161031832175788834804487510056000263883857815370974611943548074614377953588706094298415691364175952155949016499908604619008391825005235694251041241969189139255980395957536680496938962055223334358651048739853807433451757528433196911253675440562285314357934019669662892621454845537748121520184304879426775748387127881802876824049549023136056275613354747143708841776946025711941303285606074429752649371852548823455064948369850026446564664853549779913314409659743477803459584251339674195622200239480228297383952172746785681792954685026916380857713167141418782941886947222889410375737692421558771185507374513293349296042884292408027955580836659120856025597822913306645930566704409317655297647430607016638229439783279213316817534174271314987486094687968149255079746089078417834998409862811262325228774592909369496656493383220719425440303752405447790193788142808332083032148725669318398752795506960217893293685567988820655167671403247522655361057704734632122086101738255012483426320742419088234344224813260518447032024160902471845381668137539403121173141259644430268456755189245627205222817283523112924775855560807370061391958367015091065314217585802993988094055275813417241759706428088500808582977561764742968809954423726560711464538916596050786067508493518390906572693173338814378272060518401466448217307865062973756458427587943062739092266871823749145776393507459927509617139085526740467439561765411857868806578637649253794228585952784540094856310808611361607466375010173090282501049034257844462264929314334654631673457572206861965254866255504331219567417834214398938188910737611335624185100627195460162165029666149798867976099099854827744926459720102454609944440654690184105740330889151341892919952792199679985412068059547994782473029123520347191849563586070436994009190457280323368566627857040139963612026786777267188710777092536530106958554011613352267618067470579729657963725102728162691647823562399698773933789494931500983894895068988377886746303831848475895639502255600572713326464130100402414901702193395986428307761853659718215293137016231501620809893408402179745557787100970673641091340596163868177931845184477009365792856888321419402304301188704944894191776931134102594566298812111857076911809928878046113711657082768153527842657263105652485944890671975518977361665677143393039247440015234920313363632259398866761800851981630132757843977747030399693700175362025439150996474474051104953565100724939793730485927328124559584468587584285201719798671886120892728499385129614762237142456245767651057022924646584886595932754652654260267785941861576042167515063937664053891125109100899571387917059874847453029737745499310975717669681307039682655444099850049289483522225617144280024091395388242731227311122263658456225512010622039698646110519069485842183351753419797798279758816596313540301675834896321295059744523188317152293853650222958086792207344323206025027373154924249175384174463669913407802745890056738199429334858961739902402547849642828485592048594421077877819130617641356499747912994100166280914281270602047288882237304868862765860995585563266057409839969092296994601808618495178255903531112019574604254163317082956926228142356330098916822530292060683092031399795107630388803469503844950455402643998348909053232872073121859961439680293684909795485062092702708369956226040809183802239288026207330995719965672769317632072536602475350344232561448441375575766609356636696723856795023626643092320284301467368040103085695603526824766393235224405744047193214124460056970331133372692231473723006231011542755177571092630368038360074513358932836429924776902171683670817981890090058533971443592340373967877595574129245625273927729655193294419777925592992652765716287457538225378798348525458451427544047696269017845346129924432404852560638394083669151246623514254252946417124999534229527819658761338231573665410283496991517039817183188463172372309082196101207312675417667243525335428290351930011782323767254916416091712828621953230586655822319782390173466591674264747506743881054536228678449080373804398126682094870229195243756925396563073660134331648131479829128863635270965191014899535519820998066817726979193651701481179179101727767097325751319395811645983510627450133775745375399091575134607904443021000055060083224384318417480060957275684617263933083148216378805828812155290208621082689030396909774970243549640803676463862623766845961119643689783934835146485460367413923078483592536664498707785262828099832728535579763367162252119994463510563408227294488786674569007403425180208860539112886220449967569195790060069468289128937933592676060356581171741827319263514216467184231256133550205289362202361690175905071501550788814978219166238293640139988875028465938683874949666255300301080907928405157521005192818058760952279123552189592181841566564859965185371516390650385221040653416605681945304231434382136611115847957444629353589059412756461433608066070859841355397496561748872148208558469650162259701050328109076874101078482457252203018175884115382371162644356963465425413084634906967324195154483087979514956147957555926686184677683770930445592942357990560532362622758227372854563948029773329637996387220639292404139650517202665732669536725995137355756140831853520939740595794978936558655418231287335959397423933951121258109821743429099621538926886989009157673385472879782274522260996415564932523811768391809033855812556111864222403741423445165541386814709658162788548777838345692804397097230739553195410835978763282636936984087060738998475265957065975333962091439001582307428706860900504563628027215373213605416255799984997817311403558422562428209689380865259339662622951701775491068127431189340570959511653126756131013531226090796391576166484166933520335971912716096140279623623533261087628202600535256881563374270868035439770790460519408466545017250105580091249774562107395685559783384009434187980092223358967258930005317307319972357544408088584669418727998638353895680332781801731420153232676367201531284193627135990239337035643905933106918501311615290663653336111944615201098879719895847203001033650716471075865972807321946689242050191731689132126809361185367189914351051537173856577754668010415825826120830823074432910306662452839667615741885472634503700234481402272104152685314801848567468743571901913508013315984510532584062399898735279176165089411917989049218164197892497574542860561110875607112512293948609330204307091477101347593835084433472972030543154798412550151608639923278365123294843940880079090423451011286339503703922121441407538829051822659360439995719949107065596322323806465296563222355791499975737105119753533541020872528800764527469465299821524956148792606272260712505968706090254728963514585309067325005504151288048041540136719439044212407501394236479749289089303070202539843637193296560951423340312880452691474633724421642523211827491922932846398890808193578908833081401000790331537990878877468175056360621021562455231787823484671417884783894796384795963954670053573639159801421156787433724725680937798407663926473064398712285120337428471724857972939156966527754420955158839242414062042872448810000626956152184077511183487785696419571725312528408841606302430466492901532090144135235387859722605372401629180909323035828726699053930408749204029962576883339422299983396133269720352528625477216046406384111413681986162510156094026947718007069234419705787289945350154447941750296489520820541845118372372098938264676317461106881114637700322635202767168955884693606535304749803387409291043297182551196687920838853361093260673569999675261203901068687381870761447466060848883576730845671314559734580562600123529566117405576116295190621982355100637565414829274929690004197166896666395527082793746744234581012380756874624789999052594310862769901876706906995928590865276818906650782368648929011298696777559540931269864520774627776104181417843193857873750791817772260256167312893262743607039937103379866706253307480839223195660589470283635936124854364322984015668236716643950037658955085667177083293568661165621358750549139546503928850074007592345650391407921040091135263416830683257909808202377366775305635127716930143074932499786529298105314927131005425641047328134115869546718975078559568494975071041647883662538696424419789367916369159674364482985152227176483775521842130834538630637563661944072588094043715647495478666758705819607308017300259835870406570646247141338437371873210114160029271975796919797241459886193356702354240916459666814947905454466987110912348788309361203035305539269833294274888787868845254692622295152523092080913796125771172995446944815119699435976612416904996975910262874111119378498959865708744727320752167074731897543677617887095368238493756656994723160798167379420263210175686894839346504499735094591441606587589215718069836485170747748330367413669772078755689630060057599648168113166757627147766658543664082494440615291629824503978932050183626136969358861781269900953375059845900301222237843705525405321796138863624503085620007170973506945442072283646700581726350148770399247625770388383784192854420685238626572224925999524541711388496964008078809824295539081608267447649241368830965435056197555862697022860390438251869867739791920637575768936145315358080037474407056781787846432555691990030057071368596058689692050293381936886497731695281179126531249188560720470470383914740546800702071650975665033174650241565099418660812004869743546174394463470773630595611484344495724329509211885810305995893402811935707874105040749242041517174652257675641484623602318099933123905281750534999884018918562353751997099944349542613184909848859525171519547986953850893549436934715155647954622291492123645168514677038377243477894344285713063939419716081595670839529646747227123756221750934201405912137310761352423950727775319769753344264467910253396930006583789924021836232280540064761781142162826225066362250708108513873026258394712754331603603140640509938863013465079332549934928419949725540080157801053718011597449027750127525101101107069109523042235008171246808353673849650930897298246261185616342045364337932614339822357444814225510832562272866932169055528773914340105093590647225716059881009232041127490767542612318513031757153242431056138670849540453335438567378119920674060000208225254958633873135692319130576411968722795705366224079523894107997323660955770822011956530718959586975459550985899186835699796345203136641043559581289754532561277535251167336247686517893905582944310050890170239002778109988179913543570633376810261208735663915251121474095192576632123090700741608086875994328895108484810479900262709930719377680761143372434275640727814321224803031342977612963190823320975776360144221196273130063929519098899981778709329959379007512126528294039548802749563414929951080161521118909861911140389983802094278443651932069471750787971118360611362051480444360034694436879427847472881020329461722151882937868243854590868240751401151547893802505922919547632402225354481152346319619380133224369324536287458440305894644172154325112981060773656411376914493814938344705639228097104185557409077465089920934422872701841938891046029994810944332402071949545803980518272757485329346752233132379820031879323859445465534859471599580015995930215021146412752943227808950943886736406012462533029610455981370410553615061355288114332644251841075393902994566049391295302563085016299810075592931629104792070782988976842588017360779193662807472756225963421162111096814335051128554987096814681047467683441035143391937085559682090387905761400023998920177697748206286489252251167364048572700383719008860355237585145802985473364376824638606937259064111543693390237658187070052505854505939264055133247674098835874059122784527008679534150091343999017124149826656033624997833071036957299149245500689490126198691366581681613648626324075309234380578445268796583346198253481197153707798805834192177475673656508573727110354187309784803186945409499368655376242772967332017362341813510737610986640065350737911928908732303468263811763094537285139168686266353904534927293516095981237908007508928965373658311086164416094041631849827233156373911598753622056940724374259588681206578913695952748846970718612600939749070105539926079223713742980846708988318757188165242083764092921303152161550797821474362040610457809920165956448990662563301081421610355140791368130426294422134418940507926614839188844176337481456749917676496198789408073341546068984448967952884577909854869199491741433667326241639139684414174396572014470848127544306174706819302047950097519233222848456632621407363141478518850324601558427909778062979113238089136429106611793525116834276962403110150490242350166702672439151585323348194629051948566786198218147030717006126349179813519997331870131386843282007276470823090251357193906196386632528141150483387240998128133285089604144942049202652814228952717000057426147686428043877914096466733259640929035887484845290825783705568299545815718727762271870596030310690890465699731174331985113473832165464368002434524104737196964591926037075838633236705208767536954043166325132543086586596137625339335118984874685647274963580205419219075384122536893381674630589132062844017381765175371124857160479351049117662560358093501365907034854128399057200695070905692908354725927392742262156174047427436633800161509550266228572889559057438687965613896706148057161699406735449917265480313984190893068754910403119180722500142862059776649468799870798015849748330686643257715490067142581454554787043224540886398155454206569609324653247801737077874988069642760834270943004801186648949317833685721353418196088909500584650821663259363547689410484070591721697416221577683523963569294511315766423142020148116323387359446200400584989404638850667116833514341970592339469187610520375368268059219553463699899918731869748252847679008708986188519317614933088316455656464621651512463688981876461042037183794278345179763363453388748153771760320636925043931558209630906238013201557846091683301221726099069758191418378265190333492440519106281324450705962173540417732994754734111504485740593046637685474834555232888955577129220052601313943303889462895167431568838142536758891720510230445136730463557513851628497543995684770092126327448128140199411388903401430984285637456796370184990438311859104746097186637508864691910258356012683655816898899779516929613133085620251273360116886906993495760543623551848171350103129130183253487334501245351804032999516099905661448165750500264856045888664399635618766941709517375671811894823925520067123693487760466595210898425579799643118721268016542792610430310215487286524816897640517831033281205825609622265816019998824632156545994353289303476781081992084083258669036243082967948463509776393816682347205229039337076153829039500760947450039738738812065205960457886783880098497695428496007298495000178920378580331742563029631923946970645283543344636071255808521815012042491849902361823628006325464884371566013029896220562948017074923194130809092170652775896827875972988754592460381003584378674695512527764625717044168976367828765179875079169088197451098083029604555161069107769823827299481483801681268628040232628966112619013260260789057394153638715229524427245195869907031961211960371867227905916385548916176890593215230302503454825520005319813243194181570902379041755828371054645146540717189587202869099933452091329780822651166802967767967669203027996681957195482797271354389382953068188983191438891738757224120124277732332852589460996802595936179131188116455911550125046060582710394507382242028009177634882853271844102520641332860453105705245062017946699735607633649927170148436006562472976772746627750927587556542655830811067500464333375995851847494120981836202597062303941631343821865858789994496958768104628280911415113671615693268398350391696912860310940295086434635280470758355020853794901119646204876678281715328457292640769706691822429436718355911855387952749030274921638990300566960584383074854263322225531410970018327516548659515277658002557299816441192725495573369953126774202112475781779464323031695641914771274789782984150389672587977280727881685155961324848599081111766691653330013821812362739171979908967390472601176777332090526272173270851757528598261099426694833966271902615738721809904064403824175774036695314753013883928434898488592678699620991700150185701263192549586861715309848524135058936526896803359026986600065236937594560499220925968637189995304291009588574546192735235757663613533591090292372306123614817786369235522939026665668232477950078440757048387348299651371181558779272265977368264680732209777574251444561842984907997152702417782684610538943972449450515031308046276827054956200019501885119193009957615050943891086600741653058146052348566650289349702932105534231348280695499281542934849518568390786802776052918107442771078017803391113566670425148927334982721806129740978045908814115565505721201111743257461932527646210579341166921680598175454186738667910497488293628011014219231367204793040865062667360589017674804909272863283819454798808358687639115009598416957825811149662342854685977400947289569190903381001530090292404380122907978201266057516310114221149248737601066205409225824954920918544476542592815790366597601642935801025759243958736732472508166709474977664886009824054619592911393106726253350408697825935330981574081754649601047448141494827480982948657239003361770247826323785178494796848782725033930562222225712005371410843276919636480971834691725142834401764735637642152927278467435507701939562058289262797282255587609225219365976033280039714622579909026775384458029754589061905521085428544736231014270176872139136073780412330963828685201506765147214239460766197451432806287087743151983604682155177735837712139670931292371285552794852913217895104559239592643625388243656126163901500684539068392646809307661307601100804703310677462349690051970344741558751827174604816486939888547617759877403997198359266338015500080430983143626126862706735115699938032684020934277697503812031719839828434078755631292317157710665378474861427229185464157161377534136224051433679564315244419827048561513175190140269867549080740330304168758460889419495767765936256248997257693903077746016734208389268678615137938937333135148615699710578748414676002665108688614458805487364654877074845800252538434870088742006114739396700987024856712996459813643781125323826996141769209024635155177472234075044611465962214814280341311260494521527450999986806297262366473892983869499296568032049088526748241657718977446002391579028769298980455946113830487039783159416230864551525318677041067321397704958630479261136631410970863582941001901384598614036642383147654221970636483569936311376415245200663609409120919538276744370108804960961246682055094440766636357962112522407939260428474837740282496379202170126379070827942992171653426752438151855621724683250137336947252472979764761877711506330820565473940418597130884995718822158483341459030750427594638665362696714289928028430438567170781757900609561268920969891888807263482170832637841832279710378157125156121313764427703983468918991167423200755429995508398671456238747867600346387707773468547002757324400312237026205896661494511814058366803950959157849728349218276811199108829519862033443777516564278498838820817713893384573579702568072299590447871892253879224796582943144449856316145000092998923297612680915317314082005662147632977591278479797361944590996351310586296297500444691310632938015630794663965266876432431282854730554499413959852726379705465232348897452347427948748284438594640206892922746264558830268224090367365543511563686550887937630310026795653238663625588497326682954066115262134864292901798172711106653060578645060418508576440107896862046107054351422763240586533899467276346172669753104232185553553966257310345849153122047142104165875009950760723023277363528726239014047505622946141203069177950542541064545552342026100921937339826452451306616632250441571371269328643280675804385226964601324302471049682619590958746793387330726963155552733931510217752228912709313703781548982397671805319815402809896506936160745983001940138217217883413283071588993528422873841413679225996771616713505274474755963558148986302051630953705903834706031182889706801718519858550026910990877927730540741881597400411406050463013326157582123286270088088756414703455822152496365260569244403104557250240614489236080806109686174792906296108420621260613949326931853797219907583540316191824340236867791069301432253402931531766562067912095757360625666685169804710143128810416629037373016597304369919322037073975896560955586428963678098112060996754281389207554825145385789691251323317729937828640500023611602078678002508996861438300777136880573954595540459845769354203726056231402667186013254899094236537805460661931497213055446457117663395220446814692346432228977691803813407041978668166100420208491148362715951104642207241291002150250579058894575029235016760746023783568606236762823951731854359992492557589264911208866361943953692420990235133145341856575975181901258904846209927867251748457250840720546300576907280166768161882806708097097425368764783055119484752412551239521667486544096527999438351838724821743789589302130046114749064347594287030049317771606489298681683887233107151111853377050233993651740236000537424277053370165980937193984665694677228957946622205813080311686572246529049908054717016159235403362053780021695915703043842060842230099726050862108351752765957418727285639942563726685138753417366337764904581743165128543384247409536801438222097104726619265171665787149630512726550091768853855811136132716668827560597212089375929549609854362247112684080112219767461071664801021507589657098825486358427124059119333572572211184555681050904642158222412789848772933093036661460685172139712445851577679775245709957472041617036816847840867276108085339549167111201822977212615196338374849783407468812376076990256625489692822606737274784752164985574439734358630444544841783070706301805267961493894614600770585679603507888547015513722626108499898029753187139049403182154218692696897229586611913993470611613584573079744463670733316581502760003693473099049615640778990658813388702434681151166424115255615262980273679539821957729578197904811043152882628378748521871220713667438497342329011414200094191057823224670054070677632527509378934959248534362532143978317039004611572943679670816167816285161592175926203479061614212864466454780018833972129115861623709849528457512627203509031735320657136548317668451262506685613587957179887168935399015681548391309656105966501316366538160008141540927828601833006656172910649538082263769945167869186826662805987555712268123125507174248412267215966860540757654670376623571630145241176993185005817555549545344433608186934066432891958551598206696070405110793258862863255268128120716491507889611184974343381598015350737663747416310910234951349494328598746792092711784552540514786073291465811095594418346799415890011515008807244162184172960548134513317250584830560172038714426256986542074948607094337492432069187576185023186847820285510059777932971157319632629035921238227891616264663662744004470771447053048846744712230871856619898282152753591836579510967123391358420416550239284222268185293165741082413907959236417670526674650296524864605917163973477757605263198060161749249395549008527330142954986747054712100829584702056859831790949055278420545424904416342304214565969967566283502584005907911179122185552214662097759744356925434502537070120179329496268998159038303767680178361540111144735987228625538645909182653529495244702583211945733175939279337272169467022902373210098422051574490594710156438828863649157378592809888435267866102248832206733396642646588667070910523692531617436774881444008520683570831389397553812201287618621041320185225013535854485611345667876156382774004310363221020842500244341413048464664361415973442676259099096726301907886932920985239650453320481337165910651149140556485351431905297294652065899866792313388520953323526611177192618929017226843444161434719016565624870587836963282551855343087480862768571099353594774289878928682012445063131731732963734988334827475499203355807266526631452064881458301574457635631724120164470107140285727093486324452996680872184316593270612665667468632600812746974010468827984682780946151152725928472627579969204585594123652657942635479011772154115419982620325501449059010819944233662319373140907421493365579925886754563790766349361543662599289577070832451632864833988947845505220140338743229396925823693116819736711932529280261902739674331380096193026879491130283737030102797700710267232866071782513508468092599086436262896344770791359661332207765840663210369671553930231364532251181638549612408712221829729835560558079465983854915477209915583773023101785637557683925234698230682816069112315046737387341473200323429940120204072273752207198833428213986590972487842334660714705094507906914996200266396301401500690196039108880079907912176107650972105524549531817400983144388181255805376869855072820228978747601600930852647152538637141035837311515469835437354643543549883593079874749602773440935719040781217417403140142900238025485454725371036815807485369559455178207938255794684115175595945716284334930449969632821631586017062694138719303136634941814874369658633648064257848105941307315445262753179273416133247535519175564981214760653119369402637633590444225697792531278481763943868995262051014071236649388717156230011206274696372311045112848448379570728896334522645155517723420643242055267406101816594398085536317100402128579396953685066165782446474403516554906796120964305618199503948840811439676914484656776795730916489012015428733362633307008276672953726711612662998416666322292977650052186646277720597754615510605526689645254986176038285961469263295612668770295207968951426956771658824748729417678995883432080565376491637996473589704690537676240051480988461193691963903099752328995235250936459436799262545091333105082510294589909635656425588783662789203645136693140469347268217267133761981088378925562804504030959823846707459656689565450056340806363526532681654903368736925166866586702181038152983630190709016469647392894786452859548424897932310584465596282293510637468961248294503975770605564265531584020483610864662740325022107158774513337726010235547228229826695190514772891240190477324689413582301416725296494207343887052635330057122197562729165429711672288947062170526947165666650674658827158273062022929253072920290144869506381031081653760467742979111730730963888958074308165741931967677287253297386090953872221249344721974492231403506209717199341248331629125387794537205173418300345866206320859875449945129088015720069657451456933397758895299267604147054077945803699687519036817139785350400136037909559750700015462931078048784762572291097857818015020414352110673970294739658702223620056905872462662502124150425101293795218105323834887268685790251353452974401319295645818090293494906289575364588575281817134129193621121654687904720387243954899926393117544373293584904620171548622945816608727599888681799241428286921279497246231774216021083484982577613664226984222901505531360532601736239379365028965337132932512253766424887117515717789537994805317406052963049343365340160275889793760224529646016063987651068059759016067215818477898796864760068540893771000437831559024635934426543787580547438827875814447774183265294428215924186760588308288549611081440478638760204152008743698945986171770521850096578546764943269107370092982168377199882983497328971827278371257721729937894380379642072077832537843114305841506323074509716403200634828851585867492752582766977079726067594435534615325959764311178721912819848275529579099491262963820433262939622067884189194241602192163179534910032685239297893323152737024276565855330347729502906978719624989658199485786542666385092740298833534696634772595541151618822078773778749739967715135627105127501630594238704587797140355809713661916889142892484393186470997048860668786403879742242017302352042657945281363931379351505107781760227108319457347957577290299418845966571733407945162572702312034866889540769876295576678012750924606397014728331333980014714992630713726788512183913868394567296743029546770364868819932668190286206984192722979267896708076040607031697448423875742512323418026346637987189859629464857140232585112967029086882809013725195227822533137951033907299221190908477937613308531646225199090512973915145964472545063284636786151698162297569558453893160793965064511176169835746544736146747981942725337521601181306902021203517659026163685263586080378670232592746112567174155915189730676335767354117229025400847490214123972693804826499011269935997223549394616144780467145468134297941686814092119227912873784684146882254641691707802208129134024008515381450756552567840884522266991903929666469422020113941672803721277280419875812035394987881613875254648067983554146583834544932147220151251214664096423574404776062315641434740707418251402768665672508130731084037421062118894323016139888684721056779016622418095817657607099891562154491352952080415739261806104546067499086053589048939473629182179820586933336296155239229933570452815906745598863104309214591560823571992733535402131796873805884727216158138247667689030429469103084780429001209249894793522988404338283358954979373318689305343747781356656392712099270929811616510016380360358552139346117306037264981113901508929116736502207544253786776535339087685746765933356058338942367731854003788016522826735875247588389019557020705387781778005655679396085035276002829807041489447435872718105816929091274864803186021832440520528870150125110390011250065222987248622172688194953456464032476043438974613930485784603479978469921444816470579463835238756839630670096862751899273016824053887894422747309424463692632083851686175246595344386756026957262566362638631828495440140030072346489656519098260440436950059474048003164782146321861800427341065845244054097420904136292210429924465699752489859977623304387616411937678050508919208046330437929326831382203359821861637274449863428221567267902571779540910738468805841129868704936068763207302520714628516094433144994517287127314527593138679455756385342398446540827543183959412663703579615853558676113997707886923506113365236036020757296448216776641804447333299295574968955051146177034015341183525949010779917381067862684620785568570019494263808637275866540680121203817504515029213651076293121371691239045177151081812867166713466012077801551489448891708816290760995025851676063096121815123934007557357587135846415445881811356770153499043524841957350126566363011704209870248180199896322128084560125655218011107881109088315647457356856426701380407163972653033068966952873768241543252236666457158351694089540482754023317168057048620016092098323840744689533651208987077912369274591010451562533135160865049738962697339234150175422998696653630061030854627478949381182699849306738927199593145728309937470208119858321040332939190701590470198894425885465396421432340352864851057173889645771395325762338111425897719335087015685975073129921324614800906657384358843315705816160432333068178281363218480609380537052425576836481834007691096766440514562740049904664269020870688734426391083158746315251216658756931853386923608658648985626574962787681449930190612264909029964899470912234524668677234300896489609678025273357060134819470661789670965142658872945652091370357028613634817087109303036277103781346383211538798264198145342134524343319782135550489484546855618622574185180547809788090897945179346565843485935536053525902168911413682631725396635738866875874252808485807923514002952280070309547944246625238854877838062683677054801332806211338789553511421000021313306258191630182274742951415937881703349334884286064839203558821773488321512745882059280266326334692101593666029969161932835149646432956657043207919445437386652164952254833155626736070697390211204139719786599627477144383444628415027970789022059840269230388654046638132870101896315689565456664573634627800619900185064402632393732426438142779924899305620685151771026510960307169499892333215761123105281167144010013701030558214309251682956836693004777100037749360079851912315428799659199127930302630848011996689771957709055672420915744302557054901401697503418393217857224146231940717717291890870329257680558465943093937299327463249223260073716764102858654736523286957053380729561395316724273009160646975685228274156533463315596483364511222499639261051601177916441778703839770402053330513610120160533561504491927380733750245416130440503623617034147458169956587516824926722660768532441439467833397180863332206748899429041954857041361792723195463836264933209125465485737837385362621938894463007287761113985044582727210615076153746712533033438344506726542041206060724574431433795137348556188397858906223198823125925338747427346212317125968767915746014226425652057848852440688245628713047961607530184949643125904367060423639848824317275848871007044872193310563364190829498365244235345303899422243372769820660790290676476805171
(Ethermine)
1,718.97381180334031195 Eth1,718.984702202782201414 Eth0.010890399441889464

Execution Trace

WojakKingdom.60806040( )
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
import "../utils/Context.sol";
/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
abstract contract Ownable is Context {
    address private _owner;
    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
        _setOwner(_msgSender());
    }
    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view virtual returns (address) {
        return _owner;
    }
    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
        _;
    }
    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        _setOwner(address(0));
    }
    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _setOwner(newOwner);
    }
    function _setOwner(address newOwner) private {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
import "../utils/Context.sol";
/**
 * @dev Contract module which allows children to implement an emergency stop
 * mechanism that can be triggered by an authorized account.
 *
 * This module is used through inheritance. It will make available the
 * modifiers `whenNotPaused` and `whenPaused`, which can be applied to
 * the functions of your contract. Note that they will not be pausable by
 * simply including this module, only once the modifiers are put in place.
 */
abstract contract Pausable is Context {
    /**
     * @dev Emitted when the pause is triggered by `account`.
     */
    event Paused(address account);
    /**
     * @dev Emitted when the pause is lifted by `account`.
     */
    event Unpaused(address account);
    bool private _paused;
    /**
     * @dev Initializes the contract in unpaused state.
     */
    constructor() {
        _paused = false;
    }
    /**
     * @dev Returns true if the contract is paused, and false otherwise.
     */
    function paused() public view virtual returns (bool) {
        return _paused;
    }
    /**
     * @dev Modifier to make a function callable only when the contract is not paused.
     *
     * Requirements:
     *
     * - The contract must not be paused.
     */
    modifier whenNotPaused() {
        require(!paused(), "Pausable: paused");
        _;
    }
    /**
     * @dev Modifier to make a function callable only when the contract is paused.
     *
     * Requirements:
     *
     * - The contract must be paused.
     */
    modifier whenPaused() {
        require(paused(), "Pausable: not paused");
        _;
    }
    /**
     * @dev Triggers stopped state.
     *
     * Requirements:
     *
     * - The contract must not be paused.
     */
    function _pause() internal virtual whenNotPaused {
        _paused = true;
        emit Paused(_msgSender());
    }
    /**
     * @dev Returns to normal state.
     *
     * Requirements:
     *
     * - The contract must be paused.
     */
    function _unpause() internal virtual whenPaused {
        _paused = false;
        emit Unpaused(_msgSender());
    }
}
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
import "./IERC721.sol";
import "./IERC721Receiver.sol";
import "./extensions/IERC721Metadata.sol";
import "../../utils/Address.sol";
import "../../utils/Context.sol";
import "../../utils/Strings.sol";
import "../../utils/introspection/ERC165.sol";
/**
 * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including
 * the Metadata extension, but not including the Enumerable extension, which is available separately as
 * {ERC721Enumerable}.
 */
contract ERC721 is Context, ERC165, IERC721, IERC721Metadata {
    using Address for address;
    using Strings for uint256;
    // Token name
    string private _name;
    // Token symbol
    string private _symbol;
    // Mapping from token ID to owner address
    mapping(uint256 => address) private _owners;
    // Mapping owner address to token count
    mapping(address => uint256) private _balances;
    // Mapping from token ID to approved address
    mapping(uint256 => address) private _tokenApprovals;
    // Mapping from owner to operator approvals
    mapping(address => mapping(address => bool)) private _operatorApprovals;
    /**
     * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection.
     */
    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }
    /**
     * @dev See {IERC165-supportsInterface}.
     */
    function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) {
        return
            interfaceId == type(IERC721).interfaceId ||
            interfaceId == type(IERC721Metadata).interfaceId ||
            super.supportsInterface(interfaceId);
    }
    /**
     * @dev See {IERC721-balanceOf}.
     */
    function balanceOf(address owner) public view virtual override returns (uint256) {
        require(owner != address(0), "ERC721: balance query for the zero address");
        return _balances[owner];
    }
    /**
     * @dev See {IERC721-ownerOf}.
     */
    function ownerOf(uint256 tokenId) public view virtual override returns (address) {
        address owner = _owners[tokenId];
        require(owner != address(0), "ERC721: owner query for nonexistent token");
        return owner;
    }
    /**
     * @dev See {IERC721Metadata-name}.
     */
    function name() public view virtual override returns (string memory) {
        return _name;
    }
    /**
     * @dev See {IERC721Metadata-symbol}.
     */
    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }
    /**
     * @dev See {IERC721Metadata-tokenURI}.
     */
    function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {
        require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token");
        string memory baseURI = _baseURI();
        return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : "";
    }
    /**
     * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each
     * token will be the concatenation of the `baseURI` and the `tokenId`. Empty
     * by default, can be overriden in child contracts.
     */
    function _baseURI() internal view virtual returns (string memory) {
        return "";
    }
    /**
     * @dev See {IERC721-approve}.
     */
    function approve(address to, uint256 tokenId) public virtual override {
        address owner = ERC721.ownerOf(tokenId);
        require(to != owner, "ERC721: approval to current owner");
        require(
            _msgSender() == owner || isApprovedForAll(owner, _msgSender()),
            "ERC721: approve caller is not owner nor approved for all"
        );
        _approve(to, tokenId);
    }
    /**
     * @dev See {IERC721-getApproved}.
     */
    function getApproved(uint256 tokenId) public view virtual override returns (address) {
        require(_exists(tokenId), "ERC721: approved query for nonexistent token");
        return _tokenApprovals[tokenId];
    }
    /**
     * @dev See {IERC721-setApprovalForAll}.
     */
    function setApprovalForAll(address operator, bool approved) public virtual override {
        require(operator != _msgSender(), "ERC721: approve to caller");
        _operatorApprovals[_msgSender()][operator] = approved;
        emit ApprovalForAll(_msgSender(), operator, approved);
    }
    /**
     * @dev See {IERC721-isApprovedForAll}.
     */
    function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) {
        return _operatorApprovals[owner][operator];
    }
    /**
     * @dev See {IERC721-transferFrom}.
     */
    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) public virtual override {
        //solhint-disable-next-line max-line-length
        require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved");
        _transfer(from, to, tokenId);
    }
    /**
     * @dev See {IERC721-safeTransferFrom}.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId
    ) public virtual override {
        safeTransferFrom(from, to, tokenId, "");
    }
    /**
     * @dev See {IERC721-safeTransferFrom}.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) public virtual override {
        require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved");
        _safeTransfer(from, to, tokenId, _data);
    }
    /**
     * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients
     * are aware of the ERC721 protocol to prevent tokens from being forever locked.
     *
     * `_data` is additional data, it has no specified format and it is sent in call to `to`.
     *
     * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g.
     * implement alternative mechanisms to perform token transfer, such as signature-based.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function _safeTransfer(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) internal virtual {
        _transfer(from, to, tokenId);
        require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer");
    }
    /**
     * @dev Returns whether `tokenId` exists.
     *
     * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}.
     *
     * Tokens start existing when they are minted (`_mint`),
     * and stop existing when they are burned (`_burn`).
     */
    function _exists(uint256 tokenId) internal view virtual returns (bool) {
        return _owners[tokenId] != address(0);
    }
    /**
     * @dev Returns whether `spender` is allowed to manage `tokenId`.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) {
        require(_exists(tokenId), "ERC721: operator query for nonexistent token");
        address owner = ERC721.ownerOf(tokenId);
        return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender));
    }
    /**
     * @dev Safely mints `tokenId` and transfers it to `to`.
     *
     * Requirements:
     *
     * - `tokenId` must not exist.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function _safeMint(address to, uint256 tokenId) internal virtual {
        _safeMint(to, tokenId, "");
    }
    /**
     * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is
     * forwarded in {IERC721Receiver-onERC721Received} to contract recipients.
     */
    function _safeMint(
        address to,
        uint256 tokenId,
        bytes memory _data
    ) internal virtual {
        _mint(to, tokenId);
        require(
            _checkOnERC721Received(address(0), to, tokenId, _data),
            "ERC721: transfer to non ERC721Receiver implementer"
        );
    }
    /**
     * @dev Mints `tokenId` and transfers it to `to`.
     *
     * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible
     *
     * Requirements:
     *
     * - `tokenId` must not exist.
     * - `to` cannot be the zero address.
     *
     * Emits a {Transfer} event.
     */
    function _mint(address to, uint256 tokenId) internal virtual {
        require(to != address(0), "ERC721: mint to the zero address");
        require(!_exists(tokenId), "ERC721: token already minted");
        _beforeTokenTransfer(address(0), to, tokenId);
        _balances[to] += 1;
        _owners[tokenId] = to;
        emit Transfer(address(0), to, tokenId);
    }
    /**
     * @dev Destroys `tokenId`.
     * The approval is cleared when the token is burned.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     *
     * Emits a {Transfer} event.
     */
    function _burn(uint256 tokenId) internal virtual {
        address owner = ERC721.ownerOf(tokenId);
        _beforeTokenTransfer(owner, address(0), tokenId);
        // Clear approvals
        _approve(address(0), tokenId);
        _balances[owner] -= 1;
        delete _owners[tokenId];
        emit Transfer(owner, address(0), tokenId);
    }
    /**
     * @dev Transfers `tokenId` from `from` to `to`.
     *  As opposed to {transferFrom}, this imposes no restrictions on msg.sender.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - `tokenId` token must be owned by `from`.
     *
     * Emits a {Transfer} event.
     */
    function _transfer(
        address from,
        address to,
        uint256 tokenId
    ) internal virtual {
        require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer of token that is not own");
        require(to != address(0), "ERC721: transfer to the zero address");
        _beforeTokenTransfer(from, to, tokenId);
        // Clear approvals from the previous owner
        _approve(address(0), tokenId);
        _balances[from] -= 1;
        _balances[to] += 1;
        _owners[tokenId] = to;
        emit Transfer(from, to, tokenId);
    }
    /**
     * @dev Approve `to` to operate on `tokenId`
     *
     * Emits a {Approval} event.
     */
    function _approve(address to, uint256 tokenId) internal virtual {
        _tokenApprovals[tokenId] = to;
        emit Approval(ERC721.ownerOf(tokenId), to, tokenId);
    }
    /**
     * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address.
     * The call is not executed if the target address is not a contract.
     *
     * @param from address representing the previous owner of the given token ID
     * @param to target address that will receive the tokens
     * @param tokenId uint256 ID of the token to be transferred
     * @param _data bytes optional data to send along with the call
     * @return bool whether the call correctly returned the expected magic value
     */
    function _checkOnERC721Received(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) private returns (bool) {
        if (to.isContract()) {
            try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) {
                return retval == IERC721Receiver(to).onERC721Received.selector;
            } catch (bytes memory reason) {
                if (reason.length == 0) {
                    revert("ERC721: transfer to non ERC721Receiver implementer");
                } else {
                    assembly {
                        revert(add(32, reason), mload(reason))
                    }
                }
            }
        } else {
            return true;
        }
    }
    /**
     * @dev Hook that is called before any token transfer. This includes minting
     * and burning.
     *
     * Calling conditions:
     *
     * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be
     * transferred to `to`.
     * - When `from` is zero, `tokenId` will be minted for `to`.
     * - When `to` is zero, ``from``'s `tokenId` will be burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 tokenId
    ) internal virtual {}
}
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
import "../../utils/introspection/IERC165.sol";
/**
 * @dev Required interface of an ERC721 compliant contract.
 */
interface IERC721 is IERC165 {
    /**
     * @dev Emitted when `tokenId` token is transferred from `from` to `to`.
     */
    event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);
    /**
     * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token.
     */
    event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);
    /**
     * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.
     */
    event ApprovalForAll(address indexed owner, address indexed operator, bool approved);
    /**
     * @dev Returns the number of tokens in ``owner``'s account.
     */
    function balanceOf(address owner) external view returns (uint256 balance);
    /**
     * @dev Returns the owner of the `tokenId` token.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function ownerOf(uint256 tokenId) external view returns (address owner);
    /**
     * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients
     * are aware of the ERC721 protocol to prevent tokens from being forever locked.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external;
    /**
     * @dev Transfers `tokenId` token from `from` to `to`.
     *
     * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must be owned by `from`.
     * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external;
    /**
     * @dev Gives permission to `to` to transfer `tokenId` token to another account.
     * The approval is cleared when the token is transferred.
     *
     * Only a single account can be approved at a time, so approving the zero address clears previous approvals.
     *
     * Requirements:
     *
     * - The caller must own the token or be an approved operator.
     * - `tokenId` must exist.
     *
     * Emits an {Approval} event.
     */
    function approve(address to, uint256 tokenId) external;
    /**
     * @dev Returns the account approved for `tokenId` token.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function getApproved(uint256 tokenId) external view returns (address operator);
    /**
     * @dev Approve or remove `operator` as an operator for the caller.
     * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller.
     *
     * Requirements:
     *
     * - The `operator` cannot be the caller.
     *
     * Emits an {ApprovalForAll} event.
     */
    function setApprovalForAll(address operator, bool _approved) external;
    /**
     * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`.
     *
     * See {setApprovalForAll}
     */
    function isApprovedForAll(address owner, address operator) external view returns (bool);
    /**
     * @dev Safely transfers `tokenId` token from `from` to `to`.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes calldata data
    ) external;
}
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
/**
 * @title ERC721 token receiver interface
 * @dev Interface for any contract that wants to support safeTransfers
 * from ERC721 asset contracts.
 */
interface IERC721Receiver {
    /**
     * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom}
     * by `operator` from `from`, this function is called.
     *
     * It must return its Solidity selector to confirm the token transfer.
     * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted.
     *
     * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`.
     */
    function onERC721Received(
        address operator,
        address from,
        uint256 tokenId,
        bytes calldata data
    ) external returns (bytes4);
}
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
import "../ERC721.sol";
/**
 * @dev ERC721 token with storage based token URI management.
 */
abstract contract ERC721URIStorage is ERC721 {
    using Strings for uint256;
    // Optional mapping for token URIs
    mapping(uint256 => string) private _tokenURIs;
    /**
     * @dev See {IERC721Metadata-tokenURI}.
     */
    function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {
        require(_exists(tokenId), "ERC721URIStorage: URI query for nonexistent token");
        string memory _tokenURI = _tokenURIs[tokenId];
        string memory base = _baseURI();
        // If there is no base URI, return the token URI.
        if (bytes(base).length == 0) {
            return _tokenURI;
        }
        // If both are set, concatenate the baseURI and tokenURI (via abi.encodePacked).
        if (bytes(_tokenURI).length > 0) {
            return string(abi.encodePacked(base, _tokenURI));
        }
        return super.tokenURI(tokenId);
    }
    /**
     * @dev Sets `_tokenURI` as the tokenURI of `tokenId`.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function _setTokenURI(uint256 tokenId, string memory _tokenURI) internal virtual {
        require(_exists(tokenId), "ERC721URIStorage: URI set of nonexistent token");
        _tokenURIs[tokenId] = _tokenURI;
    }
    /**
     * @dev Destroys `tokenId`.
     * The approval is cleared when the token is burned.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     *
     * Emits a {Transfer} event.
     */
    function _burn(uint256 tokenId) internal virtual override {
        super._burn(tokenId);
        if (bytes(_tokenURIs[tokenId]).length != 0) {
            delete _tokenURIs[tokenId];
        }
    }
}
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
import "../IERC721.sol";
/**
 * @title ERC-721 Non-Fungible Token Standard, optional metadata extension
 * @dev See https://eips.ethereum.org/EIPS/eip-721
 */
interface IERC721Metadata is IERC721 {
    /**
     * @dev Returns the token collection name.
     */
    function name() external view returns (string memory);
    /**
     * @dev Returns the token collection symbol.
     */
    function symbol() external view returns (string memory);
    /**
     * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token.
     */
    function tokenURI(uint256 tokenId) external view returns (string memory);
}
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize, which returns 0 for contracts in
        // construction, since the code is only stored at the end of the
        // constructor execution.
        uint256 size;
        assembly {
            size := extcodesize(account)
        }
        return size > 0;
    }
    /**
     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to
     * `recipient`, forwarding all available gas and reverting on errors.
     *
     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
     * of certain opcodes, possibly making contracts go over the 2300 gas limit
     * imposed by `transfer`, making them unable to receive funds via
     * `transfer`. {sendValue} removes this limitation.
     *
     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
     *
     * IMPORTANT: because control is transferred to `recipient`, care must be
     * taken to not create reentrancy vulnerabilities. Consider using
     * {ReentrancyGuard} or the
     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
     */
    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");
        (bool success, ) = recipient.call{value: amount}("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }
    /**
     * @dev Performs a Solidity function call using a low level `call`. A
     * plain `call` is an unsafe replacement for a function call: use this
     * function instead.
     *
     * If `target` reverts with a revert reason, it is bubbled up by this
     * function (like regular Solidity function calls).
     *
     * Returns the raw returned data. To convert to the expected return value,
     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
     *
     * Requirements:
     *
     * - `target` must be a contract.
     * - calling `target` with `data` must not revert.
     *
     * _Available since v3.1._
     */
    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionCall(target, data, "Address: low-level call failed");
    }
    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
     * `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, errorMessage);
    }
    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but also transferring `value` wei to `target`.
     *
     * Requirements:
     *
     * - the calling contract must have an ETH balance of at least `value`.
     * - the called Solidity function must be `payable`.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }
    /**
     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
     * with `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        require(isContract(target), "Address: call to non-contract");
        (bool success, bytes memory returndata) = target.call{value: value}(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }
    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
        return functionStaticCall(target, data, "Address: low-level static call failed");
    }
    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        require(isContract(target), "Address: static call to non-contract");
        (bool success, bytes memory returndata) = target.staticcall(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }
    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionDelegateCall(target, data, "Address: low-level delegate call failed");
    }
    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(isContract(target), "Address: delegate call to non-contract");
        (bool success, bytes memory returndata) = target.delegatecall(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }
    function _verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) private pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
/*
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }
    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
/**
 * @title Counters
 * @author Matt Condon (@shrugs)
 * @dev Provides counters that can only be incremented, decremented or reset. This can be used e.g. to track the number
 * of elements in a mapping, issuing ERC721 ids, or counting request ids.
 *
 * Include with `using Counters for Counters.Counter;`
 */
library Counters {
    struct Counter {
        // This variable should never be directly accessed by users of the library: interactions must be restricted to
        // the library's function. As of Solidity v0.5.2, this cannot be enforced, though there is a proposal to add
        // this feature: see https://github.com/ethereum/solidity/issues/4637
        uint256 _value; // default: 0
    }
    function current(Counter storage counter) internal view returns (uint256) {
        return counter._value;
    }
    function increment(Counter storage counter) internal {
        unchecked {
            counter._value += 1;
        }
    }
    function decrement(Counter storage counter) internal {
        uint256 value = counter._value;
        require(value > 0, "Counter: decrement overflow");
        unchecked {
            counter._value = value - 1;
        }
    }
    function reset(Counter storage counter) internal {
        counter._value = 0;
    }
}
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
/**
 * @dev String operations.
 */
library Strings {
    bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef";
    /**
     * @dev Converts a `uint256` to its ASCII `string` decimal representation.
     */
    function toString(uint256 value) internal pure returns (string memory) {
        // Inspired by OraclizeAPI's implementation - MIT licence
        // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol
        if (value == 0) {
            return "0";
        }
        uint256 temp = value;
        uint256 digits;
        while (temp != 0) {
            digits++;
            temp /= 10;
        }
        bytes memory buffer = new bytes(digits);
        while (value != 0) {
            digits -= 1;
            buffer[digits] = bytes1(uint8(48 + uint256(value % 10)));
            value /= 10;
        }
        return string(buffer);
    }
    /**
     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.
     */
    function toHexString(uint256 value) internal pure returns (string memory) {
        if (value == 0) {
            return "0x00";
        }
        uint256 temp = value;
        uint256 length = 0;
        while (temp != 0) {
            length++;
            temp >>= 8;
        }
        return toHexString(value, length);
    }
    /**
     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.
     */
    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {
        bytes memory buffer = new bytes(2 * length + 2);
        buffer[0] = "0";
        buffer[1] = "x";
        for (uint256 i = 2 * length + 1; i > 1; --i) {
            buffer[i] = _HEX_SYMBOLS[value & 0xf];
            value >>= 4;
        }
        require(value == 0, "Strings: hex length insufficient");
        return string(buffer);
    }
}
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
import "./IERC165.sol";
/**
 * @dev Implementation of the {IERC165} interface.
 *
 * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check
 * for the additional interface id that will be supported. For example:
 *
 * ```solidity
 * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
 *     return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId);
 * }
 * ```
 *
 * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation.
 */
abstract contract ERC165 is IERC165 {
    /**
     * @dev See {IERC165-supportsInterface}.
     */
    function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
        return interfaceId == type(IERC165).interfaceId;
    }
}
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
/**
 * @dev Interface of the ERC165 standard, as defined in the
 * https://eips.ethereum.org/EIPS/eip-165[EIP].
 *
 * Implementers can declare support of contract interfaces, which can then be
 * queried by others ({ERC165Checker}).
 *
 * For an implementation, see {ERC165}.
 */
interface IERC165 {
    /**
     * @dev Returns true if this contract implements the interface defined by
     * `interfaceId`. See the corresponding
     * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]
     * to learn more about how these ids are created.
     *
     * This function call must use less than 30 000 gas.
     */
    function supportsInterface(bytes4 interfaceId) external view returns (bool);
}
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
// CAUTION
// This version of SafeMath should only be used with Solidity 0.8 or later,
// because it relies on the compiler's built in overflow checks.
/**
 * @dev Wrappers over Solidity's arithmetic operations.
 *
 * NOTE: `SafeMath` is no longer needed starting with Solidity 0.8. The compiler
 * now has built in overflow checking.
 */
library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }
    /**
     * @dev Returns the substraction of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b > a) return (false, 0);
            return (true, a - b);
        }
    }
    /**
     * @dev Returns the multiplication of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
            // benefit is lost if 'b' is also tested.
            // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
            if (a == 0) return (true, 0);
            uint256 c = a * b;
            if (c / a != b) return (false, 0);
            return (true, c);
        }
    }
    /**
     * @dev Returns the division of two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a / b);
        }
    }
    /**
     * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a % b);
        }
    }
    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     *
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        return a + b;
    }
    /**
     * @dev Returns the subtraction of two unsigned integers, reverting on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return a - b;
    }
    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        return a * b;
    }
    /**
     * @dev Returns the integer division of two unsigned integers, reverting on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator.
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return a / b;
    }
    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return a % b;
    }
    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {trySub}.
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b <= a, errorMessage);
            return a - b;
        }
    }
    /**
     * @dev Returns the integer division of two unsigned integers, reverting with custom message on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a / b;
        }
    }
    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting with custom message when dividing by zero.
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {tryMod}.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a % b;
        }
    }
}
// SPDX-License-Identifier: MIT
pragma solidity 0.8.4;
import "@openzeppelin/contracts/token/ERC721/ERC721.sol";
import "@openzeppelin/contracts/token/ERC721/extensions/ERC721URIStorage.sol";
import "@openzeppelin/contracts/security/Pausable.sol";
import "@openzeppelin/contracts/access/Ownable.sol";
import "@openzeppelin/contracts/utils/Counters.sol";
import "@openzeppelin/contracts/utils/math/SafeMath.sol";
contract WojakKingdom is ERC721, ERC721URIStorage, Pausable, Ownable {
    using Counters for Counters.Counter;
    using SafeMath for uint256;
    string private _baseURIPrefix;
    uint private constant maxTokensPerTransaction = 25;
    uint256 private tokenPrice = 5 * 10 ** 16; //Cost set to 0.05 ETH
    uint256 private constant nftsNumber = 4269; 
    uint256 private constant nftsPublicNumber = 4250;
    address private constant withdrawAddressOne = 0x528483BD8D2963C30d303C53B2a1D0C2e512EC07;
    address private constant withdrawAddressTwo = 0x06a032A6C7675Ffd40411c5399A206C0b71aB29a;
    address private constant withdrawAddressThree = 0xB56AfCee1Ac559bbB2BF0D1d4ff02205654C60dc;
    Counters.Counter private _tokenIdCounter;
    constructor() ERC721("WojakKingdom", "WJKK") {
        _tokenIdCounter.increment();
    }
    function currentSupply() public view returns (uint256)
    {
        return _tokenIdCounter.current();
    }
    function setBaseURI(string memory baseURIPrefix) public onlyOwner {
        _baseURIPrefix = baseURIPrefix;
    }
    function _baseURI() internal view override returns (string memory) {
        return _baseURIPrefix;
    }
    function safeMint(address to) public onlyOwner {
        _safeMint(to, _tokenIdCounter.current());
        _tokenIdCounter.increment();
    }
    function pause() public onlyOwner {
        _pause();
    }
    function unpause() public onlyOwner {
        _unpause();
    }
    function _beforeTokenTransfer(address from, address to, uint256 tokenId) internal whenNotPaused override
    {
        super._beforeTokenTransfer(from, to, tokenId);
    }
    function _burn(uint256 tokenId) internal override(ERC721, ERC721URIStorage) {
        super._burn(tokenId);
    }
    function tokenURI(uint256 tokenId) public view override(ERC721, ERC721URIStorage) returns (string memory)
    {
        return super.tokenURI(tokenId);
    }
    function mintGiveawayWojaks(address to, uint256 tokenId) public onlyOwner {
        require(tokenId > nftsPublicNumber, "Sale has not ended yet!");
        _safeMint(to, tokenId);
    }
    function buyWojaks(uint tokensNumber) whenNotPaused public payable {
        require(tokensNumber > 0, "Number of mints must be atleast 1");
        require(tokensNumber <= maxTokensPerTransaction, "Exceeded max tokens per mint");
        require(_tokenIdCounter.current().add(tokensNumber) <= nftsPublicNumber, "No more tokens left to be minted");
        require(tokenPrice.mul(tokensNumber) <= msg.value, "Not enough sent ETH, price is 0.05 per token");
        for(uint i = 0; i < tokensNumber; i++) {
            _safeMint(msg.sender, _tokenIdCounter.current());
            _tokenIdCounter.increment();
        }
    }
    function withdraw() public onlyOwner {
        uint balance = address(this).balance;
        uint cut = balance.div(3);
        payable(withdrawAddressOne).transfer(cut);
        payable(withdrawAddressTwo).transfer(cut);
        payable(withdrawAddressThree).transfer(cut);
    }
}