[{"data":1,"prerenderedAt":2253},["ShallowReactive",2],{"posts-zh-Hans":3,"cfn":1308},[4,134,1234],{"id":5,"title":6,"body":7,"date":125,"desc":126,"description":117,"edit":125,"extension":127,"meta":128,"navigation":129,"path":130,"seo":131,"stem":132,"__hash__":133},"blog\u002Fblog\u002Fzh-hans\u002Fabout-name.md","关于未晞酱的名字",{"type":8,"value":9,"toc":116},"minimark",[10,14,18,21,25,28,36,39,53,65,77,81,84,87,93,96,107,110,113],[11,12,13],"h3",{"id":13},"我的名字",[15,16,17],"p",{},"我叫「Kuriyona」，这是我给自己取的网名。",[15,19,20],{},"我也叫「未晞」，这是我确定性别认同之后给自己取的真名。",[11,22,24],{"id":23},"关于kuriyona","关于「Kuriyona」",[15,26,27],{},"它借助日语的音韵与汉字的意蕴而生。",[15,29,30,31,35],{},"「Kuriyona」读作 ku-ri-yo-na ",[32,33,34],"code",{},"クリヨナ","。",[15,37,38],{},"而「Kuriyona」对应的汉字可以写做「栗夜奈」。",[15,40,41,45,46,45,49,52],{},[42,43,44],"strong",{},"「栗」"," ",[32,47,48],{},"kuri",[32,50,51],{},"クリ"," 是一个象征我过去网名和一直以来的外号的词，也和我现实中的姓氏同音。",[15,54,55,45,58,45,61,64],{},[42,56,57],{},"「夜」",[32,59,60],{},"yu",[32,62,63],{},"ヨ"," 是我想要为此加入的意蕴。",[15,66,67,45,70,45,73,76],{},[42,68,69],{},"「奈」",[32,71,72],{},"na",[32,74,75],{},"ナ"," 则像一个轻柔的语气词，带着一点点说不清的余韵，由原来男性化的 ta 变成了女性化的 na。",[11,78,80],{"id":79},"关于未晞","关于「未晞」",[15,82,83],{},"而「未晞」，则是我为自己取的真名。",[15,85,86],{},"它出自《诗经·秦风》里的那一句：",[88,89,90],"blockquote",{},[15,91,92],{},"「蒹葭萋萋，白露未晞」。",[15,94,95],{},"清晨的露水还没有被太阳晒干，\n芦苇在风中轻轻摇曳，\n一切刚刚醒来，\n一切还未完成。",[15,97,98,99,102,103,106],{},"「未晞」意味着——\n",[42,100,101],{},"破晓","之前最后的湿润，\n也是",[42,104,105],{},"新生","之初最安静的光。",[15,108,109],{},"在确定自己的性别认同之后，\n我便选了这两个字，\n作为对自己真实存在的确认。",[11,111,112],{"id":112},"小记",[15,114,115],{},"「Kuriyona」是我曾经藏身的小夜，\n「未晞」是我终于迎来的破晓。",{"title":117,"searchDepth":118,"depth":118,"links":119},"",2,[120,122,123,124],{"id":13,"depth":121,"text":13},3,{"id":23,"depth":121,"text":24},{"id":79,"depth":121,"text":80},{"id":112,"depth":121,"text":112},"2026-05-18","未晞酱名字的由来","md",{},true,"\u002Fblog\u002Fzh-hans\u002Fabout-name",{"title":6,"description":117},"blog\u002Fzh-hans\u002Fabout-name","pcM-wGxyTzCbCX7ZwU3XUi3_K4hRxQxqrqrH-sncBoo",{"id":135,"title":136,"body":137,"date":1227,"desc":1228,"description":141,"edit":1227,"extension":127,"meta":1229,"navigation":129,"path":1230,"seo":1231,"stem":1232,"__hash__":1233},"blog\u002Fblog\u002Fzh-hans\u002Fcf-network.md","如何在网站显示当前使用的 Cloudflare 网络",{"type":8,"value":138,"toc":1223},[139,142,148,153,156,163,267,277,280,283,290,295,298,309,494,497,500,510,513,1219],[15,140,141],{},"今天凌晨给我的个人网站加了一个小功能，就是在网站显示当前使用的 Cloudflare 网络。",[15,143,144],{},[145,146],"img",{"alt":117,"src":147},"https:\u002F\u002Fr2.kuriyona.com\u002Fstatic\u002F2026\u002F05\u002F24\u002Fcf-network-preview.png",[88,149,150],{},[15,151,152],{},"翻到本网站的最底下，您应该就能看见实际显示的样式。",[11,154,155],{"id":155},"实现方式",[15,157,158,159,162],{},"由 Cloudflare 代理的网站，通过访问 ",[32,160,161],{},"{domain}\u002Fcdn-cgi\u002Ftrace"," 可以获取当前使用的 Cloudflare 网络信息。样例如下：",[164,165,169],"pre",{"className":166,"code":167,"language":168,"meta":117,"style":117},"language-plaintext shiki shiki-themes github-dark","fl=582f239\nh=kuriyona.com\nip=64.90.0.218\nts=1779555940.000\nvisit_scheme=https\nuag=Mozilla\u002F5.0 (Windows NT 10.0; Win64; x64) AppleWebKit\u002F537.36 (KHTML, like Gecko) Chrome\u002F149.0.0.0 Safari\u002F537.36 Edg\u002F149.0.0.0\ncolo=HKG\nsliver=none\nhttp=http\u002F3\nloc=HK\ntls=TLSv1.3\nsni=plaintext\nwarp=off\ngateway=off\nrbi=off\nkex=X25519MLKEM768\n","plaintext",[32,170,171,179,184,189,195,201,207,213,219,225,231,237,243,249,255,261],{"__ignoreMap":117},[172,173,176],"span",{"class":174,"line":175},"line",1,[172,177,178],{},"fl=582f239\n",[172,180,181],{"class":174,"line":118},[172,182,183],{},"h=kuriyona.com\n",[172,185,186],{"class":174,"line":121},[172,187,188],{},"ip=64.90.0.218\n",[172,190,192],{"class":174,"line":191},4,[172,193,194],{},"ts=1779555940.000\n",[172,196,198],{"class":174,"line":197},5,[172,199,200],{},"visit_scheme=https\n",[172,202,204],{"class":174,"line":203},6,[172,205,206],{},"uag=Mozilla\u002F5.0 (Windows NT 10.0; Win64; x64) AppleWebKit\u002F537.36 (KHTML, like Gecko) Chrome\u002F149.0.0.0 Safari\u002F537.36 Edg\u002F149.0.0.0\n",[172,208,210],{"class":174,"line":209},7,[172,211,212],{},"colo=HKG\n",[172,214,216],{"class":174,"line":215},8,[172,217,218],{},"sliver=none\n",[172,220,222],{"class":174,"line":221},9,[172,223,224],{},"http=http\u002F3\n",[172,226,228],{"class":174,"line":227},10,[172,229,230],{},"loc=HK\n",[172,232,234],{"class":174,"line":233},11,[172,235,236],{},"tls=TLSv1.3\n",[172,238,240],{"class":174,"line":239},12,[172,241,242],{},"sni=plaintext\n",[172,244,246],{"class":174,"line":245},13,[172,247,248],{},"warp=off\n",[172,250,252],{"class":174,"line":251},14,[172,253,254],{},"gateway=off\n",[172,256,258],{"class":174,"line":257},15,[172,259,260],{},"rbi=off\n",[172,262,264],{"class":174,"line":263},16,[172,265,266],{},"kex=X25519MLKEM768\n",[15,268,269,270,273,274,35],{},"通过解析其中的 ",[32,271,272],{},"colo"," 参数，我们可以获取当前使用的 Cloudflare 网络 ID，比如这里是 ",[32,275,276],{},"HKG",[15,278,279],{},"那么网络 ID 有了，我们就可以根据网络 ID 来显示当前使用的 Cloudflare 网络了。",[15,281,282],{},"Cloudflare Status 提供了一个文件，列出了当前所有的 Cloudflare 网络状态信息。",[88,284,285],{},[15,286,287],{},[32,288,289],{},"https:\u002F\u002Fwww.cloudflarestatus.com\u002Fapi\u002Fv2\u002Fsummary.json",[15,291,292],{},[145,293],{"alt":117,"src":294},"https:\u002F\u002Fr2.kuriyona.com\u002Fstatic\u002F2026\u002F05\u002F24\u002Fcf-network-status-api.png",[15,296,297],{},"文件的内容很杂，我们需要通过一个简单的脚本来获得我们需要的格式化信息。",[15,299,300,301,304,305,308],{},"首先通过一个简单的正则表达式(",[32,302,303],{},"^[A-Za-z\\s,]+-\\s*\\(([A-Z]{3})\\)$",")来筛选复合网络节点的 ",[32,306,307],{},"name"," 字段，再对数据结构进行简化处理。（这里使用 ky 库来获取数据）",[164,310,314],{"className":311,"code":312,"language":313,"meta":117,"style":117},"language-ts shiki shiki-themes github-dark","const res = await ky.get('https:\u002F\u002Fwww.cloudflarestatus.com\u002Fapi\u002Fv2\u002Fsummary.json').json();\nconst result = res.components\n  .filter((c) => REGEX.test(c.name))\n  .map((n) => ({\n    name: n.name,\n    code: n.name.match(\u002F^[A-Za-z\\s,]+-\\s*\\(([A-Z]{3})\\)$\u002F)?.[1],\n  }));\n","ts",[32,315,316,356,368,401,420,425,489],{"__ignoreMap":117},[172,317,318,322,326,329,332,336,340,343,347,350,353],{"class":174,"line":175},[172,319,321],{"class":320},"snl16","const",[172,323,325],{"class":324},"sDLfK"," res",[172,327,328],{"class":320}," =",[172,330,331],{"class":320}," await",[172,333,335],{"class":334},"s95oV"," ky.",[172,337,339],{"class":338},"svObZ","get",[172,341,342],{"class":334},"(",[172,344,346],{"class":345},"sU2Wk","'https:\u002F\u002Fwww.cloudflarestatus.com\u002Fapi\u002Fv2\u002Fsummary.json'",[172,348,349],{"class":334},").",[172,351,352],{"class":338},"json",[172,354,355],{"class":334},"();\n",[172,357,358,360,363,365],{"class":174,"line":118},[172,359,321],{"class":320},[172,361,362],{"class":324}," result",[172,364,328],{"class":320},[172,366,367],{"class":334}," res.components\n",[172,369,370,373,376,379,383,386,389,392,395,398],{"class":174,"line":121},[172,371,372],{"class":334},"  .",[172,374,375],{"class":338},"filter",[172,377,378],{"class":334},"((",[172,380,382],{"class":381},"s9osk","c",[172,384,385],{"class":334},") ",[172,387,388],{"class":320},"=>",[172,390,391],{"class":324}," REGEX",[172,393,394],{"class":334},".",[172,396,397],{"class":338},"test",[172,399,400],{"class":334},"(c.name))\n",[172,402,403,405,408,410,413,415,417],{"class":174,"line":191},[172,404,372],{"class":334},[172,406,407],{"class":338},"map",[172,409,378],{"class":334},[172,411,412],{"class":381},"n",[172,414,385],{"class":334},[172,416,388],{"class":320},[172,418,419],{"class":334}," ({\n",[172,421,422],{"class":174,"line":197},[172,423,424],{"class":334},"    name: n.name,\n",[172,426,427,430,433,435,438,441,444,447,451,454,457,461,463,466,469,472,475,478,480,483,486],{"class":174,"line":203},[172,428,429],{"class":334},"    code: n.name.",[172,431,432],{"class":338},"match",[172,434,342],{"class":334},[172,436,437],{"class":345},"\u002F",[172,439,440],{"class":320},"^",[172,442,443],{"class":324},"[A-Za-z\\s,]",[172,445,446],{"class":320},"+",[172,448,450],{"class":449},"sns5M","-",[172,452,453],{"class":324},"\\s",[172,455,456],{"class":320},"*",[172,458,460],{"class":459},"sRjNt","\\(",[172,462,342],{"class":449},[172,464,465],{"class":324},"[A-Z]",[172,467,468],{"class":320},"{3}",[172,470,471],{"class":449},")",[172,473,474],{"class":459},"\\)",[172,476,477],{"class":320},"$",[172,479,437],{"class":345},[172,481,482],{"class":334},")?.[",[172,484,485],{"class":324},"1",[172,487,488],{"class":334},"],\n",[172,490,491],{"class":174,"line":209},[172,492,493],{"class":334},"  }));\n",[15,495,496],{},"结合前文中获得的网络 ID，我们就可以获得实际的网络节点名称了。",[11,498,499],{"id":499},"代码实现",[15,501,502,503],{},"本站实际使用的代码可以查看 ",[504,505,509],"a",{"href":506,"rel":507},"https:\u002F\u002Fgithub.com\u002FKuriyona\u002FKuriyona.com\u002Fblob\u002Fmain\u002Fapp\u002Fcomposables\u002FuseCloudflareStatus.ts",[508],"nofollow","useCloudflareStatus.ts",[15,511,512],{},"以下是通用的 TypeScript 完整代码实现：",[164,514,516],{"className":311,"code":515,"language":313,"meta":117,"style":117},"import ky from 'ky';\n\nconst REGEX = \u002F^[A-Za-z\\s,]+-\\s*\\(([A-Z]{3})\\)$\u002F;\n\ninterface NodeInfo {\n  name: string;\n  code: string | undefined;\n}\n\ninterface TraceData {\n  colo?: string;\n  loc?: string;\n  [key: string]: string | undefined;\n}\n\ninterface CloudflareStatusResult {\n  nodesData: NodeInfo[] | undefined;\n  traceData: TraceData | undefined;\n  currentNodeName: string | undefined;\n  location: string | undefined;\n}\n\nexport async function getCloudflareStatus(): Promise\u003CCloudflareStatusResult> {\n  \u002F\u002F 获取节点数据\n  const nodesResponse = await ky.get('https:\u002F\u002Fwww.cloudflarestatus.com\u002Fapi\u002Fv2\u002Fsummary.json').json();\n  const nodesData = nodesResponse.components\n    .filter((c) => REGEX.test(c.name))\n    .map((n) => ({\n      name: n.name,\n      code: n.name.match(REGEX)?.[1],\n    }));\n\n  \u002F\u002F 获取 trace 数据\n  const traceText = await ky.get('https:\u002F\u002Fkuriyona.com\u002Fcdn-cgi\u002Ftrace').text();\n  const traceData = Object.fromEntries(\n    traceText\n      .split('\\n')\n      .filter((line) => line.includes('='))\n      .map((line) => line.split('=')),\n  ) as TraceData;\n\n  console.log(traceData);\n\n  \u002F\u002F 计算当前节点名称\n  const currentNodeName = nodesData.find((n) => n.code === traceData?.colo)?.name;\n\n  const location = traceData?.loc;\n\n  return {\n    nodesData,\n    traceData,\n    currentNodeName,\n    location,\n  };\n}\n",[32,517,518,535,540,581,585,596,609,626,631,635,644,656,667,692,696,700,709,729,745,761,777,782,787,819,826,853,866,890,907,913,932,938,943,949,977,996,1002,1024,1053,1079,1092,1097,1109,1114,1120,1153,1158,1171,1176,1184,1190,1196,1202,1208,1214],{"__ignoreMap":117},[172,519,520,523,526,529,532],{"class":174,"line":175},[172,521,522],{"class":320},"import",[172,524,525],{"class":334}," ky ",[172,527,528],{"class":320},"from",[172,530,531],{"class":345}," 'ky'",[172,533,534],{"class":334},";\n",[172,536,537],{"class":174,"line":118},[172,538,539],{"emptyLinePlaceholder":129},"\n",[172,541,542,544,546,548,551,553,555,557,559,561,563,565,567,569,571,573,575,577,579],{"class":174,"line":121},[172,543,321],{"class":320},[172,545,391],{"class":324},[172,547,328],{"class":320},[172,549,550],{"class":345}," \u002F",[172,552,440],{"class":320},[172,554,443],{"class":324},[172,556,446],{"class":320},[172,558,450],{"class":449},[172,560,453],{"class":324},[172,562,456],{"class":320},[172,564,460],{"class":459},[172,566,342],{"class":449},[172,568,465],{"class":324},[172,570,468],{"class":320},[172,572,471],{"class":449},[172,574,474],{"class":459},[172,576,477],{"class":320},[172,578,437],{"class":345},[172,580,534],{"class":334},[172,582,583],{"class":174,"line":191},[172,584,539],{"emptyLinePlaceholder":129},[172,586,587,590,593],{"class":174,"line":197},[172,588,589],{"class":320},"interface",[172,591,592],{"class":338}," NodeInfo",[172,594,595],{"class":334}," {\n",[172,597,598,601,604,607],{"class":174,"line":203},[172,599,600],{"class":381},"  name",[172,602,603],{"class":320},":",[172,605,606],{"class":324}," string",[172,608,534],{"class":334},[172,610,611,614,616,618,621,624],{"class":174,"line":209},[172,612,613],{"class":381},"  code",[172,615,603],{"class":320},[172,617,606],{"class":324},[172,619,620],{"class":320}," |",[172,622,623],{"class":324}," undefined",[172,625,534],{"class":334},[172,627,628],{"class":174,"line":215},[172,629,630],{"class":334},"}\n",[172,632,633],{"class":174,"line":221},[172,634,539],{"emptyLinePlaceholder":129},[172,636,637,639,642],{"class":174,"line":227},[172,638,589],{"class":320},[172,640,641],{"class":338}," TraceData",[172,643,595],{"class":334},[172,645,646,649,652,654],{"class":174,"line":233},[172,647,648],{"class":381},"  colo",[172,650,651],{"class":320},"?:",[172,653,606],{"class":324},[172,655,534],{"class":334},[172,657,658,661,663,665],{"class":174,"line":239},[172,659,660],{"class":381},"  loc",[172,662,651],{"class":320},[172,664,606],{"class":324},[172,666,534],{"class":334},[172,668,669,672,675,677,679,682,684,686,688,690],{"class":174,"line":245},[172,670,671],{"class":334},"  [",[172,673,674],{"class":381},"key",[172,676,603],{"class":320},[172,678,606],{"class":324},[172,680,681],{"class":334},"]",[172,683,603],{"class":320},[172,685,606],{"class":324},[172,687,620],{"class":320},[172,689,623],{"class":324},[172,691,534],{"class":334},[172,693,694],{"class":174,"line":251},[172,695,630],{"class":334},[172,697,698],{"class":174,"line":257},[172,699,539],{"emptyLinePlaceholder":129},[172,701,702,704,707],{"class":174,"line":263},[172,703,589],{"class":320},[172,705,706],{"class":338}," CloudflareStatusResult",[172,708,595],{"class":334},[172,710,712,715,717,719,722,725,727],{"class":174,"line":711},17,[172,713,714],{"class":381},"  nodesData",[172,716,603],{"class":320},[172,718,592],{"class":338},[172,720,721],{"class":334},"[] ",[172,723,724],{"class":320},"|",[172,726,623],{"class":324},[172,728,534],{"class":334},[172,730,732,735,737,739,741,743],{"class":174,"line":731},18,[172,733,734],{"class":381},"  traceData",[172,736,603],{"class":320},[172,738,641],{"class":338},[172,740,620],{"class":320},[172,742,623],{"class":324},[172,744,534],{"class":334},[172,746,748,751,753,755,757,759],{"class":174,"line":747},19,[172,749,750],{"class":381},"  currentNodeName",[172,752,603],{"class":320},[172,754,606],{"class":324},[172,756,620],{"class":320},[172,758,623],{"class":324},[172,760,534],{"class":334},[172,762,764,767,769,771,773,775],{"class":174,"line":763},20,[172,765,766],{"class":381},"  location",[172,768,603],{"class":320},[172,770,606],{"class":324},[172,772,620],{"class":320},[172,774,623],{"class":324},[172,776,534],{"class":334},[172,778,780],{"class":174,"line":779},21,[172,781,630],{"class":334},[172,783,785],{"class":174,"line":784},22,[172,786,539],{"emptyLinePlaceholder":129},[172,788,790,793,796,799,802,805,807,810,813,816],{"class":174,"line":789},23,[172,791,792],{"class":320},"export",[172,794,795],{"class":320}," async",[172,797,798],{"class":320}," function",[172,800,801],{"class":338}," getCloudflareStatus",[172,803,804],{"class":334},"()",[172,806,603],{"class":320},[172,808,809],{"class":338}," Promise",[172,811,812],{"class":334},"\u003C",[172,814,815],{"class":338},"CloudflareStatusResult",[172,817,818],{"class":334},"> {\n",[172,820,822],{"class":174,"line":821},24,[172,823,825],{"class":824},"sAwPA","  \u002F\u002F 获取节点数据\n",[172,827,829,832,835,837,839,841,843,845,847,849,851],{"class":174,"line":828},25,[172,830,831],{"class":320},"  const",[172,833,834],{"class":324}," nodesResponse",[172,836,328],{"class":320},[172,838,331],{"class":320},[172,840,335],{"class":334},[172,842,339],{"class":338},[172,844,342],{"class":334},[172,846,346],{"class":345},[172,848,349],{"class":334},[172,850,352],{"class":338},[172,852,355],{"class":334},[172,854,856,858,861,863],{"class":174,"line":855},26,[172,857,831],{"class":320},[172,859,860],{"class":324}," nodesData",[172,862,328],{"class":320},[172,864,865],{"class":334}," nodesResponse.components\n",[172,867,869,872,874,876,878,880,882,884,886,888],{"class":174,"line":868},27,[172,870,871],{"class":334},"    .",[172,873,375],{"class":338},[172,875,378],{"class":334},[172,877,382],{"class":381},[172,879,385],{"class":334},[172,881,388],{"class":320},[172,883,391],{"class":324},[172,885,394],{"class":334},[172,887,397],{"class":338},[172,889,400],{"class":334},[172,891,893,895,897,899,901,903,905],{"class":174,"line":892},28,[172,894,871],{"class":334},[172,896,407],{"class":338},[172,898,378],{"class":334},[172,900,412],{"class":381},[172,902,385],{"class":334},[172,904,388],{"class":320},[172,906,419],{"class":334},[172,908,910],{"class":174,"line":909},29,[172,911,912],{"class":334},"      name: n.name,\n",[172,914,916,919,921,923,926,928,930],{"class":174,"line":915},30,[172,917,918],{"class":334},"      code: n.name.",[172,920,432],{"class":338},[172,922,342],{"class":334},[172,924,925],{"class":324},"REGEX",[172,927,482],{"class":334},[172,929,485],{"class":324},[172,931,488],{"class":334},[172,933,935],{"class":174,"line":934},31,[172,936,937],{"class":334},"    }));\n",[172,939,941],{"class":174,"line":940},32,[172,942,539],{"emptyLinePlaceholder":129},[172,944,946],{"class":174,"line":945},33,[172,947,948],{"class":824},"  \u002F\u002F 获取 trace 数据\n",[172,950,952,954,957,959,961,963,965,967,970,972,975],{"class":174,"line":951},34,[172,953,831],{"class":320},[172,955,956],{"class":324}," traceText",[172,958,328],{"class":320},[172,960,331],{"class":320},[172,962,335],{"class":334},[172,964,339],{"class":338},[172,966,342],{"class":334},[172,968,969],{"class":345},"'https:\u002F\u002Fkuriyona.com\u002Fcdn-cgi\u002Ftrace'",[172,971,349],{"class":334},[172,973,974],{"class":338},"text",[172,976,355],{"class":334},[172,978,980,982,985,987,990,993],{"class":174,"line":979},35,[172,981,831],{"class":320},[172,983,984],{"class":324}," traceData",[172,986,328],{"class":320},[172,988,989],{"class":334}," Object.",[172,991,992],{"class":338},"fromEntries",[172,994,995],{"class":334},"(\n",[172,997,999],{"class":174,"line":998},36,[172,1000,1001],{"class":334},"    traceText\n",[172,1003,1005,1008,1011,1013,1016,1019,1021],{"class":174,"line":1004},37,[172,1006,1007],{"class":334},"      .",[172,1009,1010],{"class":338},"split",[172,1012,342],{"class":334},[172,1014,1015],{"class":345},"'",[172,1017,1018],{"class":324},"\\n",[172,1020,1015],{"class":345},[172,1022,1023],{"class":334},")\n",[172,1025,1027,1029,1031,1033,1035,1037,1039,1042,1045,1047,1050],{"class":174,"line":1026},38,[172,1028,1007],{"class":334},[172,1030,375],{"class":338},[172,1032,378],{"class":334},[172,1034,174],{"class":381},[172,1036,385],{"class":334},[172,1038,388],{"class":320},[172,1040,1041],{"class":334}," line.",[172,1043,1044],{"class":338},"includes",[172,1046,342],{"class":334},[172,1048,1049],{"class":345},"'='",[172,1051,1052],{"class":334},"))\n",[172,1054,1056,1058,1060,1062,1064,1066,1068,1070,1072,1074,1076],{"class":174,"line":1055},39,[172,1057,1007],{"class":334},[172,1059,407],{"class":338},[172,1061,378],{"class":334},[172,1063,174],{"class":381},[172,1065,385],{"class":334},[172,1067,388],{"class":320},[172,1069,1041],{"class":334},[172,1071,1010],{"class":338},[172,1073,342],{"class":334},[172,1075,1049],{"class":345},[172,1077,1078],{"class":334},")),\n",[172,1080,1082,1085,1088,1090],{"class":174,"line":1081},40,[172,1083,1084],{"class":334},"  ) ",[172,1086,1087],{"class":320},"as",[172,1089,641],{"class":338},[172,1091,534],{"class":334},[172,1093,1095],{"class":174,"line":1094},41,[172,1096,539],{"emptyLinePlaceholder":129},[172,1098,1100,1103,1106],{"class":174,"line":1099},42,[172,1101,1102],{"class":334},"  console.",[172,1104,1105],{"class":338},"log",[172,1107,1108],{"class":334},"(traceData);\n",[172,1110,1112],{"class":174,"line":1111},43,[172,1113,539],{"emptyLinePlaceholder":129},[172,1115,1117],{"class":174,"line":1116},44,[172,1118,1119],{"class":824},"  \u002F\u002F 计算当前节点名称\n",[172,1121,1123,1125,1128,1130,1133,1136,1138,1140,1142,1144,1147,1150],{"class":174,"line":1122},45,[172,1124,831],{"class":320},[172,1126,1127],{"class":324}," currentNodeName",[172,1129,328],{"class":320},[172,1131,1132],{"class":334}," nodesData.",[172,1134,1135],{"class":338},"find",[172,1137,378],{"class":334},[172,1139,412],{"class":381},[172,1141,385],{"class":334},[172,1143,388],{"class":320},[172,1145,1146],{"class":334}," n.code ",[172,1148,1149],{"class":320},"===",[172,1151,1152],{"class":334}," traceData?.colo)?.name;\n",[172,1154,1156],{"class":174,"line":1155},46,[172,1157,539],{"emptyLinePlaceholder":129},[172,1159,1161,1163,1166,1168],{"class":174,"line":1160},47,[172,1162,831],{"class":320},[172,1164,1165],{"class":324}," location",[172,1167,328],{"class":320},[172,1169,1170],{"class":334}," traceData?.loc;\n",[172,1172,1174],{"class":174,"line":1173},48,[172,1175,539],{"emptyLinePlaceholder":129},[172,1177,1179,1182],{"class":174,"line":1178},49,[172,1180,1181],{"class":320},"  return",[172,1183,595],{"class":334},[172,1185,1187],{"class":174,"line":1186},50,[172,1188,1189],{"class":334},"    nodesData,\n",[172,1191,1193],{"class":174,"line":1192},51,[172,1194,1195],{"class":334},"    traceData,\n",[172,1197,1199],{"class":174,"line":1198},52,[172,1200,1201],{"class":334},"    currentNodeName,\n",[172,1203,1205],{"class":174,"line":1204},53,[172,1206,1207],{"class":334},"    location,\n",[172,1209,1211],{"class":174,"line":1210},54,[172,1212,1213],{"class":334},"  };\n",[172,1215,1217],{"class":174,"line":1216},55,[172,1218,630],{"class":334},[1220,1221,1222],"style",{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html pre.shiki code .snl16, html code.shiki .snl16{--shiki-default:#F97583}html pre.shiki code .sDLfK, html code.shiki .sDLfK{--shiki-default:#79B8FF}html pre.shiki code .s95oV, html code.shiki .s95oV{--shiki-default:#E1E4E8}html pre.shiki code .svObZ, html code.shiki .svObZ{--shiki-default:#B392F0}html pre.shiki code .sU2Wk, html code.shiki .sU2Wk{--shiki-default:#9ECBFF}html pre.shiki code .s9osk, html code.shiki .s9osk{--shiki-default:#FFAB70}html pre.shiki code .sns5M, html code.shiki .sns5M{--shiki-default:#DBEDFF}html pre.shiki code .sRjNt, html code.shiki .sRjNt{--shiki-default:#85E89D;--shiki-default-font-weight:bold}html pre.shiki code .sAwPA, html code.shiki .sAwPA{--shiki-default:#6A737D}",{"title":117,"searchDepth":118,"depth":118,"links":1224},[1225,1226],{"id":155,"depth":121,"text":155},{"id":499,"depth":121,"text":499},"2026-05-24","通过解析 Cloudflare 的 \u002Fcdn-cgi\u002Ftrace 接口获取当前网络节点 ID，再结合 Cloudflare Status 的公共 API 匹配出节点名称，从而在网站上动态显示访客正在使用的 Cloudflare 网络名称。",{},"\u002Fblog\u002Fzh-hans\u002Fcf-network",{"title":136,"description":141},"blog\u002Fzh-hans\u002Fcf-network","r9x__ldE5hdhdMYCUs1YncNUWDbMeA-kId5xk9j7eSU",{"id":1235,"title":1236,"body":1237,"date":1301,"desc":1244,"description":1241,"edit":1302,"extension":127,"meta":1303,"navigation":129,"path":1304,"seo":1305,"stem":1306,"__hash__":1307},"blog\u002Fblog\u002Fzh-hans\u002Fhello-world.md","Hello World",{"type":8,"value":1238,"toc":1299},[1239,1242,1245,1296],[15,1240,1241],{},"Ciallo～(∠·ω\u003C )⌒★",[15,1243,1244],{},"这是未晞酱的第一个博客喵~",[164,1246,1248],{"className":311,"code":1247,"language":313,"meta":117,"style":117},"const neko = new Neko();\nneko.owner = 'Weixi-chan';\nneko.say('Hello World!');\n",[32,1249,1250,1267,1280],{"__ignoreMap":117},[172,1251,1252,1254,1257,1259,1262,1265],{"class":174,"line":175},[172,1253,321],{"class":320},[172,1255,1256],{"class":324}," neko",[172,1258,328],{"class":320},[172,1260,1261],{"class":320}," new",[172,1263,1264],{"class":338}," Neko",[172,1266,355],{"class":334},[172,1268,1269,1272,1275,1278],{"class":174,"line":118},[172,1270,1271],{"class":334},"neko.owner ",[172,1273,1274],{"class":320},"=",[172,1276,1277],{"class":345}," 'Weixi-chan'",[172,1279,534],{"class":334},[172,1281,1282,1285,1288,1290,1293],{"class":174,"line":121},[172,1283,1284],{"class":334},"neko.",[172,1286,1287],{"class":338},"say",[172,1289,342],{"class":334},[172,1291,1292],{"class":345},"'Hello World!'",[172,1294,1295],{"class":334},");\n",[1220,1297,1298],{},"html pre.shiki code .snl16, html code.shiki .snl16{--shiki-default:#F97583}html pre.shiki code .sDLfK, html code.shiki .sDLfK{--shiki-default:#79B8FF}html pre.shiki code .svObZ, html code.shiki .svObZ{--shiki-default:#B392F0}html pre.shiki code .s95oV, html code.shiki .s95oV{--shiki-default:#E1E4E8}html pre.shiki code .sU2Wk, html code.shiki .sU2Wk{--shiki-default:#9ECBFF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}",{"title":117,"searchDepth":118,"depth":118,"links":1300},[],"2026-05-16","2026-05-17",{},"\u002Fblog\u002Fzh-hans\u002Fhello-world",{"title":1236,"description":1241},"blog\u002Fzh-hans\u002Fhello-world","Rs_XRtHf9wapg9TP_t6Lh94K3_3OSo4Zx_hPEETmcTg",[1309,1312,1315,1318,1321,1324,1327,1330,1333,1336,1339,1342,1345,1348,1351,1354,1357,1360,1363,1366,1369,1372,1375,1378,1381,1384,1387,1390,1393,1396,1399,1402,1405,1408,1411,1414,1417,1420,1423,1426,1429,1432,1435,1438,1441,1444,1447,1450,1453,1456,1459,1462,1465,1468,1471,1474,1477,1480,1483,1486,1489,1492,1495,1498,1501,1504,1507,1510,1513,1516,1519,1522,1525,1528,1531,1534,1537,1540,1543,1546,1549,1552,1555,1558,1561,1564,1567,1570,1573,1576,1579,1582,1585,1588,1591,1594,1597,1600,1603,1606,1609,1612,1615,1618,1621,1624,1627,1630,1633,1636,1639,1642,1645,1648,1651,1654,1657,1660,1663,1666,1669,1672,1675,1678,1681,1684,1687,1690,1693,1696,1699,1702,1705,1708,1711,1714,1717,1720,1723,1725,1728,1731,1734,1737,1740,1743,1746,1749,1752,1755,1758,1761,1764,1767,1770,1773,1776,1779,1782,1785,1788,1791,1794,1797,1800,1803,1806,1809,1812,1815,1818,1821,1824,1827,1830,1833,1836,1839,1842,1845,1848,1851,1854,1857,1860,1863,1866,1869,1872,1875,1878,1881,1884,1887,1890,1893,1896,1899,1902,1905,1908,1911,1914,1917,1920,1923,1926,1929,1932,1935,1938,1941,1944,1947,1950,1953,1956,1959,1962,1965,1968,1971,1974,1977,1980,1983,1986,1989,1992,1995,1998,2001,2004,2007,2010,2013,2016,2019,2022,2025,2028,2031,2034,2037,2040,2043,2046,2049,2052,2055,2058,2061,2064,2067,2070,2073,2076,2079,2082,2085,2088,2091,2094,2097,2100,2103,2106,2109,2112,2115,2118,2121,2124,2127,2130,2133,2136,2139,2142,2145,2148,2151,2154,2157,2160,2163,2166,2169,2172,2175,2178,2181,2184,2187,2190,2193,2196,2199,2202,2205,2208,2211,2214,2217,2220,2223,2226,2229,2232,2235,2238,2241,2244,2247,2250],{"name":1310,"code":1311},"Amsterdam, Netherlands - (AMS)","AMS",{"name":1313,"code":1314},"Amman, Jordan - (AMM)","AMM",{"name":1316,"code":1317},"Adelaide, SA, Australia - (ADL)","ADL",{"name":1319,"code":1320},"Americana, Brazil - (QWJ)","QWJ",{"name":1322,"code":1323},"Accra, Ghana - (ACC)","ACC",{"name":1325,"code":1326},"Ahmedabad, India - (AMD)","AMD",{"name":1328,"code":1329},"Albuquerque, NM, United States - (ABQ)","ABQ",{"name":1331,"code":1332},"Auckland, New Zealand - (AKL)","AKL",{"name":1334,"code":1335},"Athens, Greece - (ATH)","ATH",{"name":1337,"code":1338},"Arica, Chile - (ARI)","ARI",{"name":1340,"code":1341},"Algiers, Algeria - (ALG)","ALG",{"name":1343,"code":1344},"Almaty, Kazakhstan - (ALA)","ALA",{"name":1346,"code":1347},"Astara, Azerbaijan - (LLK)","LLK",{"name":1349,"code":1350},"Anchorage, AK, United States - (ANC)","ANC",{"name":1352,"code":1353},"Ashburn, VA, United States - (IAD)","IAD",{"name":1355,"code":1356},"Brisbane, QLD, Australia - (BNE)","BNE",{"name":1358,"code":1359},"Barcelona, Spain - (BCN)","BCN",{"name":1361,"code":1362},"Baghdad, Iraq - (BGW)","BGW",{"name":1364,"code":1365},"Annaba, Algeria - (AAE)","AAE",{"name":1367,"code":1368},"Atlanta, GA, United States - (ATL)","ATL",{"name":1370,"code":1371},"Belgrade, Serbia - (BEG)","BEG",{"name":1373,"code":1374},"Baku, Azerbaijan - (GYD)","GYD",{"name":1376,"code":1377},"Bangalore, India - (BLR)","BLR",{"name":1379,"code":1380},"Antananarivo, Madagascar - (TNR)","TNR",{"name":1382,"code":1383},"Canberra, ACT, Australia - (CBR)","CBR",{"name":1385,"code":1386},"Berlin, Germany - (TXL)","TXL",{"name":1388,"code":1389},"Bangkok, Thailand - (BKK)","BKK",{"name":1391,"code":1392},"Cape Town, South Africa - (CPT)","CPT",{"name":1394,"code":1395},"Belo Horizonte, Brazil - (CNF)","CNF",{"name":1397,"code":1398},"Basra, Iraq - (BSR)","BSR",{"name":1400,"code":1401},"Christchurch, New Zealand - (CHC)","CHC",{"name":1403,"code":1404},"Austin, TX, United States - (AUS)","AUS",{"name":1406,"code":1407},"Beirut, Lebanon - (BEY)","BEY",{"name":1409,"code":1410},"Bandar Seri Begawan, Brunei - (BWN)","BWN",{"name":1412,"code":1413},"Blumenau, Brazil - (BNU)","BNU",{"name":1415,"code":1416},"Hagatna, Guam - (GUM)","GUM",{"name":1418,"code":1419},"Bangor, ME, United States - (BGR)","BGR",{"name":1421,"code":1422},"Bordeaux, France - (BOD)","BOD",{"name":1424,"code":1425},"Boston, MA, United States - (BOS)","BOS",{"name":1427,"code":1428},"Dakar, Senegal - (DKR)","DKR",{"name":1430,"code":1431},"Dammam, Saudi Arabia - (DMM)","DMM",{"name":1433,"code":1434},"Bratislava, Slovakia   - (BTS)","BTS",{"name":1436,"code":1437},"Melbourne, VIC, Australia - (MEL)","MEL",{"name":1439,"code":1440},"Doha, Qatar - (DOH)","DOH",{"name":1442,"code":1443},"Brussels, Belgium - (BRU)","BRU",{"name":1445,"code":1446},"Buffalo, NY, United States - (BUF)","BUF",{"name":1448,"code":1449},"Dar Es Salaam, Tanzania - (DAR)","DAR",{"name":1451,"code":1452},"Brasilia, Brazil - (BSB)","BSB",{"name":1454,"code":1455},"Buenos Aires, Argentina - (EZE)","EZE",{"name":1457,"code":1458},"Bucharest, Romania - (OTP)","OTP",{"name":1460,"code":1461},"Dubai, United Arab Emirates - (DXB)","DXB",{"name":1463,"code":1464},"Djibouti City, Djibouti - (JIB)","JIB",{"name":1466,"code":1467},"Calgary, AB, Canada - (YYC)","YYC",{"name":1469,"code":1470},"Cebu, Philippines - (CEB)","CEB",{"name":1472,"code":1473},"Noumea, New Caledonia - (NOU)","NOU",{"name":1475,"code":1476},"Perth, WA, Australia - (PER)","PER",{"name":1478,"code":1479},"Budapest, Hungary - (BUD)","BUD",{"name":1481,"code":1482},"Durban, South Africa - (DUR)","DUR",{"name":1484,"code":1485},"Charlotte, NC, United States - (CLT)","CLT",{"name":1487,"code":1488},"Erbil, Iraq - (EBL)","EBL",{"name":1490,"code":1491},"Chandigarh, India - (IXC)","IXC",{"name":1493,"code":1494},"Chicago, IL, United States - (ORD)","ORD",{"name":1496,"code":1497},"Sydney, NSW, Australia - (SYD)","SYD",{"name":1499,"code":1500},"Campinas, Brazil - (VCP)","VCP",{"name":1502,"code":1503},"Changde, China - (CGD)","CGD",{"name":1505,"code":1506},"Haifa, Israel - (HFA)","HFA",{"name":1508,"code":1509},"Gaborone, Botswana - (GBE)","GBE",{"name":1511,"code":1512},"Copenhagen, Denmark - (CPH)","CPH",{"name":1514,"code":1515},"Chennai, India - (MAA)","MAA",{"name":1517,"code":1518},"Harare, Zimbabwe - (HRE)","HRE",{"name":1520,"code":1521},"Jeddah, Saudi Arabia - (JED)","JED",{"name":1523,"code":1524},"Tahiti, French Polynesia - (PPT)","PPT",{"name":1526,"code":1527},"Cleveland, OH, United States - (CLE)","CLE",{"name":1529,"code":1530},"Johannesburg, South Africa - (JNB)","JNB",{"name":1532,"code":1533},"Kuwait City, Kuwait - (KWI)","KWI",{"name":1535,"code":1536},"Dublin, Ireland - (DUB)","DUB",{"name":1538,"code":1539},"Columbus, OH, United States - (CMH)","CMH",{"name":1541,"code":1542},"Suva, Fiji - (SUV)","SUV",{"name":1544,"code":1545},"Dallas, TX, United States - (DFW)","DFW",{"name":1547,"code":1548},"Manama, Bahrain - (BAH)","BAH",{"name":1550,"code":1551},"Kigali, Rwanda - (KGL)","KGL",{"name":1553,"code":1554},"Chittagong, Bangladesh - (CGP)","CGP",{"name":1556,"code":1557},"Hobart, Australia - (HBA)","HBA",{"name":1559,"code":1560},"Frankfurt, Germany - (FRA)","FRA",{"name":1562,"code":1563},"Muscat, Oman - (MCT)","MCT",{"name":1565,"code":1566},"Denver, CO, United States - (DEN)","DEN",{"name":1568,"code":1569},"Colombo, Sri Lanka - (CMB)","CMB",{"name":1571,"code":1572},"Lagos, Nigeria - (LOS)","LOS",{"name":1574,"code":1575},"Curitiba, Brazil - (CWB)","CWB",{"name":1577,"code":1578},"Wellington, New Zealand - (WLG)","WLG",{"name":1580,"code":1581},"Luanda, Angola - (LAD)","LAD",{"name":1583,"code":1584},"Detroit, MI, United States - (DTW)","DTW",{"name":1586,"code":1587},"Geneva, Switzerland - (GVA)","GVA",{"name":1589,"code":1590},"Dhaka, Bangladesh - (DAC)","DAC",{"name":1592,"code":1593},"Florianopolis, Brazil - (FLN)","FLN",{"name":1595,"code":1596},"Najaf, Iraq - (NJF)","NJF",{"name":1598,"code":1599},"Fortaleza, Brazil - (FOR)","FOR",{"name":1601,"code":1602},"Gothenburg, Sweden - (GOT)","GOT",{"name":1604,"code":1605},"Maputo, Mozambique - (MPM)","MPM",{"name":1607,"code":1608},"Foshan, China - (FUO)","FUO",{"name":1610,"code":1611},"Nasiriyah, Iraq - (XNH)","XNH",{"name":1613,"code":1614},"Durham, NC, United States - (RDU)","RDU",{"name":1616,"code":1617},"Mombasa, Kenya - (MBA)","MBA",{"name":1619,"code":1620},"Hamburg, Germany - (HAM)","HAM",{"name":1622,"code":1623},"Ramallah - (ZDM)","ZDM",{"name":1625,"code":1626},"Georgetown, Guyana - (GEO)","GEO",{"name":1628,"code":1629},"Fukuoka, Japan - (FUK)","FUK",{"name":1631,"code":1632},"Guadalajara, Mexico - (GDL)","GDL",{"name":1634,"code":1635},"Helsinki, Finland - (HEL)","HEL",{"name":1637,"code":1638},"Riyadh, Saudi Arabia - (RUH)","RUH",{"name":1640,"code":1641},"Nairobi, Kenya - (NBO)","NBO",{"name":1643,"code":1644},"Fuzhou, China - (FOC)","FOC",{"name":1646,"code":1647},"Halifax, Canada - (YHZ)","YHZ",{"name":1649,"code":1650},"Guangzhou, China - (CAN)","CAN",{"name":1652,"code":1653},"Istanbul, Turkey - (IST)","IST",{"name":1655,"code":1656},"Guatemala City, Guatemala - (GUA)","GUA",{"name":1658,"code":1659},"Honolulu, HI, United States - (HNL)","HNL",{"name":1661,"code":1662},"Sulaymaniyah, Iraq - (ISU)","ISU",{"name":1664,"code":1665},"Oran, Algeria - (ORN)","ORN",{"name":1667,"code":1668},"Tel Aviv, Israel - (TLV)","TLV",{"name":1670,"code":1671},"Houston, TX, United States - (IAH)","IAH",{"name":1673,"code":1674},"Guayaquil, Ecuador - (GYE)","GYE",{"name":1676,"code":1677},"Haikou, China - (HAK)","HAK",{"name":1679,"code":1680},"Ouagadougou, Burkina Faso   - (OUA)","OUA",{"name":1682,"code":1683},"Izmir, Turkey - (ADB)","ADB",{"name":1685,"code":1686},"Kyiv, Ukraine - (KBP)","KBP",{"name":1688,"code":1689},"Port Louis, Mauritius - (MRU)","MRU",{"name":1691,"code":1692},"Indianapolis, IN, United States - (IND)","IND",{"name":1694,"code":1695},"Hanoi, Vietnam - (HAN)","HAN",{"name":1697,"code":1698},"Lisbon, Portugal - (LIS)","LIS",{"name":1700,"code":1701},"Jacksonville, FL, United States - (JAX)","JAX",{"name":1703,"code":1704},"Hengshui, China - (SJW)","SJW",{"name":1706,"code":1707},"Joinville, Brazil - (JOI)","JOI",{"name":1709,"code":1710},"London, United Kingdom - (LHR)","LHR",{"name":1712,"code":1713},"Kansas City, MO, United States - (MCI)","MCI",{"name":1715,"code":1716},"Ho Chi Minh City, Vietnam - (SGN)","SGN",{"name":1718,"code":1719},"Tunis, Tunisia - (TUN)","TUN",{"name":1721,"code":1722},"Juazeiro do Norte, Brazil - (JDO)","JDO",{"name":1724,"code":276},"Hong Kong - (HKG)",{"name":1726,"code":1727},"Lima, Peru - (LIM)","LIM",{"name":1729,"code":1730},"Luxembourg City, Luxembourg - (LUX)","LUX",{"name":1732,"code":1733},"Kingston, Jamaica - (KIN)","KIN",{"name":1735,"code":1736},"Kinshasa, DR Congo - (FIH)","FIH",{"name":1738,"code":1739},"Las Vegas, NV, United States - (LAS)","LAS",{"name":1741,"code":1742},"Hyderabad, India - (HYD)","HYD",{"name":1744,"code":1745},"Manaus, Brazil - (MAO)","MAO",{"name":1747,"code":1748},"Lyon, France - (LYS)","LYS",{"name":1750,"code":1751},"Cairo, Egypt - (CAI)","CAI",{"name":1753,"code":1754},"Los Angeles, CA, United States - (LAX)","LAX",{"name":1756,"code":1757},"Madrid, Spain - (MAD)","MAD",{"name":1759,"code":1760},"Islamabad, Pakistan - (ISB)","ISB",{"name":1762,"code":1763},"Windhoek, Namibia - (WDH)","WDH",{"name":1765,"code":1766},"Manchester, United Kingdom - (MAN)","MAN",{"name":1768,"code":1769},"Memphis, TN, United States - (MEM)","MEM",{"name":1771,"code":1772},"Jakarta, Indonesia - (CGK)","CGK",{"name":1774,"code":1775},"Yamoussoukro, Ivory Coast - (ASK)","ASK",{"name":1777,"code":1778},"Marseille, France - (MRS)","MRS",{"name":1780,"code":1781},"Panama City, Panama - (PTY)","PTY",{"name":1783,"code":1784},"Mexico City, Mexico - (MEX)","MEX",{"name":1786,"code":1787},"Abidjan, Ivory Coast - (ABJ)","ABJ",{"name":1789,"code":1790},"Miami, FL, United States - (MIA)","MIA",{"name":1792,"code":1793},"Milan, Italy - (MXP)","MXP",{"name":1795,"code":1796},"Jinan, China - (TNA)","TNA",{"name":1798,"code":1799},"Paramaribo, Suriname - (PBM)","PBM",{"name":1801,"code":1802},"Kampala, Uganda - (EBB)","EBB",{"name":1804,"code":1805},"Minneapolis, MN, United States - (MSP)","MSP",{"name":1807,"code":1808},"Porto Alegre, Brazil - (POA)","POA",{"name":1810,"code":1811},"Minsk, Belarus - (MSQ)","MSQ",{"name":1813,"code":1814},"Moscow, Russia - (DME)","DME",{"name":1816,"code":1817},"Johor Bahru, Malaysia - (JHB)","JHB",{"name":1819,"code":1820},"Quito, Ecuador - (UIO)","UIO",{"name":1822,"code":1823},"Munich, Germany - (MUC)","MUC",{"name":1825,"code":1826},"Kanpur, India - (KNU)","KNU",{"name":1828,"code":1829},"Nashville, United States - (BNA)","BNA",{"name":1831,"code":1832},"Newark, NJ, United States - (EWR)","EWR",{"name":1834,"code":1835},"Nicosia, Cyprus - (LCA)","LCA",{"name":1837,"code":1838},"Kaohsiung City, Taiwan - (KHH)","KHH",{"name":1840,"code":1841},"Recife, Brazil - (REC)","REC",{"name":1843,"code":1844},"Oslo, Norway - (OSL)","OSL",{"name":1846,"code":1847},"Norfolk, VA, United States - (ORF)","ORF",{"name":1849,"code":1850},"Karachi, Pakistan - (KHI)","KHI",{"name":1852,"code":1853},"Ribeirao Preto, Brazil - (RAO)","RAO",{"name":1855,"code":1856},"Rio de Janeiro, Brazil - (GIG)","GIG",{"name":1858,"code":1859},"Kathmandu, Nepal - (KTM)","KTM",{"name":1861,"code":1862},"Palermo, Italy - (PMO)","PMO",{"name":1864,"code":1865},"Oklahoma City, OK, United States - (OKC)","OKC",{"name":1867,"code":1868},"Paris, France - (CDG)","CDG",{"name":1870,"code":1871},"Omaha, NE, United States - (OMA)","OMA",{"name":1873,"code":1874},"Prague, Czech Republic - (PRG)","PRG",{"name":1876,"code":1877},"Kolkata, India - (CCU)","CCU",{"name":1879,"code":1880},"Ottawa, Canada - (YOW)","YOW",{"name":1882,"code":1883},"Santiago, Chile - (SCL)","SCL",{"name":1885,"code":1886},"Philadelphia, United States - (PHL)","PHL",{"name":1888,"code":1889},"Krasnoyarsk, Russia - (KJA)","KJA",{"name":1891,"code":1892},"Lusaka, Zambia - (LUN)","LUN",{"name":1894,"code":1895},"Kuala Lumpur, Malaysia - (KUL)","KUL",{"name":1897,"code":1898},"Phoenix, AZ, United States - (PHX)","PHX",{"name":1900,"code":1901},"Riga, Latvia - (RIX)","RIX",{"name":1903,"code":1904},"Santo Domingo, Dominican Republic - (SDQ)","SDQ",{"name":1906,"code":1907},"Addis Ababa, Ethiopia - (ADD)","ADD",{"name":1909,"code":1910},"Rome, Italy - (FCO)","FCO",{"name":1912,"code":1913},"Pittsburgh, PA, United States - (PIT)","PIT",{"name":1915,"code":1916},"Lilongwe, Malawi - (LLW)","LLW",{"name":1918,"code":1919},"Portland, OR, United States - (PDX)","PDX",{"name":1921,"code":1922},"Saint Petersburg, Russia - (LED)","LED",{"name":1924,"code":1925},"Langfang, China - (PKX)","PKX",{"name":1927,"code":1928},"Constantine, Algeria - (CZL)","CZL",{"name":1930,"code":1931},"Queretaro, MX, Mexico - (QRO)","QRO",{"name":1933,"code":1934},"Santa Venera, Malta - (MLA)","MLA",{"name":1936,"code":1937},"Richmond, VA, United States - (RIC)","RIC",{"name":1939,"code":1940},"Sorocaba, Brazil - (SOD)","SOD",{"name":1942,"code":1943},"Skopje, North Macedonia - (SKP)","SKP",{"name":1945,"code":1946},"Sofia, Bulgaria - (SOF)","SOF",{"name":1948,"code":1949},"Macau - (MFM)","MFM",{"name":1951,"code":1952},"Sacramento, CA, United States - (SMF)","SMF",{"name":1954,"code":1955},"Stockholm, Sweden - (ARN)","ARN",{"name":1957,"code":1958},"Salt Lake City, UT, United States - (SLC)","SLC",{"name":1960,"code":1961},"Tegucigalpa, Honduras - (TGU)","TGU",{"name":1963,"code":1964},"Stuttgart, Germany   - (STR)","STR",{"name":1966,"code":1967},"San Antonio, TX, United States - (SAT)","SAT",{"name":1969,"code":1970},"Manila, Philippines - (MNL)","MNL",{"name":1972,"code":1973},"San Diego, CA, United States - (SAN)","SAN",{"name":1975,"code":1976},"Tallinn, Estonia - (TLL)","TLL",{"name":1978,"code":1979},"Mumbai, India - (BOM)","BOM",{"name":1981,"code":1982},"Tbilisi, Georgia - (TBS)","TBS",{"name":1984,"code":1985},"San Francisco, CA, United States - (SFO)","SFO",{"name":1987,"code":1988},"Vitoria, Brazil - (VIX)","VIX",{"name":1990,"code":1991},"San Jose, CA, United States - (SJC)","SJC",{"name":1993,"code":1994},"Thessaloniki, Greece - (SKG)","SKG",{"name":1996,"code":1997},"Nagpur, India - (NAG)","NAG",{"name":1999,"code":2000},"Saskatoon, SK, Canada - (YXE)","YXE",{"name":2002,"code":2003},"Naha, Japan  - (OKA)","OKA",{"name":2005,"code":2006},"Tirana, Albania - (TIA)","TIA",{"name":2008,"code":2009},"Campos dos Goytacazes, Brazil - (CAW)","CAW",{"name":2011,"code":2012},"Seattle, WA, United States - (SEA)","SEA",{"name":2014,"code":2015},"Vienna, Austria - (VIE)","VIE",{"name":2017,"code":2018},"New Delhi, India - (DEL)","DEL",{"name":2020,"code":2021},"Chapeco, Brazil - (XAP)","XAP",{"name":2023,"code":2024},"Osaka, Japan - (KIX)","KIX",{"name":2026,"code":2027},"Vilnius, Lithuania - (VNO)","VNO",{"name":2029,"code":2030},"Sioux Falls, SD, United States - (FSD)","FSD",{"name":2032,"code":2033},"Bridgetown, Barbados - (BGI)","BGI",{"name":2035,"code":2036},"Warsaw, Poland - (WAW)","WAW",{"name":2038,"code":2039},"Patna, India - (PAT)","PAT",{"name":2041,"code":2042},"Phnom Penh, Cambodia - (PNH)","PNH",{"name":2044,"code":2045},"Tallahassee, FL, United States - (TLH)","TLH",{"name":2047,"code":2048},"Santiago de los Caballeros, Dominican Republic - (STI)","STI",{"name":2050,"code":2051},"Wroclaw, Poland - (WRO)","WRO",{"name":2053,"code":2054},"Zagreb, Croatia - (ZAG)","ZAG",{"name":2056,"code":2057},"Qingdao, China - (TAO)","TAO",{"name":2059,"code":2060},"Tampa, FL, United States - (TPA)","TPA",{"name":2062,"code":2063},"La Paz, Bolivia - (LPB)","LPB",{"name":2065,"code":2066},"Toronto, ON, Canada - (YYZ)","YYZ",{"name":2068,"code":2069},"Seoul, South Korea - (ICN)","ICN",{"name":2071,"code":2072},"Zurich, Switzerland - (ZRH)","ZRH",{"name":2074,"code":2075},"Vancouver, BC, Canada - (YVR)","YVR",{"name":2077,"code":2078},"Shanghai, China - (SHA)","SHA",{"name":2080,"code":2081},"San Juan, Puerto Rico - (SJU)","SJU",{"name":2083,"code":2084},"Singapore, Singapore - (SIN)","SIN",{"name":2086,"code":2087},"Winnipeg, MB, Canada - (YWG)","YWG",{"name":2089,"code":2090},"Barranquilla, Colombia - (BAQ)","BAQ",{"name":2092,"code":2093},"Surat Thani, Thailand - (URT)","URT",{"name":2095,"code":2096},"Palmas, Brazil - (PMW)","PMW",{"name":2098,"code":2099},"Taipei - (TPE)","TPE",{"name":2101,"code":2102},"Aracatuba, Brazil - (ARU)","ARU",{"name":2104,"code":2105},"Port of Spain, Trinidad and Tobago - (POS)","POS",{"name":2107,"code":2108},"Salvador, Brazil - (SSA)","SSA",{"name":2110,"code":2111},"Tokyo, Japan - (NRT)","NRT",{"name":2113,"code":2114},"Ulaanbaatar, Mongolia - (ULN)","ULN",{"name":2116,"code":2117},"Vientiane, Laos - (VTE)","VTE",{"name":2119,"code":2120},"Xinyu, China - (KHN)","KHN",{"name":2122,"code":2123},"Yerevan, Armenia - (EVN)","EVN",{"name":2125,"code":2126},"Yogyakarta, Indonesia - (JOG)","JOG",{"name":2128,"code":2129},"Cagayan de Oro, Philippines - (CGY)","CGY",{"name":2131,"code":2132},"Ljubljana, Slovenia - (LJU)","LJU",{"name":2134,"code":2135},"Kochi, India - (COK)","COK",{"name":2137,"code":2138},"Cuiaba, Brazil - (CGB)","CGB",{"name":2140,"code":2141},"Denpasar, Indonesia - (DPS)","DPS",{"name":2143,"code":2144},"Kannur, India - (CNN)","CNN",{"name":2146,"code":2147},"Cali, Colombia - (CLO)","CLO",{"name":2149,"code":2150},"San Pedro Sula, Honduras - (SAP)","SAP",{"name":2152,"code":2153},"Shenzhen, China - (SZX)","SZX",{"name":2155,"code":2156},"Guiyang, China - (KWE)","KWE",{"name":2158,"code":2159},"Shaoxing, China - (HGH)","HGH",{"name":2161,"code":2162},"Changzhou, China - (CZX)","CZX",{"name":2164,"code":2165},"Kunming, China - (KMG)","KMG",{"name":2167,"code":2168},"Chiang Mai, Thailand - (CNX)","CNX",{"name":2170,"code":2171},"Zhengzhou, China - (CGO)","CGO",{"name":2173,"code":2174},"Yangquan, China - (TYN)","TYN",{"name":2176,"code":2177},"Changsha, China - (CSX)","CSX",{"name":2179,"code":2180},"Dalian, China - (DLC)","DLC",{"name":2182,"code":2183},"Beihai, China - (BHY)","BHY",{"name":2185,"code":2186},"Chongqing, China - (CKG)","CKG",{"name":2188,"code":2189},"Xiangyang, China - (XFN)","XFN",{"name":2191,"code":2192},"Da Nang, Vietnam - (DAD)","DAD",{"name":2194,"code":2195},"Jiaxing, China - (JXG)","JXG",{"name":2197,"code":2198},"Tarlac City, Philippines - (CRK)","CRK",{"name":2200,"code":2201},"Thimphu, Bhutan - (PBH)","PBH",{"name":2203,"code":2204},"Baoji, China - (XIY)","XIY",{"name":2206,"code":2207},"Astana, Kazakhstan - (NQZ)","NQZ",{"name":2209,"code":2210},"Kuching, Malaysia - (KCH)","KCH",{"name":2212,"code":2213},"Aktobe, Kazakhstan - (AKX)","AKX",{"name":2215,"code":2216},"Tongren, China - (TEN)","TEN",{"name":2218,"code":2219},"Taizhou, China - (HYN)","HYN",{"name":2221,"code":2222},"Bishkek, Kyrgyzstan - (FRU)","FRU",{"name":2224,"code":2225},"Malang, Indonesia - (MLG)","MLG",{"name":2227,"code":2228},"Lahore, Pakistan - (LHE)","LHE",{"name":2230,"code":2231},"Chengdu, China - (CTU)","CTU",{"name":2233,"code":2234},"Agra, India - (AGR)","AGR",{"name":2236,"code":2237},"Coimbatore, India - (CJB)","CJB",{"name":2239,"code":2240},"Xingyi, China - (ACX)","ACX",{"name":2242,"code":2243},"Bhubaneswar, India - (BBI)","BBI",{"name":2245,"code":2246},"Luoyang, China - (LYA)","LYA",{"name":2248,"code":2249},"Pune, India - (PNQ)","PNQ",{"name":2251,"code":2252},"Sambalpur, India - (JRG)","JRG",1779981579268]