|
對(duì)磁盤的物理結(jié)構(gòu),邏輯結(jié)構(gòu)和存儲(chǔ)結(jié)構(gòu)有了比較深入的了解后,我們來仔細(xì)探討FAT32文件系統(tǒng)的存儲(chǔ)組織結(jié)構(gòu)。說到文件系統(tǒng)的組織結(jié)構(gòu),我們應(yīng)該馬上意識(shí)到,這指的是文件系統(tǒng)在同一個(gè)分區(qū)內(nèi)的組織結(jié)構(gòu),在這個(gè)話題上,我們完全可以不管分區(qū)之外的所有事情。
為了分析FAT32文件系統(tǒng)的存儲(chǔ)組織結(jié)構(gòu),我們來建立一個(gè)實(shí)實(shí)在在的文件系統(tǒng):將U盤插入電腦,將U盤格式化成FAT32分區(qū)格式:
26913704_1337417579yTAp.jpg (21.77 KB, 下載次數(shù): 73)
下載附件
2017-4-1 22:29 上傳
以建好的U盤FAT32文件系統(tǒng)為基礎(chǔ),下面從文件系統(tǒng)的各個(gè)組成來分別加以介紹。
分區(qū)引導(dǎo)扇區(qū)DBR
用winhex打開U盤顯示如下:
26913704_1337417622SapJ.jpg (173.39 KB, 下載次數(shù): 80)
下載附件
2017-4-1 22:29 上傳
這是FAT32分區(qū)引導(dǎo)記錄 ,定義如下:
偏移00H: 3字節(jié)的 跳轉(zhuǎn)指令 EB 58 90,跳過下面的BPB和擴(kuò)展BPB部分
偏移03H:8字節(jié)的硬盤分區(qū)類型文本字符名:4D 53 44 4F 53 35 2E 30 即: MSDOS5.0
偏移0BH: 25字節(jié)的分區(qū)參數(shù)塊(BPB),細(xì)分如下:
偏移0BH:扇區(qū)字節(jié)數(shù) 00 02 即0X0200,512字節(jié)
偏移0DH:每簇扇區(qū)數(shù) 08即每簇包括8個(gè)扇區(qū)
偏移0EH:保留扇區(qū)數(shù) 24 00即保留36個(gè)扇區(qū)
偏移10H:FAT表份數(shù) 02即兩個(gè)FAT表
偏移11H:未用 00 00
偏移13H:未用 00 00
偏移15H:介質(zhì)類型 F8即本地硬盤
偏移16H:未用 00 00
偏移18H:每磁道扇區(qū)數(shù) 3F 00 即每磁道63扇區(qū)
偏移1AH:磁頭數(shù) FF 00即255個(gè)磁頭
偏移1CH:隱藏扇區(qū)數(shù) 80 1F即8064個(gè)隱藏扇區(qū)
偏移20H:磁盤總扇區(qū)數(shù) 80 F0 77 00即總共7860352個(gè)扇區(qū)(7860352*512=4024500224,因?yàn)槲业腢盤是4G)
偏移24H:52字節(jié)的擴(kuò)展分區(qū)參數(shù)塊(擴(kuò)展BPB),細(xì)分如下:
偏移24H:FAT表占用扇區(qū)數(shù) EE 1D 00 00即FAT表占7662個(gè)扇區(qū)
偏移28H:未用 00 00 00 00
偏移2CH:根目錄入口簇號(hào) 02 00 00 00即根目錄從02號(hào)簇開始
偏移30H:文件系統(tǒng)信息扇區(qū)號(hào) 01 00即扇區(qū)1
偏移32H:備份引導(dǎo)扇區(qū)的位置 06 00即6號(hào)扇區(qū)(第7個(gè)扇區(qū)),從WINHEX中我們也可以看到,6號(hào)扇區(qū)的內(nèi)容和0號(hào)引導(dǎo)扇區(qū)內(nèi)容 是 一樣的
偏移34H:未用 00 00 00 00 00 00 00 00 00 00 00 00
偏移40H:物理磁盤號(hào) 00
偏移41H:未用 00
偏移42H:擴(kuò)展引導(dǎo)標(biāo)志 29即0X29
偏移43H:磁盤序列號(hào)F1 2A 27 04通常為一隨機(jī)數(shù)
偏移47H:卷標(biāo)ASCII 4E 4F 20 4E 41 4D 45 20 20 20 20 即NO NAME
偏移52H:文件系統(tǒng)格式ASCII 46 41 54 33 32 20 20 20即FAT32
偏移5AH:分區(qū)引導(dǎo)代碼 420字節(jié):
33C98ED1BCF47B8EC18ED9BD007C884E028A5640B408CD137305B9FFFF8AF166
0FB6C640660FB6D180E23FF7E286CDC0ED0641660FB7C966F7E1668946F8837E1
6007538837E2A007732668B461C6683C00CBB0080B90100E82B00E94803A0FA7DB
47D8BF0AC84C074173CFF7409B40EBB0700CD10EBEEA0FB7DEBE5A0F97DEBE0
98CD16CD196660663B46F80F824A00666A0066500653666810000100807E02000F8
52000B441BBAA558A5640CD130F821C0081FB55AA0F851400F6C1010F840D00FE4
602B4428A56408BF4CD13B0F96658665866586658EB2A6633D2660FB74E1866F7F1
FEC28ACA668BD066C1EA10F7761A86D68A56408AE8C0E4060ACCB80102CD13666
10F8254FF81C300026640490F8571FFC34E544C445220202020202000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000
00000000000000D0A52656D6F7665206469736B73206F72206F74686572206D656469
612EFF0D0A4469736B206572726F72FF0D0A507265737320616E79206B657920746F2
0726573746172740D0A0000000000ACCBD80000
偏移1FEH:有效扇區(qū)結(jié)束標(biāo)志 55 AA
到此分區(qū)引導(dǎo)扇區(qū)介紹結(jié)束。
文件分配表FAT
簡(jiǎn)介:
FAT表(文件分配表),是FAT文件系統(tǒng)中用于磁盤數(shù)據(jù)索引和定位而引進(jìn)的一種鏈?zhǔn)浇Y(jié)構(gòu)。在FAT文件系統(tǒng)中,文件的存儲(chǔ)依照FAT表制定的簇鏈?zhǔn)綌?shù)據(jù)結(jié)構(gòu)來進(jìn)行。同時(shí),F(xiàn)AT文件系統(tǒng)將組織數(shù)據(jù)時(shí)使用的目錄也抽象為文件,以簡(jiǎn)化對(duì)數(shù)據(jù)的管理。
FAT1表位置的定位:
在我們前面介紹分區(qū)引導(dǎo)記錄的時(shí)候提到,在偏移0EH處存儲(chǔ)了保留扇區(qū)的個(gè)數(shù),這個(gè)保留扇區(qū)數(shù)指的就是當(dāng)前分區(qū)內(nèi)DBR到FAT表之間的所有扇區(qū)的個(gè)數(shù)(包括DBR但不包括FAT表)。因此,我們可以定位FAT表所在的起始偏移位置了,即24H*200H=4800H。我們貼出4800H處得部分內(nèi)容如下:
26913704_133741764193PP.jpg (73.96 KB, 下載次數(shù): 87)
下載附件
2017-4-1 22:29 上傳
顯然沒有錯(cuò),這就是我們FAT1所存儲(chǔ)的位置,只是當(dāng)前沒有存儲(chǔ)文件,所以FAT比較簡(jiǎn)單罷了。
FAT2表位置的定位:
在我們前面介紹分區(qū)引導(dǎo)記錄的時(shí)候提到,在偏移24H處存儲(chǔ)了FAT表所占用的扇區(qū)個(gè)數(shù),我們又知道FAT2是緊鄰FAT1的,所以可以很容易得到FAT2的存儲(chǔ)位置的偏移地址:FAT1的起始偏移地址+FAT1的大小=4800H+1DEEH*200H=3C2400H,我們貼出3C2400H處的部分內(nèi)容如下:
26913704_1337417687S1X8.jpg (77.96 KB, 下載次數(shù): 97)
下載附件
2017-4-1 22:29 上傳
顯然沒有錯(cuò),這就是我們FAT2所存儲(chǔ)的位置,內(nèi)容與FAT1相同。
FAT表的特性:
FAT表由一系列大小相等的FAT表項(xiàng)組成,它有如下特性:
FAT32中每個(gè)簇的簇地址,使用32bit(4個(gè)字節(jié))記錄在FAT表中。FAT表中的所有字節(jié)位置以4個(gè)字節(jié)為單位進(jìn)行劃分,并對(duì)所有劃分后的位置由0進(jìn)行地址編號(hào)。0 號(hào)地址與1號(hào)地址被系統(tǒng)保留并存儲(chǔ)特殊標(biāo)志內(nèi)容。從2號(hào)地址開始,每個(gè)地址對(duì)應(yīng)于數(shù)據(jù)區(qū)的簇號(hào),F(xiàn)AT表中的地址編號(hào)與數(shù)據(jù)區(qū)中的簇號(hào)相同。我們稱FAT中的這些地址為FAT表項(xiàng),F(xiàn)AT表項(xiàng)中記錄的值稱為FAT表項(xiàng)值。
當(dāng)文件系統(tǒng)被創(chuàng)建,也就是進(jìn)行格式化操作時(shí),分配給FAT區(qū)域的空間將會(huì)被清空,在FAT1與FAT2的0號(hào)表項(xiàng)與1號(hào)表項(xiàng)寫入特定值。由于創(chuàng)建文件系統(tǒng)的同時(shí)也會(huì)創(chuàng)建根目錄,也就是為根目錄分配了一個(gè)簇空間,通常為2號(hào)簇,所以2號(hào)簇所對(duì)應(yīng)的2號(hào)FAT表項(xiàng)也會(huì)被寫入一個(gè)結(jié)束標(biāo)記。
如果某個(gè)簇未被分配使用,它所對(duì)應(yīng)的FAT表項(xiàng)內(nèi)的FAT表項(xiàng)值即用0進(jìn)行填充,表示該FAT表項(xiàng)所對(duì)應(yīng)的簇未分配使用。
當(dāng)某個(gè)簇已被分配使用時(shí),則它對(duì)應(yīng)的FAT表項(xiàng)值也就是該文件的下一個(gè)存儲(chǔ)位置的簇號(hào)。如果該文件結(jié)束于該簇,則在它的FAT表項(xiàng)中記錄的是一個(gè)文件結(jié)束標(biāo)記,對(duì)于FAT32而言,代表文件結(jié)束的FAT表項(xiàng)值為0x0FFFFFFF。
如果某個(gè)簇存在壞扇區(qū),則整個(gè)簇會(huì)用FAT表項(xiàng)值0x0FFFFFF7標(biāo)記為壞簇,不再使用,這個(gè)壞簇標(biāo)記就記錄在它所對(duì)應(yīng)的FAT表項(xiàng)中。
由于簇號(hào)起始于2,所以FAT表的0號(hào)表項(xiàng)與1號(hào)表項(xiàng)不與任何簇對(duì)應(yīng)。FAT32的0號(hào)表項(xiàng)值總是“F8FFFF0F”。1號(hào)表項(xiàng)可能被用于記錄臟標(biāo)志,以說明文件系統(tǒng)沒有被正常卸載或者磁盤表面存在錯(cuò)誤。不過此值似乎并不重要,因此我們只要了解就可以。正常情況下,1號(hào)表項(xiàng)值為“FFFFFFFF”或“FFFFFF0F"。
在文件系統(tǒng)中新建文件時(shí),如果新建的文件只占用一個(gè)簇,為其分配的簇所對(duì)應(yīng)的FAT表項(xiàng)將會(huì)被寫入結(jié)束標(biāo)記。如果新建的文件不只占用一個(gè)簇,則在其所占用的每個(gè)簇對(duì)應(yīng)的FAT表項(xiàng)中寫入為其分配的下一簇的簇號(hào),在最后一個(gè)簇對(duì)應(yīng)的FAT表項(xiàng)中寫入結(jié)束標(biāo)記。
新建目錄時(shí),只為其分配一個(gè)簇的空間,對(duì)應(yīng)的FAT表項(xiàng)中寫入結(jié)束標(biāo)記。當(dāng)目錄增大超出一個(gè)簇的大小時(shí),將會(huì)在空閑空間中繼續(xù)為其分配一個(gè)簇,并在FAT表中為其建立FAT表鏈以描述它所占用的簇情況。
對(duì)文件或目錄進(jìn)行刪除操作時(shí),它們所對(duì)應(yīng)的FAT表項(xiàng)將會(huì)被清空,設(shè)置為0以表示其所對(duì)應(yīng)的簇處于未分配狀態(tài)。
根目錄區(qū)
簡(jiǎn)介:
在FAT32文件系統(tǒng)中,根目錄的位置不再硬性地固定,可以存儲(chǔ)在分區(qū)內(nèi)可尋址的任意簇內(nèi),不過通常根目錄是最早建立的(格式化就生成了)目錄表。所以,我們看到的情況基本上都是根目錄首簇緊鄰FAT2,占簇區(qū)順序上的第1個(gè)簇(即2號(hào)簇)。同時(shí),F(xiàn)AT32文件系統(tǒng)將根目錄當(dāng)做普通的數(shù)據(jù)文件來看,所有沒有了目錄項(xiàng)數(shù)的限制,在需要的時(shí)候可以分配空簇,存儲(chǔ)更多的目錄項(xiàng)。
起始偏移地址定位:
根目錄起始扇區(qū)=保留扇區(qū)數(shù)+FAT×2+(起始簇-2)x每簇的扇區(qū)數(shù),在我們前面介紹分區(qū)引導(dǎo)記錄的時(shí)候提到,偏移2CH處保存了根目錄起始簇號(hào)是2,所以求得根目錄起始扇區(qū)是24H+1DEEH*2H+(2-2)*8H=3C00H,即求得偏移地址3C00H*200H=780000H,我們貼出780000H處的部分內(nèi)容如下:
26913704_1337417728d6Ni.jpg (90.99 KB, 下載次數(shù): 69)
下載附件
2017-4-1 22:29 上傳
目錄區(qū)的一個(gè)目錄項(xiàng)占用32個(gè)字節(jié),可以是長(zhǎng)文件名目錄項(xiàng)、文件目錄項(xiàng)、子目錄項(xiàng)等。
短文件名格式的目錄項(xiàng)
對(duì)于短文件名格式的目錄項(xiàng)。其參數(shù)意義如下:
26913704_13374177831ELN.jpg (73.83 KB, 下載次數(shù): 79)
下載附件
2017-4-1 22:29 上傳
根據(jù)參數(shù)定義,我們來分析一下上圖的目錄項(xiàng) 54 45 53 54 5F 46 41 54 33 32 20 08 00 00 00 00 00 00 00 00 00 00 19 95 10 3F 00 00 00 00 00 00。其中起始11字節(jié)54 45 53 54 5F 46 41 54 33 32 20 是卷標(biāo)TEST_FAT32;第12字節(jié)08指示當(dāng)前目錄項(xiàng)保存的是卷標(biāo);第23-24字節(jié)19 95即9519H,是最近修改時(shí)間:19點(diǎn)40分50秒;第25-26字節(jié)10 3F即3F10H,是最近修改日期:2011年8月16日;
長(zhǎng)文件名格式的目錄項(xiàng)
FAT32的一個(gè)重要的特點(diǎn)是完全支持長(zhǎng)文件名。長(zhǎng)文件名依然是記錄在目錄項(xiàng)中的。為了低版本的OS或程序能正確讀取長(zhǎng)文件名文件,系統(tǒng)自動(dòng)為所有長(zhǎng)文件名文件創(chuàng)建了一個(gè)對(duì)應(yīng)的短文件名,使對(duì)應(yīng)數(shù)據(jù)既可以用長(zhǎng)文件名尋址,也可以用短文件名尋址。不支持長(zhǎng)文件名的OS或程序會(huì)忽略它認(rèn)為不合法的長(zhǎng)文件名字段,而支持長(zhǎng)文件名的OS或程序則會(huì)以長(zhǎng)文件名為顯式項(xiàng)來記錄和編輯,并隱藏起短文件名。
當(dāng)創(chuàng)建一個(gè)長(zhǎng)文件名文件時(shí),系統(tǒng)會(huì)自動(dòng)加上對(duì)應(yīng)的短文件名,其原則如下:
(1)、取長(zhǎng)文件名的前6個(gè)字符加上"~1"形成短文件名,擴(kuò)展名不變。
(2)、如果已存在這個(gè)文件名,則符號(hào)"~"后的數(shù)字遞增,直到5。
長(zhǎng)文件名的實(shí)現(xiàn)有賴于目錄項(xiàng)第12字節(jié)屬性字節(jié),當(dāng)此字節(jié)的值為0FH時(shí),支持長(zhǎng)文件名的系統(tǒng)會(huì)將其當(dāng)做長(zhǎng)文件名的依據(jù),而只支持短文件名的系統(tǒng)會(huì)認(rèn)為是異常而忽略掉。系統(tǒng)將長(zhǎng)文件名以13個(gè)字符為單位進(jìn)行切割,每一組占據(jù)一個(gè)目錄項(xiàng)。所以可能一個(gè)文件需要多個(gè)目錄項(xiàng),這時(shí)長(zhǎng)文件名的各個(gè)目錄項(xiàng)按倒序排列在目錄表中,以防與其他文件名混淆。
長(zhǎng)文件名中的字符采用unicode形式編碼,每個(gè)字符占據(jù)2字節(jié)的空間。其目錄項(xiàng)定義如:
26913704_13374178076643.jpg (42.27 KB, 下載次數(shù): 78)
下載附件
2017-4-1 22:29 上傳
下面是我建立的長(zhǎng)文件名文件夾abcdefghijklmnopqrstuvwxyz1234567890的目錄項(xiàng):
26913704_1337417874cuwW.jpg (41.96 KB, 下載次數(shù): 69)
下載附件
2017-4-1 22:29 上傳
前面已經(jīng)基于一個(gè)格式化的空U盤分析了一下FAT32文件系統(tǒng)存儲(chǔ)的組織結(jié)構(gòu),下面我們從文件操作的角度來分析一下文件系統(tǒng)的運(yùn)作機(jī)制。由于換了個(gè)U盤,所以仍然貼出剛格式化的空U盤的幾個(gè)重要的數(shù)據(jù)區(qū)如下:
26913704_1337420290Bfi5.jpg (147.07 KB, 下載次數(shù): 64)
下載附件
2017-4-1 22:29 上傳
26913704_1337420300tjc0.jpg (70.26 KB, 下載次數(shù): 74)
下載附件
2017-4-1 22:29 上傳
26913704_1337420325Vs5s.jpg (63.54 KB, 下載次數(shù): 80)
下載附件
2017-4-1 22:29 上傳
我們可以看出,在分區(qū)格式化的時(shí)候,系統(tǒng)將卷標(biāo)TEST_FAT32存儲(chǔ)在2號(hào)簇,即跟目錄區(qū),如上面根目錄貼圖所示。同時(shí),在FDT區(qū)2號(hào)簇標(biāo)記位置寫入了文件結(jié)束符FF FF FF 0F。顯然,F(xiàn)AT32文件系統(tǒng)將目錄當(dāng)做普通文件來處理的。
下面我們?cè)诟夸浵滦陆ㄒ粋(gè)文件夾TEST1,看會(huì)有什么變化:
建立了TEST1文件夾后,F(xiàn)DT變成如下:
26913704_13374203419UyE.jpg (53.74 KB, 下載次數(shù): 88)
下載附件
2017-4-1 22:29 上傳
根目錄變成如下:
26913704_1337420359zJcB.jpg (45.29 KB, 下載次數(shù): 70)
下載附件
2017-4-1 22:29 上傳
重新分配了3號(hào)簇:
26913704_1337420374Kr7z.jpg (60.1 KB, 下載次數(shù): 85)
下載附件
2017-4-1 22:29 上傳
從上面的變化可以直觀的看出,系統(tǒng)在新建文件夾時(shí)完成了如下動(dòng)作:
a.在父目錄所在簇上建立新的目錄項(xiàng),存儲(chǔ)當(dāng)前所建文件夾信息。
b.分配一個(gè)新簇,給新建的文件夾建立兩個(gè)目錄項(xiàng):父目錄和當(dāng)前目錄。
c.在FDT表中新分配的簇對(duì)應(yīng)的位置上寫下文件結(jié)束符。
d.建立各部分的鏈路關(guān)系:新建文件夾所對(duì)應(yīng)的目錄項(xiàng)的文件起始簇號(hào)字段寫上新分配簇的簇號(hào),新簇上的兩個(gè)目錄項(xiàng)的文件起始簇號(hào)字段分配寫上父目錄所在簇號(hào)(此處是0,本來我以為是2,即根目錄所在簇,不知道為什么,可能特地用0指示根目錄吧)和當(dāng)前簇號(hào)(此處是3)。
為了驗(yàn)證我們上面分析的正確性,我們?cè)僭赥EST1文件夾下建立新文件夾TEST11,看是否做了如下操作:
a.在父目錄(即TEST1)所在簇(即3號(hào)簇)上建立新的目錄項(xiàng),存儲(chǔ)TEST11文件夾信息。
b.分配一個(gè)新簇(應(yīng)該是4號(hào)簇),給新建的文件夾(即TEST11)建立兩個(gè)目錄項(xiàng):父目錄和當(dāng)前目錄。
c.在FDT表中新分配的簇(應(yīng)該是4號(hào)簇)對(duì)應(yīng)的位置上寫下文件結(jié)束符。
d.建立各部分的鏈路關(guān)系:新建文件夾(即TEST11)所對(duì)應(yīng)的目錄項(xiàng)的文件起始簇號(hào)字段寫上新分配簇的簇號(hào)(應(yīng)該是4號(hào)簇),,新簇上的兩個(gè)目錄項(xiàng)的文件起始簇號(hào)字段分配寫上父目錄所在簇號(hào)(3號(hào)簇)和當(dāng)前簇號(hào)(應(yīng)該是4號(hào)簇)。
新建TEST11文件夾后FDT變成:
26913704_1337420382762G.jpg (53.85 KB, 下載次數(shù): 66)
下載附件
2017-4-1 22:29 上傳
根目錄沒有變化:
26913704_1337420392ZWlW.jpg (45.29 KB, 下載次數(shù): 84)
下載附件
2017-4-1 22:29 上傳
3號(hào)簇變成:
26913704_1337420402SQ81.jpg (63.16 KB, 下載次數(shù): 88)
下載附件
2017-4-1 22:29 上傳
新分配4號(hào)簇:
26913704_13374204139sYT.jpg (53.95 KB, 下載次數(shù): 79)
下載附件
2017-4-1 22:29 上傳
顯然我們的估計(jì)沒有錯(cuò)的,也進(jìn)一步證明我們前面的分析是正確的。
下面我們?cè)俜治鼋⑽募那闆r
我們先建立一個(gè)100字節(jié)的文件TEST.TXT,然后把這個(gè)文件拷貝到U盤的根目錄下,F(xiàn)DT變成如下:
26913704_1337420427yd90.jpg (62.36 KB, 下載次數(shù): 76)
下載附件
2017-4-1 22:29 上傳
根目錄變成:
26913704_1337420443yPZ1.jpg (76.86 KB, 下載次數(shù): 80)
下載附件
2017-4-1 22:29 上傳
新分配5號(hào)簇保存文件內(nèi)容:
26913704_13374204567EX7.jpg (69.39 KB, 下載次數(shù): 64)
下載附件
2017-4-1 22:29 上傳
從上面的變化可以直觀的看出,系統(tǒng)新建文件和新建文件夾所完成的操作是一樣一樣的:
a.在父目錄所在簇上建立新的目錄項(xiàng),存儲(chǔ)當(dāng)前所建文件信息。
b.分配一個(gè)新簇,存儲(chǔ)新建的文件的內(nèi)容。
c.在FDT表中新分配的簇對(duì)應(yīng)的位置上寫下文件結(jié)束符。
d.建立鏈路關(guān)系:新建文件所對(duì)應(yīng)的目錄項(xiàng)的文件起始簇號(hào)字段寫上新分配簇的簇號(hào)。
結(jié)束總結(jié):
1.在FAT32文件系統(tǒng)中,目錄和文件的存儲(chǔ)采用統(tǒng)一的方式。
2.文件系統(tǒng)的操作的單位是簇,每新建立一個(gè)文件或文件夾,至少會(huì)重新分配一個(gè)簇號(hào)。
3.如果一個(gè)文件或目錄的內(nèi)容要多個(gè)簇才能存儲(chǔ)得下,則系統(tǒng)會(huì)分配多個(gè)簇來存儲(chǔ)文件或目錄的內(nèi)容
4.當(dāng)需要多個(gè)簇時(shí),這些簇可能連續(xù)也可能不連續(xù),但無論是連續(xù)或是不連續(xù),系統(tǒng)都是采用FDT鏈表的形式來組織的。
|
|